redis4.0.6集群部署(5.0.2版本更新补充)
Redis集群安装
4版本需要ruby 5版本不需要ruby就能集群
1集群机器分布
192.168.1.133 redis1
192.168.1.134 redis2
192.168.1.135 redis3
2 免密登录
ssh-keygen
ssh-copy-id 192.168.1.133
ssh-copy-id 192.168.1.134
ssh-copy-id 192.168.1.135
3 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
4设置yum源
这里添加阿里源
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/repo/Centos-7.repo
wget https://mirrors.aliyun.com/repo/epel-7.repo
5修改系统参数
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 655350
* soft nproc 65535
* hard nproc 655350
安装依赖
yum install gcc make tcl –y
yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel make bzip2 autoconf automake libtool bison sqlite-devel iconv-devel
6 安装redis
mkdir /opt/haizhi/redis
mkdir -p /opt/haizhi/redis
cd /opt/haizhi/redis/
wget http://download.redis.io/releases/redis-4.0.6.tar.gz
tar zxvf redis-4.0.6.tar.gz
cd redis-4.0.6/ #编译安装完成后会生成bin目录
make & make PREFIX=/opt/haizhi/redis install
cp -a /opt/haizhi/redis/redis-4.0.6/src/redis-trib.rb /opt/haizhi/redis/bin/
#上面是复制集群命令 到bin目录
注意:如果make出错 使用make MALLOC=libc
----------------------
5版本
----------------------
wget http://download.redis.io/releases/redis-5.0.2.tar.gz
tar xzf redis-5.0.2.tar.gz
cd redis-5.0.2
make & make install====================================
7 创建集群需要的目录和配置
创建3个实例目录
cd /opt/haizhi/redis/
mkdir -p cluster-6379/{conf,data,log,pid}
mkdir -p cluster-6380/{conf,data,log,pid}
mkdir -p cluster-6381/{conf,data,log,pid}
为每个实例创建配置文件(以6379为例)
[root@localhost redis]# cat cluster-6379/conf/redis_6379.conf
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /opt/haizhi/redis/cluster-6379/conf/redis_6379.pid
loglevel notice
logfile "/opt/haizhi/redis/cluster-6379/log/redis_6379.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /opt/haizhi/redis/cluster-6379/data
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
cluster-enabled yes
cluster-config-file /opt/haizhi/redis/cluster-6379/conf/nodes-6379.conf
cluster-node-timeout 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
其他实例只需修改6379为6380 6381 即可使用
8 启动各实例
./redis-server /opt/haizhi/redis/cluster-6379/conf/redis_6379.conf
./redis-server /opt/haizhi/redis/cluster-6380/conf/redis_6380.conf
./redis-server /opt/haizhi/redis/cluster-6381/conf/redis_6381.conf
[root@localhost redis]# netstat -lnupt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 17736/./redis-serve
tcp 0 0 0.0.0.0:6380 0.0.0.0:* LISTEN 17741/./redis-serve
tcp 0 0 0.0.0.0:6381 0.0.0.0:* LISTEN 17746/./redis-serve
以上步骤 三个节点都要执行安装操作
安装启动后再选一台机器设置集群
9 设置集群(选一台机器安装)
redis官方4版本提供了redis-trib.rb工具,但是在使用之前需要安装ruby,以及redis和ruby连接
参考https://blog.csdn.net/woxingwosu0100/article/details/77840528
----------------------------------------------------------------------
5 版本集群管理工具redis-trib.rb已经被废弃,所以不用安装ruby环境,redis-trib.rb的功能,现在已经集成到了redis-cli中,并且可以在有认证的情况执行了,可以通过./redis-cli --cluster help查看使用方式。
----------------------------------------------------------------------
9.1安装工具依赖环境(前面安装过)
yum install -y gcc-c++ gcc* patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison sqlite-devel iconv-devel
9.2 安装rvm(ruby管理工具)
执行下面语句
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
或者
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
然后
执行 curl -L get.rvm.io | bash -s stable
#如果上面的连接失败,可以尝试:
curl -Lhttps://raw.githubusercontent.com/wayneeseguin/rvm/master/binscripts/rvm-installer| bash -s stable
执行 source /usr/local/rvm/scripts/rvm
rvm install 2.3.3
[root@server bin]# ruby --version
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]
最后执行 gem install redis 安装
10 创建集群
4版本命令
cd /opt/haizhi/redis/bin
./redis-trib.rb create --replicas 2 192.168.1.133:6379 192.168.1.133:6380 192.168.1.133:6381 192.168.1.134:6379 192.168.1.134:6380 192.168.1.134:6381 192.168.1.135:6379 192.168.1.135:6380 192.168.1.135:6381
[root@server bin]# ./redis-trib.rb create --replicas 2 192.168.1.133:6379 192.168.1.133:6380 192.168.1.133:6381 192.168.1.134:6379 192.168.1.134:6380 192.168.1.134:6381 192.168.1.135:6379 192.168.1.135:6380 192.168.1.135:6381 >>> Creating cluster >>> Performing hash slots allocation on 9 nodes... Using 3 masters: 192.168.1.133:6379 192.168.1.134:6379 192.168.1.135:6379 Adding replica 192.168.1.134:6380 to 192.168.1.133:6379 Adding replica 192.168.1.135:6380 to 192.168.1.133:6379 Adding replica 192.168.1.133:6380 to 192.168.1.134:6379 Adding replica 192.168.1.133:6381 to 192.168.1.134:6379 Adding replica 192.168.1.134:6381 to 192.168.1.135:6379 Adding replica 192.168.1.135:6381 to 192.168.1.135:6379 M: 19fd62cb41e794f6478eff3d209d7c9a8587f45e 192.168.1.133:6379slots:0-5460 (5461 slots) master S: b5a28ba32c3f96bfad569d1a12fdc84068882bed 192.168.1.133:6380replicates 4f0f85289ad961682e995b3f9e547b16e3251268 S: 8fef8364429c82e7f5ddf2c6888a98651495a66f 192.168.1.133:6381replicates 4f0f85289ad961682e995b3f9e547b16e3251268 M: 4f0f85289ad961682e995b3f9e547b16e3251268 192.168.1.134:6379slots:5461-10922 (5462 slots) master S: efc9d969a0c86ae8c30b1b1e555523234d9c4d61 192.168.1.134:6380replicates 19fd62cb41e794f6478eff3d209d7c9a8587f45e S: 6ad292b2129ed62ec0d49c079f38e4697161da14 192.168.1.134:6381replicates 8b3e3748a106b2bf0483dc5bfee5f378edc7f933 M: 8b3e3748a106b2bf0483dc5bfee5f378edc7f933 192.168.1.135:6379slots:10923-16383 (5461 slots) master S: 06e899228e65b2b6a16fb38968699d853b71c851 192.168.1.135:6380replicates 19fd62cb41e794f6478eff3d209d7c9a8587f45e S: 7bf167e33b2060506f0945d0945d4e029ad95606 192.168.1.135:6381replicates 8b3e3748a106b2bf0483dc5bfee5f378edc7f933 Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join.... >>> Performing Cluster Check (using node 192.168.1.133:6379) M: 19fd62cb41e794f6478eff3d209d7c9a8587f45e 192.168.1.133:6379slots:0-5460 (5461 slots) master2 additional replica(s) S: 6ad292b2129ed62ec0d49c079f38e4697161da14 192.168.1.134:6381slots: (0 slots) slavereplicates 8b3e3748a106b2bf0483dc5bfee5f378edc7f933 M: 8b3e3748a106b2bf0483dc5bfee5f378edc7f933 192.168.1.135:6379slots:10923-16383 (5461 slots) master2 additional replica(s) S: efc9d969a0c86ae8c30b1b1e555523234d9c4d61 192.168.1.134:6380slots: (0 slots) slavereplicates 19fd62cb41e794f6478eff3d209d7c9a8587f45e S: b5a28ba32c3f96bfad569d1a12fdc84068882bed 192.168.1.133:6380slots: (0 slots) slavereplicates 4f0f85289ad961682e995b3f9e547b16e3251268 S: 7bf167e33b2060506f0945d0945d4e029ad95606 192.168.1.135:6381slots: (0 slots) slavereplicates 8b3e3748a106b2bf0483dc5bfee5f378edc7f933 M: 4f0f85289ad961682e995b3f9e547b16e3251268 192.168.1.134:6379slots:5461-10922 (5462 slots) master2 additional replica(s) S: 06e899228e65b2b6a16fb38968699d853b71c851 192.168.1.135:6380slots: (0 slots) slavereplicates 19fd62cb41e794f6478eff3d209d7c9a8587f45e S: 8fef8364429c82e7f5ddf2c6888a98651495a66f 192.168.1.133:6381slots: (0 slots) slavereplicates 4f0f85289ad961682e995b3f9e547b16e3251268 [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered.
------------------------------------------------
5版本创建集群命令
./src/redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1
./src/redis-cli --cluster create --replicas 2 192.168.1.133:6379 192.168.1.133:6380 192.168.1.133:6381 192.168.1.134:6379 192.168.1.134:6380 192.168.1.134:6381 192.168.1.135:6379 192.168.1.135:6380 192.168.1.135:6381
[root@localhost redis-5.0.2]# ./src/redis-cli -c -p 6380 127.0.0.1:6380> CLUSTER nodes 2abb1028cd21a4f8534f939e7656a292d4304eb1 127.0.0.1:6381@16381 master - 0 1555319145000 2 connected 5461-10922 b4caf8de09a68f2ded00194fe1c6d526165d1b8f 127.0.0.1:6380@16380 myself,master - 0 1555319143000 1 connected 0-5460 e7aee0ee4cdcac44526bf4bd28096801e178f6dc 127.0.0.1:6384@16384 slave 2abb1028cd21a4f8534f939e7656a292d4304eb1 0 1555319145518 5 connected 192c60ed7b583696d1b99e6ead634b97f1abb56b 127.0.0.1:6385@16385 slave eead61f9b5e2188b28d8f6c4339be0c5357377be 0 1555319145821 6 connected 4518d97ad24ebd6e7127f6c89a58b9654202decf 127.0.0.1:6383@16383 slave b4caf8de09a68f2ded00194fe1c6d526165d1b8f 0 1555319146325 4 connected eead61f9b5e2188b28d8f6c4339be0c5357377be 127.0.0.1:6382@16382 master - 0 1555319145317 3 connected 10923-16383 127.0.0.1:6380> 127.0.0.1:6380> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:6 cluster_size:3 cluster_current_epoch:6 cluster_my_epoch:1 cluster_stats_messages_ping_sent:381 cluster_stats_messages_pong_sent:232 cluster_stats_messages_sent:613 cluster_stats_messages_ping_received:227 cluster_stats_messages_pong_received:381 cluster_stats_messages_meet_received:5 cluster_stats_messages_received:613 127.0.0.1:6380>
------------------------------------------------
查看集群
[root@localhost bin]# ./redis-cli -c -p 6379
127.0.0.1:6379> CLUSTER nodes 4f0f85289ad961682e995b3f9e547b16e3251268 192.168.1.134:6379@16379 myself,master - 0 1534227574000 4 connected 5461-10922 7bf167e33b2060506f0945d0945d4e029ad95606 192.168.1.135:6381@16381 slave 8b3e3748a106b2bf0483dc5bfee5f378edc7f933 0 1534227576097 9 connected efc9d969a0c86ae8c30b1b1e555523234d9c4d61 192.168.1.134:6380@16380 slave 19fd62cb41e794f6478eff3d209d7c9a8587f45e 0 1534227575595 5 connected 6ad292b2129ed62ec0d49c079f38e4697161da14 192.168.1.134:6381@16381 slave 8b3e3748a106b2bf0483dc5bfee5f378edc7f933 0 1534227575094 7 connected 06e899228e65b2b6a16fb38968699d853b71c851 192.168.1.135:6380@16380 slave 19fd62cb41e794f6478eff3d209d7c9a8587f45e 0 1534227575595 8 connected 8b3e3748a106b2bf0483dc5bfee5f378edc7f933 192.168.1.135:6379@16379 master - 0 1534227576000 7 connected 10923-16383 8fef8364429c82e7f5ddf2c6888a98651495a66f 192.168.1.133:6381@16381 slave 4f0f85289ad961682e995b3f9e547b16e3251268 0 1534227575000 4 connected 19fd62cb41e794f6478eff3d209d7c9a8587f45e 192.168.1.133:6379@16379 master - 0 1534227575000 1 connected 0-5460 b5a28ba32c3f96bfad569d1a12fdc84068882bed 192.168.1.133:6380@16380 slave 4f0f85289ad961682e995b3f9e547b16e3251268 0 1534227575595 4 connected 127.0.0.1:6379>
-------------------------------------------------------
5版本 集群节点的增加与删除
以单机器创建redis集群为例
./src/redis-cli --cluster create 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 --cluster-replicas 1
在本机器上新增节点
[root@localhost redis-5.0.2]# cd /usr/local/redis/redis-5.0.2 [root@localhost redis-5.0.2]# ll 总用量 252 -rw-rw-r-- 1 root root 85327 11月 22 18:26 00-RELEASENOTES drwxr-xr-x 2 root root 122 4月 15 17:03 6380 drwxr-xr-x 2 root root 122 4月 15 17:03 6381 drwxr-xr-x 2 root root 122 4月 15 17:03 6382 drwxr-xr-x 2 root root 122 4月 15 17:03 6383 drwxr-xr-x 2 root root 122 4月 15 17:03 6384 drwxr-xr-x 2 root root 122 4月 15 17:03 6385 -rw-r--r-- 1 root root 0 4月 15 16:14 appendonly.aof -rw-rw-r-- 1 root root 53 11月 22 18:26 BUGS -rw-rw-r-- 1 root root 1894 11月 22 18:26 CONTRIBUTING -rw-rw-r-- 1 root root 1487 11月 22 18:26 COPYING drwxrwxr-x 6 root root 4096 4月 15 15:18 deps -rw-r--r-- 1 root root 92 4月 15 16:14 dump.rdb -rw-rw-r-- 1 root root 11 11月 22 18:26 INSTALL -rw-rw-r-- 1 root root 151 11月 22 18:26 Makefile -rw-rw-r-- 1 root root 4223 11月 22 18:26 MANIFESTO -rw-rw-r-- 1 root root 20555 11月 22 18:26 README.md -rw-rw-r-- 1 root root 62143 4月 15 16:14 redis.conf -rwxrwxr-x 1 root root 275 11月 22 18:26 runtest -rwxrwxr-x 1 root root 280 11月 22 18:26 runtest-cluster -rwxrwxr-x 1 root root 281 11月 22 18:26 runtest-sentinel -rw-rw-r-- 1 root root 9710 11月 22 18:26 sentinel.conf drwxrwxr-x 3 root root 8192 4月 15 15:22 src drwxrwxr-x 10 root root 4096 11月 22 18:26 tests drwxrwxr-x 8 root root 4096 11月 22 18:26 utils [root@localhost redis-5.0.2]#
cd /usr/local/redis/redis-5.0.2
mkdir 6386 6387 创建目录并调整配置
cp 6380/redis-6380.conf 6386/
cp 6380/redis-6380.conf 6387/
mv 6386/redis-6380.conf 6386/redis-6386.conf
mv 6387/redis-6380.conf 6387/redis-6387.conf
sed -i 's/6380/6386/g' 6386/redis-6386.conf
sed -i 's/6380/6387/g' 6387/redis-6387.conf
启动服务
./src/redis-server 6386/redis-6386.conf
./src/redis-server 6387/redis-6387.conf
[root@localhost redis-5.0.2]# ps -ef |grep redis root 11154 1 0 16:47 ? 00:00:07 ./src/redis-server 0.0.0.0:6380 [cluster] root 11156 1 0 16:47 ? 00:00:05 ./src/redis-server 0.0.0.0:6381 [cluster] root 11161 1 0 16:47 ? 00:00:05 ./src/redis-server 0.0.0.0:6382 [cluster] root 11169 1 0 16:47 ? 00:00:05 ./src/redis-server 0.0.0.0:6383 [cluster] root 11174 1 0 16:47 ? 00:00:05 ./src/redis-server 0.0.0.0:6384 [cluster] root 11179 1 0 16:47 ? 00:00:06 ./src/redis-server 0.0.0.0:6385 [cluster] root 12569 1 0 17:31 ? 00:00:00 ./src/redis-server 0.0.0.0:6386 [cluster] root 12579 1 1 17:31 ? 00:00:00 ./src/redis-server 0.0.0.0:6387 [cluster] root 12588 2865 0 17:31 pts/0 00:00:00 grep --color=auto redis
添加节点到集群 6386为主 6387为从
先添加主节点6386到集群中
./src/redis-cli --cluster add-node 127.0.0.1:6386 127.0.0.1:6381
##redis-cli --cluster add-node {新节点IP}:{新节点端口} {任意集群节点IP}:{对应端口} #如果添加集群中的主节点,则新添加的就是主节点,如果是从节点则是从节点
[root@localhost redis-5.0.2]# ./src/redis-cli --cluster add-node 127.0.0.1:6386 127.0.0.1:6381 >>> Adding node 127.0.0.1:6386 to cluster 127.0.0.1:6381 >>> Performing Cluster Check (using node 127.0.0.1:6381) M: 2abb1028cd21a4f8534f939e7656a292d4304eb1 127.0.0.1:6381slots:[5461-10922] (5462 slots) master1 additional replica(s) S: e7aee0ee4cdcac44526bf4bd28096801e178f6dc 127.0.0.1:6384slots: (0 slots) slavereplicates 2abb1028cd21a4f8534f939e7656a292d4304eb1 S: 192c60ed7b583696d1b99e6ead634b97f1abb56b 127.0.0.1:6385slots: (0 slots) slavereplicates eead61f9b5e2188b28d8f6c4339be0c5357377be M: eead61f9b5e2188b28d8f6c4339be0c5357377be 127.0.0.1:6382slots:[10923-16383] (5461 slots) master1 additional replica(s) S: 4518d97ad24ebd6e7127f6c89a58b9654202decf 127.0.0.1:6383slots: (0 slots) slavereplicates b4caf8de09a68f2ded00194fe1c6d526165d1b8f M: b4caf8de09a68f2ded00194fe1c6d526165d1b8f 127.0.0.1:6380slots:[0-5460] (5461 slots) master1 additional replica(s) [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. >>> Send CLUSTER MEET to node 127.0.0.1:6386 to make it join the cluster. [OK] New node added correctly.
然后我们为新节点手工分配hash槽
使用redis-cli命令为6386分配hash槽,找到集群中的任意一个主节点(6381),对其进行重新分片工作。
[root@localhost redis-5.0.2]# /usr/local/redis/redis-5.0.2/src/redis-cli --cluster reshard 127.0.0.1:6381
>>> Performing Cluster Check (using node 127.0.0.1:6381)
M: 2abb1028cd21a4f8534f939e7656a292d4304eb1 127.0.0.1:6381
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: e7aee0ee4cdcac44526bf4bd28096801e178f6dc 127.0.0.1:6384
slots: (0 slots) slave
replicates 2abb1028cd21a4f8534f939e7656a292d4304eb1
S: 192c60ed7b583696d1b99e6ead634b97f1abb56b 127.0.0.1:6385
slots: (0 slots) slave
replicates eead61f9b5e2188b28d8f6c4339be0c5357377be
M: eead61f9b5e2188b28d8f6c4339be0c5357377be 127.0.0.1:6382
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
M: 564673ea144dadd7b964395c74284f057e4ea6d7 127.0.0.1:6386
slots: (0 slots) master
S: 4518d97ad24ebd6e7127f6c89a58b9654202decf 127.0.0.1:6383
slots: (0 slots) slave
replicates b4caf8de09a68f2ded00194fe1c6d526165d1b8f
M: b4caf8de09a68f2ded00194fe1c6d526165d1b8f 127.0.0.1:6380
slots:[0-5460] (5461 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 3000
##分配3000个slots给下面的ID
What is the receiving node ID? 564673ea144dadd7b964395c74284f057e4ea6d7
##红色的集群ID号就是6386的ID号
然后有两种方式,一种是all,以将所有节点用作散列槽的源节点,一种是done,这种是你自己选择从哪个节点上拿出来节点分给8007
Please enter all the source node IDs.Type 'all' to use all the nodes as source nodes for the hash slots.Type 'done' once you entered all the source nodes IDs.Source node #1:
all是随机的,比如说我们要分出1000个,则3个主节点分别拿出333个,333个,334个节点分给6386,这里我们选择all,从6380 6381 6382总共拿出3000个slots给6386
How many slots do you want to move (from 1 to 16384)? 3000
What is the receiving node ID? 564673ea144dadd7b964395c74284f057e4ea6d7
Please enter all the source node IDs.Type 'all' to use all the nodes as source nodes for the hash slots.Type 'done' once you entered all the source nodes IDs.
Source node #1: all 选择所有的主机器
完成后再查看节点 发现已经分配了slot
[root@localhost redis-5.0.2]# ./src/redis-cli -c -p 6380 127.0.0.1:6380> CLUSTER nodes 2abb1028cd21a4f8534f939e7656a292d4304eb1 127.0.0.1:6381@16381 master - 0 1555322875361 2 connected 6462-10922 b4caf8de09a68f2ded00194fe1c6d526165d1b8f 127.0.0.1:6380@16380 myself,master - 0 1555322872000 1 connected 999-5460 564673ea144dadd7b964395c74284f057e4ea6d7 127.0.0.1:6386@16386 master - 0 1555322875000 7 connected 0-998 5461-6461 10923-11921 e7aee0ee4cdcac44526bf4bd28096801e178f6dc 127.0.0.1:6384@16384 slave 2abb1028cd21a4f8534f939e7656a292d4304eb1 0 1555322874000 5 connected 192c60ed7b583696d1b99e6ead634b97f1abb56b 127.0.0.1:6385@16385 slave eead61f9b5e2188b28d8f6c4339be0c5357377be 0 1555322874554 6 connected 4518d97ad24ebd6e7127f6c89a58b9654202decf 127.0.0.1:6383@16383 slave b4caf8de09a68f2ded00194fe1c6d526165d1b8f 0 1555322873341 4 connected eead61f9b5e2188b28d8f6c4339be0c5357377be 127.0.0.1:6382@16382 master - 0 1555322874351 3 connected 11922-16383 127.0.0.1:6380>
添加从节点6387到集群中去并查看集群状态
/usr/local/redis/redis-5.0.2/src/redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6386
[root@localhost redis-5.0.2]# /usr/local/redis/redis-5.0.2/src/redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6386 >>> Adding node 127.0.0.1:6387 to cluster 127.0.0.1:6386 >>> Performing Cluster Check (using node 127.0.0.1:6386) M: 564673ea144dadd7b964395c74284f057e4ea6d7 127.0.0.1:6386slots:[0-998],[5461-6461],[10923-11921] (2999 slots) master M: eead61f9b5e2188b28d8f6c4339be0c5357377be 127.0.0.1:6382slots:[11922-16383] (4462 slots) master1 additional replica(s) M: 2abb1028cd21a4f8534f939e7656a292d4304eb1 127.0.0.1:6381slots:[6462-10922] (4461 slots) master1 additional replica(s) S: e7aee0ee4cdcac44526bf4bd28096801e178f6dc 127.0.0.1:6384slots: (0 slots) slavereplicates 2abb1028cd21a4f8534f939e7656a292d4304eb1 S: 4518d97ad24ebd6e7127f6c89a58b9654202decf 127.0.0.1:6383slots: (0 slots) slavereplicates b4caf8de09a68f2ded00194fe1c6d526165d1b8f M: b4caf8de09a68f2ded00194fe1c6d526165d1b8f 127.0.0.1:6380slots:[999-5460] (4462 slots) master1 additional replica(s) S: 192c60ed7b583696d1b99e6ead634b97f1abb56b 127.0.0.1:6385slots: (0 slots) slavereplicates eead61f9b5e2188b28d8f6c4339be0c5357377be [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. >>> Send CLUSTER MEET to node 127.0.0.1:6387 to make it join the cluster. [OK] New node added correctly. [root@localhost redis-5.0.2]# ./src/redis-cli -c -p 6380 127.0.0.1:6380> CLUSTER nodes 2abb1028cd21a4f8534f939e7656a292d4304eb1 127.0.0.1:6381@16381 master - 0 1555323610107 2 connected 6462-10922 b4caf8de09a68f2ded00194fe1c6d526165d1b8f 127.0.0.1:6380@16380 myself,master - 0 1555323608000 1 connected 999-5460 564673ea144dadd7b964395c74284f057e4ea6d7 127.0.0.1:6386@16386 master - 0 1555323609501 7 connected 0-998 5461-6461 10923-11921 e7aee0ee4cdcac44526bf4bd28096801e178f6dc 127.0.0.1:6384@16384 slave 2abb1028cd21a4f8534f939e7656a292d4304eb1 0 1555323609000 5 connected 192c60ed7b583696d1b99e6ead634b97f1abb56b 127.0.0.1:6385@16385 slave eead61f9b5e2188b28d8f6c4339be0c5357377be 0 1555323609000 6 connected 2998c800138fa6bc0611c75b19f60aafad025724 127.0.0.1:6387@16387 master - 0 1555323610208 0 connected 4518d97ad24ebd6e7127f6c89a58b9654202decf 127.0.0.1:6383@16383 slave b4caf8de09a68f2ded00194fe1c6d526165d1b8f 0 1555323609000 4 connected eead61f9b5e2188b28d8f6c4339be0c5357377be 127.0.0.1:6382@16382 master - 0 1555323609400 3 connected 11922-16383 127.0.0.1:6380>
此时6387是一个master节点,没有被分配任何的hash槽。
我们需要执行replicate命令来指定当前节点(从节点)的主节点id为哪个,首先需要连接新加的6387节点的客户端,
然后使用集群命令进行操作,把当前的6387(slave)节点指定到一个主节点下
命令示例 CLUSTER REPLICATE 564673ea144dadd7b964395c74284f057e4ea6d7 ##指向到master节点6386的ID
[root@localhost redis-5.0.2]# ./src/redis-cli -c -p 6387 127.0.0.1:6387> CLUSTER nodes 192c60ed7b583696d1b99e6ead634b97f1abb56b 127.0.0.1:6385@16385 slave eead61f9b5e2188b28d8f6c4339be0c5357377be 0 1555323889761 3 connected 4518d97ad24ebd6e7127f6c89a58b9654202decf 127.0.0.1:6383@16383 slave b4caf8de09a68f2ded00194fe1c6d526165d1b8f 0 1555323889561 1 connected b4caf8de09a68f2ded00194fe1c6d526165d1b8f 127.0.0.1:6380@16380 master - 0 1555323890773 1 connected 999-5460 2abb1028cd21a4f8534f939e7656a292d4304eb1 127.0.0.1:6381@16381 master - 0 1555323890571 2 connected 6462-10922 eead61f9b5e2188b28d8f6c4339be0c5357377be 127.0.0.1:6382@16382 master - 0 1555323890000 3 connected 11922-16383 2998c800138fa6bc0611c75b19f60aafad025724 127.0.0.1:6387@16387 myself,master - 0 1555323888000 0 connected 564673ea144dadd7b964395c74284f057e4ea6d7 127.0.0.1:6386@16386 master - 0 1555323889257 7 connected 0-998 5461-6461 10923-11921 e7aee0ee4cdcac44526bf4bd28096801e178f6dc 127.0.0.1:6384@16384 slave 2abb1028cd21a4f8534f939e7656a292d4304eb1 0 1555323889000 2 connected 127.0.0.1:6387> CLUSTER REPLICATE 564673ea144dadd7b964395c74284f057e4ea6d7 ##指向到master节点ID OK 127.0.0.1:6387> CLUSTER nodes 192c60ed7b583696d1b99e6ead634b97f1abb56b 127.0.0.1:6385@16385 slave eead61f9b5e2188b28d8f6c4339be0c5357377be 0 1555323925000 3 connected 4518d97ad24ebd6e7127f6c89a58b9654202decf 127.0.0.1:6383@16383 slave b4caf8de09a68f2ded00194fe1c6d526165d1b8f 0 1555323926102 1 connected b4caf8de09a68f2ded00194fe1c6d526165d1b8f 127.0.0.1:6380@16380 master - 0 1555323926102 1 connected 999-5460 2abb1028cd21a4f8534f939e7656a292d4304eb1 127.0.0.1:6381@16381 master - 0 1555323926103 2 connected 6462-10922 eead61f9b5e2188b28d8f6c4339be0c5357377be 127.0.0.1:6382@16382 master - 0 1555323926000 3 connected 11922-16383 2998c800138fa6bc0611c75b19f60aafad025724 127.0.0.1:6387@16387 myself,slave 564673ea144dadd7b964395c74284f057e4ea6d7 0 1555323924000 0 connected 564673ea144dadd7b964395c74284f057e4ea6d7 127.0.0.1:6386@16386 master - 0 1555323926506 7 connected 0-998 5461-6461 10923-11921 e7aee0ee4cdcac44526bf4bd28096801e178f6dc 127.0.0.1:6384@16384 slave 2abb1028cd21a4f8534f939e7656a292d4304eb1 0 1555323926102 2 connected 127.0.0.1:6387>
删除从节点
[root@localhost redis-5.0.2]# /usr/local/redis/redis-5.0.2/src/redis-cli --cluster del-node 127.0.0.1:6387 2998c800138fa6bc0611c75b19f60aafad025724
>>> Removing node 2998c800138fa6bc0611c75b19f60aafad025724 from cluster 127.0.0.1:6387
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
[root@localhost redis-5.0.2]# ./src/redis-cli -c -p 6387
Could not connect to Redis at 127.0.0.1:6387: Connection refused
not connected>
删除主节点 3686(因为刚才删除的从节点就是6386的从节点)
1)如果主节点有从节点,将从节点转移到其他主节点
2)如果主节点有slot,去掉分配的slot,然后在删除主节点
#./redis-cli --cluster reshard 127.0.0.1:6386 //取消分配的slot
How many slots do you want to move (from 1 to 16384)? 3000//被删除master的所有slot数量
What is the receiving node ID? 2abb1028cd21a4f8534f939e7656a292d4304eb1 //接收slot的master节点6381
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:564673ea144dadd7b964395c74284f057e4ea6d7 //被删除master的node-id
Source node #2:done
Do you want to proceed with the proposed reshard plan (yes/no)? yes //取消slot
[root@localhost redis-5.0.2]# ./src/redis-cli -c -p 6381
127.0.0.1:6381> CLUSTER nodes 2abb1028cd21a4f8534f939e7656a292d4304eb1 127.0.0.1:6381@16381 myself,master - 0 1555325338000 8 connected 0-998 5461-11921 e7aee0ee4cdcac44526bf4bd28096801e178f6dc 127.0.0.1:6384@16384 slave 2abb1028cd21a4f8534f939e7656a292d4304eb1 0 1555325342000 8 connected 192c60ed7b583696d1b99e6ead634b97f1abb56b 127.0.0.1:6385@16385 slave eead61f9b5e2188b28d8f6c4339be0c5357377be 0 1555325344348 6 connected eead61f9b5e2188b28d8f6c4339be0c5357377be 127.0.0.1:6382@16382 master - 0 1555325343341 3 connected 11922-16383 564673ea144dadd7b964395c74284f057e4ea6d7 127.0.0.1:6386@16386 master - 0 1555325342000 7 connected 4518d97ad24ebd6e7127f6c89a58b9654202decf 127.0.0.1:6383@16383 slave b4caf8de09a68f2ded00194fe1c6d526165d1b8f 0 1555325342000 4 connected b4caf8de09a68f2ded00194fe1c6d526165d1b8f 127.0.0.1:6380@16380 master - 0 1555325342333 1 connected 999-5460 127.0.0.1:6381> cluster info
[root@localhost redis-5.0.2]# /usr/local/redis/redis-5.0.2/src/redis-cli --cluster del-node 127.0.0.1:6386 564673ea144dadd7b964395c74284f057e4ea6d7
>>> Removing node 564673ea144dadd7b964395c74284f057e4ea6d7 from cluster 127.0.0.1:6386 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node.
[root@localhost redis-5.0.2]# ./src/redis-cli -c -p 6381 127.0.0.1:6381> CLUSTER nodes 2abb1028cd21a4f8534f939e7656a292d4304eb1 127.0.0.1:6381@16381 myself,master - 0 1555325387000 8 connected 0-998 5461-11921 e7aee0ee4cdcac44526bf4bd28096801e178f6dc 127.0.0.1:6384@16384 slave 2abb1028cd21a4f8534f939e7656a292d4304eb1 0 1555325387768 8 connected 192c60ed7b583696d1b99e6ead634b97f1abb56b 127.0.0.1:6385@16385 slave eead61f9b5e2188b28d8f6c4339be0c5357377be 0 1555325385000 6 connected eead61f9b5e2188b28d8f6c4339be0c5357377be 127.0.0.1:6382@16382 master - 0 1555325387000 3 connected 11922-16383 4518d97ad24ebd6e7127f6c89a58b9654202decf 127.0.0.1:6383@16383 slave b4caf8de09a68f2ded00194fe1c6d526165d1b8f 0 1555325388776 4 connected b4caf8de09a68f2ded00194fe1c6d526165d1b8f 127.0.0.1:6380@16380 master - 0 1555325386758 1 connected 999-5460 127.0.0.1:6381>
增加删除节点可以参考下面文章
https://www.jianshu.com/p/6355d0827aea
https://cloud.tencent.com/developer/article/1412672
https://www.cnblogs.com/zy-303/p/10273167.html
集群原理
https://www.cnblogs.com/huangjuncong/p/8494295.html
转载于:https://blog.51cto.com/superleedo/2311126
相关文章:

PHP多图片上传 并检查 加水印 源码
参数说明:$max_file_size : 上传文件大小限制, 单位BYTE$destination_folder : 上传文件路径$watermark : 是否附加水印(1为加水印,其他为不加水印);使用说明:1. 将PHP.INI文件里面的"extensionphp_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;2. 将extension_dir…

C#中的委托和事件 (4)---事件和委托的编译代码
事件和委托的编译代码 这时候,我们不得不注释掉编译错误的行,然后重新进行编译,再借助Reflactor来对 event的声明语句做一探究,看看为什么会发生这样的错误: public event GreetingDelegate MakeGreet; 可以看到&#…

1066 Root of AVL Tree 需再做
1. 这题如果不知道平衡二叉树怎么平衡的(左旋右旋那一套)应该不可能做出吧,那就输出中位数回点血了。 2. 需要具备的基础知识:怎么将结点插入平衡二叉树。 3. 我犯的一个错误:把更新高度的函数直接返回了高度,而不没有修改高度。…

easyui-menu 解决disableItem不能禁用绑定事件的方法
版本:1.4. menu的disableItem方法不能禁用使用onClick方式绑定的事件。 解决思路如下: 重写disableItem方法和enableItem方法。 /*** menu方法扩展* param {Object} jq* param {Object} itemEl*/ $.extend($.fn.menu.methods, {/*** 激活选项࿰…

hadoop无法访问50070端口怎么办?
转载请注明出处:www.oldboyedu.com Hadoop 50070是hdfs的web管理页面,在搭建Hadoop集群环境时,有些大数据开发技术人员会遇到Hadoop 50070端口打不开的情况,引起该问题的原因很多,想要解决这个问题需要从以下方面进行排…

表情的机器自动识别(有图有真相)
这幅图片是我自己用C#编写的表情的机器自动识别。主要是AdaBoost的实现,训练做了几个不同版本:线性、并行和分布式,训练数据集采用的JAFFE。 有朋友问这东西有什么用处,其实主要是为了玩而已了。这是基于Paul Ekman那本著名的《情…

并查集专题练习:好朋友(未完待续)
有空再把题目补上 输入样例1 4 2 1 4 2 3 样例输出1 2 输入样例2 7 5 1 2 2 3 3 1 1 4 5 6 输出样例2 3 解题思路: 1. 这题放在并查集的专题后面,有查找也有合并,需要具备的基础只是是合并和查找的函数要会写(都很简单)。但是读到每…

android Viewpager取消预加载及Fragment方法的学习
1.在使用ViewPager嵌套Fragment的时候,由于VIewPager的几个Adapter的设置来说,都会有一定的预加载。通过设置setOffscreenPageLimit(int number) 来设置预加载的熟练,在V4包中,默认的预加载是1,即使你设置为…

前端Js框架 UI框架汇总 特性 适用范围 选择
身为一个资深后端工程师,面对层出不穷的前端框架,总让人眼花缭乱,做一个综合解析贴,从全局着眼,让我们明白各种前端框架的应用范围,为如何选择前端框架,从不同的维度提供一些线索,做…

Emptyproject分析
Emptyproject分析(SimpleSample)1,InitApp()WinMain中有一个InitApp(),在sample中存在,但是在emptyproject中没有,该函数是用于设定已经声明的一些一般变量的初始值的。比如某些按钮。2,IsDeviceAcceptable()被WinMain…

1107 Social Clusters
这道题目给出的示例如上图所示,一共有1-8这8个人(圆形),他们拥有1-10这10个兴趣爱好(方形),一人可以有多个爱好,拥有共同爱好的人被视为一个社区的。现在给出每个人的爱好情况,求出社区的个数,并按照从大到…

c#直接调用ssis包实现Sql Server的数据导入功能
调用ssis包实现Sql Server的数据导入功能网上已经有很多人讨论过,自己参考后也动手实现了一下,上一次笔者的项目中还用了一下这个功能。思前想后,决定还是贴一下增强记忆,高手请54.1、直接调用ssis包,需要引用Microsof…

从入门到放弃的javaScrip——队列
队列数据结构 队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。 现实中,很常见的例子就是…

css控制不换行
white-space:nowrap; 转载于:https://www.cnblogs.com/w8104254/p/4178198.html

(C++)堆排序的3个关键函数
堆排序:指使用堆结构对一个序列进行排序。所以,首先要有一个堆结构。 此处讨论递增排序。以及用最大堆。 注意:让存放堆的数组作为全局变量,n为元素个数,数组存放元素从下标1开始,n结束。 int heap[11] …

android 横竖屏限制如何配置
在开发android的应用中,有时候需要限制横竖屏切换。只需要在AndroidManifest.xml文件中加入android:screenOrientation属性限制。 ndroid:screenOrientation"landscape"是限制此页面横屏显示, ndroid:screenOrientation"portrait"是…

Java面试题总结-Day4
<?xml version"1.0" encoding"utf-8"?> Java面试题总结-Day4Java面试题总结-Day4 Table of Contents 1. ArrayList和LinkedList区别 1.1. 是否线程安全1.2. 底层数据结构1.3. 插入和删除是否受元素位置的影响1.4. 是否支持快速随机访问1.5. 内存空…

Linux 使用者身份與群組記錄的檔案
在我們Linux系統當中,預設的情況下,所有的系統上的帳號與一般身份使用者,還有那個root的相關資訊, 都是記錄在/etc/passwd這個檔案內的。至於個人的密碼則是記錄在/etc/shadow這個檔案下。 此外,Linux所有的群組名稱都…

1098 Insertion or Heap Sort 需再做
1. 应该还做过一道类似的题目,也是要求判断属于哪种排序的中间过程,并要求写出下一轮排序结果,这次的进步是上来就知道用向量存数据,这样方便直接比较,而且下标0不能存元素,因为堆排序的堆是一个完全二叉树…

基于node.js的压缩合并安装
1.构建工具(grunt,gulp) 下载地址:http://gruntjs.cn/http://gruntjs.com/(1)安装nodejs(http://www.nodejs.org/) 验证是否安装成功,命令行输入 node -v (2)grunt 的安装 安装全局…

jenkins 修改工作目录
修改Jenkins路径 Jenkins的默认安装路径是/var/lib/jenkins 现在由于这个根目录的磁盘太小,所以切换到/data 目录下。 Jenkins目录、端口、工作目录等信息在/etc/sysconfig/jenkins 下,所以需要修改这个文件。 将JENKINS_HOME"/var/lib/jenkins&quo…

破一个行业ERP的感想
今天闲来无事,找来破一破。 这个是一个行业性质的ERP软件,有授权码验证,客户机数量限定,以及使用时间限定,被一一破解。 授权码存在明显的绕过bug.客户机数量同样被明文标注在文件中。使用时间也是标注在文件中&#x…

1034 Head of a Gang(图的DFS解法) 擦边大法好
1.题目的大意是给出很多人(结点)之间的通话记录,每两人之间的权重取决于他俩通话权重的总时长,如果一个社区的人数超过2且社区内发生的通话总时长超过给定阈值,那么这属于一个社区。最后要求输出社区的总数,再按照社区头目的姓名字…

Android定位方式和测试方法
Android常用的三种定位方式有:基于GPS定位、基于基站地位、基于wifi定位。 1、基于GPS定位: GPS定位需要GPS模块(硬件)的支持,没有GPS模块是无法进行GPS定位的。 GPS定位最大的优点就是其定位精确度高(一般误差在10m内),无网络也能用;缺点就是耗电高、定…

vue el-form鼠标事件导致页面刷新解决方案;vue 阻止多次点击提交数据通用方法...
一.阻止表单自动提交刷新页面:<el-form><el-form-item :inline"true" submit.native.prevent><el-input keyup.enter.nativesubmit></el-input></el-form-item> </el-form>注意: 鼠标事件导致页面刷新问…

[转]wxODBC(wxWidgets)中使用驱动程序方式打开数据库
wxODBC(wxWidgets)中使用驱动程序方式打开数据库 wxWidgets的文档中都是使用在控制面板/数据源中设定DSN来创建ODBC连接。但是实际上很多小型的应用,只是使用本机的一个Access数据库。而要求使用者学习ODBC的DSN配置明显的增加了软件的使用难度。因此,研…

1076 Forwards on Weibo
1. 这题说的是,微博上人们之间有关注和被关注的关系,如果一个人发博,他的追随者就可能转发,追随者的追随者又可能转发,以此类推。现在给定一个人,求其微博可能被转发的人数,但是注意有一个关注链…

2014年个人工作总结
2014年的日常工作,从技术支持岗位调到市场.社区岗位上:日常技术处理工作变为博客、微信、微博、市场活动策划、发送奖品等。如果以此为界:即毕业10年内的主要是软件研发、团队管理、项目管理;第二个十年开始,有幸从事市…

DAL(数据库访问层)
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;using System.Data.SqlClient;using System.Configuration; /// <summary>///DBHelper 的摘要说明/// </summary>public static class DBHelper{ public …

Navicat for Oracle
1、先解压Navicat for Oracle到任意目录 2、将instantclient-basic-nt-12.1.0.2.0解压到1中目录的instantclient_10_2文件夹下(推荐,可随意) 3、将instantclient-sqlplus-nt-12.1.0.2.0解压到instantclient_10_2文件夹中的 instantclient_12_…