主要任务:
1、向集群中添加master,为master添加slave
2、移除集群中某台master的slave,移除没有slave的master
3、把移除的主机再次添加到集群当中
4、集群故障
一、向集群中添加主机:
添加master:(master的ip 192.168.4.57)
1、为主机192.168.4.57的redis修改ip地址,修改端口6357,开启集群功能
vim /etc/redis/6379.conf
bind 192.168.4.57
port 6357
cluster-enabled yes #启用集群
cluster-config-file nodes-6379.conf #存储集群信息文件
cluster-node-timeout 5000
/etc/init.d/redis_6379 start #开启服务
2、将主机添加到集群当中作为master:(在MGM上进行操作)
# redis-trib.rb add-node 新添加的主机ip:端口 集群中任意主机ip:端口
redis-trib.rb add-node 192.168.4.57:6357 192.168.4.51:6351
3、为新添加的master主机分配hash槽:(在MGM上进行操作)
redis-trib.rb reshard 192.168.4.51:6351 #重新分配hash槽,ip为集群中任意主机ip
# 以下为填写的信息,槽总共16384个,4个master每个4096
How many slots do you want to move (from 1 to 16384)?4096 #拿出4096个hash 槽给主机192.168.4.57
What is the receiving node ID? c5e0da48f335c46a2ec199faa99b830f537dd8a0 #主机192.168.4.57的id值
Source node #1:all #从当前所有master服务器获取hash槽
Do you want to proceed with the proposed reshard plan (yes/no)?yes #同意以上配置
# 当把槽分给4.57主机之后,数据也会分配给4.57主机
为master(4.57)主机添加slave(4.58):
1、为主机192.168.4.58的redis修改ip地址,修改端口6358,开启集群功能
vim /etc/redis/6379.conf
bind 192.168.4.58
port 6358
cluster-enabled yes #启用集群
cluster-config-file nodes-6379.conf #存储集群信息文件
cluster-node-timeout 5000
/etc/init.d/redis_6379 start #开启服务
2、添加slave:(MGM上执行)
redis-trib.rb add-node --slave \ #做slave
[--master-id=c5e0da48f335c46a2ec199faa99b830f537dd8a0] \ #指定master4.57的id
192.168.4.58:6358 192.168.4.51:6351 #slave的ip,集群中任意主机的ip
# 如果不指定master的id,则默认分配给slave数量最少的master
# slave不需要分配槽
redis-trib.rb info192.168.4.51:6351 #查看集群信息
redis-trib.rb check 192.168.4.51:6351 #查看集群详细信息
二、从集群中移除主机:
移除master(4.57)的slave(4.58):
# redis-trib.rb del-node 集群中任意主机的ip:端口 移除主机的id
redis-trib.rb del-node 192.168.4.51:6351 f6649ea99b2f01faca26217691222c17a3854381
# 移除集群后,当前主机的redis服务会自动停止
# 集群配置文件nodes-6379.conf还存在
# 主机启动redis服务,主机4.58会认为自己还在集群中,但是集群已经没有了4.58的信息了
移除master(4.57):
1、回收master的hash槽:(MGM上执行)
redis-trib.rb reshard 192.168.4.51:6351 #集群中任意主机的ip
How many slots do you want to move (from 1 to 16384)?4096 #移除4096个数槽
What is the receiving node ID? bc5c4e082a5a3391b634cf433a6486c867cfc44b # 要移动给谁的id即目标主机(这里可以随机写一个master的id)
Source node #1: c5e0da48f335c46a2ec199faa99b830f537dd8a0 #从谁那移动即源主机(这里写4.57的id)
Source node #2:done #设置完毕
# 把4.57的hash槽全部分配给了另外一个主机,相当于回收了4.57的hash槽
2、移除master:
# redis-trib.rb del-node 集群中任意主机的ip:端口 移除主机的id
redis-trib.rb del-node 192.168.4.51:6351 c5e0da48f335c46a2ec199faa99b830f537dd8a0
# 移除集群后,当前主机的redis服务会自动停止
# 集群配置文件nodes-6379.conf还存在
# 主机启动redis服务,主机4.57会认为自己还在集群中,但是集群已经没有了4.57的信息了
三、把移除的主机再次添加到集群当中:
# 集群配置文件nodes-6379.conf还存在
# 主机启动redis服务,主机会认为自己还在集群中,但是集群已经没有主机的信息了
# 此时使用redis-trib.rb add-node添加主机会报错
# 因此需要重置redis服务器的集群设置
redis-cli -h 192.168.4.57 -p 6357 #连接redis
xxxx> CLUSTER RESET #重置redis设置
redis-trib.rb add-node 192.168.4.57:6357 192.168.4.51:6351 #作为master添加到集群,不会报错
redis-trib.rb add-node --slave 192.168.4.57:6357 192.168.4.51:6351 #作为slave添加到集群
四、集群故障:
对于一台master来说,有两个slave,结构如下:
slave1 --> master <-- slave2
当master发生故障的时候,会从两台slave中选取一台作为新的master
另外一台slave会成为当前master的slave
当发生故障的机器修好之后,会作为当前master的slave,并且自动同步数据
当一组主从的master和slave都坏掉之后,由于hash槽没有回收,因此整个集群就会崩溃
xxx> info replication #查看当前主机的复制信息
redis-trib.rb info192.168.4.51:6351 #查看集群信息
redis-trib.rb check 192.168.4.51:6351 #查看集群详细信息
写总结的第四十九天!!!