欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

13.Redis集群做水平扩展

程序员文章站 2022-03-21 16:29:12
...

概述

现在的集群架构是三主三从
13.Redis集群做水平扩展
我们在原始集群基础上再增加一主(8007)一从(8008),增加节点后的集群参见下图,
13.Redis集群做水平扩展

增加redis实例

#在/usr/local/redis-5.0.2/redis-cluster下创建8007和8008文件夹,并拷贝8001文件夹下的redis.conf文件到8007和8008这两个文件夹下

# cd /usr/local/redis-5.0.2/redis-cluster/
mkdir 8007 8008
cp 8001/redis.conf 8007/
cp 8001/redis.conf 8008/
 # 修改8007文件夹下的redis.conf配置文件
 vim 8007/redis.conf 
 # 修改如下内容:
 port:8007
 dir   /usr/local/redis-5.0.2/redis-cluster/8007/
 cluster‐config‐file nodes‐8007.conf
 # 修改8008文件夹下的redis.conf配置文件
 vim 8008/redis.conf 
#修改内容如下:
 port:8008
 dir   /usr/local/redis-5.0.2/redis-cluster/8008/
 cluster‐config‐file nodes‐8008.conf
 # 启动8007和8008俩个服务并查看服务状态
 /usr/local/redis-5.0.2/src/redis-server /usr/local/redis-5.0.2/redis-cluster/8007/redis.conf &
 /usr/local/redis-5.0.2/src/redis-server /usr/local/redis-5.0.2/redis-cluster/8008/redis.conf &
 

查看redis信息,ps -ef | grep redis
13.Redis集群做水平扩展

将节点添加进集群

redis‐cli ‐‐cluster add-node 将一个节点添加到集群里,第一个参数为新节点的ip:port,第二个参数为集群中任意一个已经存在的节点的ip:port
/usr/local/redis-5.0.2/src/redis-cli -a lglg --cluster add-node 192.168.20.135:8007 192.168.20.135:8001
/usr/local/redis-5.0.2/src/redis-cli -a lglg --cluster add-node 192.168.20.135:8008 192.168.20.135:8001
13.Redis集群做水平扩展
13.Redis集群做水平扩展

配置8007为集群主节点

此时8007和8008节点都添加进入了集群,都是master节点
13.Redis集群做水平扩展
配置8008为8007的从节点

# 进入8008端口的客户端
./redis-cli -a lglg -c -h 192.168.20.135 -p 8008
#  执行replicate命令来指定当前节点(从节点)的主节点id为哪个
# 8007节点的id从上图可以看出为f179fa4384a39f304b553b63a0c2f6e27446021b 
cluster replicate f179fa4384a39f304b553b63a0c2f6e27446021b

查看集群节点信息可以看出,8008节点已经是8007的从节点
13.Redis集群做水平扩展
但此时8007没有分配槽,需要手动为8007节点分配slot(槽)

为8007分配hash槽

#使用redis-cli命令为8007分配hash槽,找到集群中的任意一个主节点,对其进行重新分片工作。

/usr/local/redis-5.0.2/src/redis--cli -a lglg --cluster reshard 192.168.20.135:8001

输出如下:
… …
How many slots do you want to move (from 1 to 16384)? 1000 (ps:需要多少个槽移动到新的节点上,自己设置,比如1000个hash槽)
What is the receiving node ID? f179fa4384a39f304b553b63a0c2f6e27446021b (ps把这1000个hash槽移动到哪个节点上去,需要指定节点id)
Source node 1:all(ps:输入all为从所有主节点(8001,8002,8003)中分别抽取相应的槽数指定到新节点中,抽取的总槽数为1000个) … …
Do you want to proceed with the proposed reshard plan (yes/no)? yes (ps:输入yes确认开始执行分片任务) … …

查看新集群信息:

./redis-cli -a lglg -c -h 192.168.20.135 -p 8001
192.168.20.135:8001> cluster nodes

13.Redis集群做水平扩展
已经为8007master分配槽

删除8007主节点

最后,我们尝试把8007节点删除恢复成本来的状态

  1. 将8007节点的槽分配到其他可以的节点上,不然数据会丢失
/usr/local/redis-5.0.2/src/redis-cli -a lglg --cluster reshard 192.168.20.135:8007

13.Redis集群做水平扩展
指定迁移的1000个槽位数量,然后指定迁移到哪台主节点上,我们这里把他迁移到8001端口的主节点上(这里会把这1000个槽全部迁给8001,暂时无法做到平均分配)
13.Redis集群做水平扩展
source node: 这里是需要数据源,也就是我们的8007节点id
选择done,done的意思是全部从8007端口拿1000个槽,不从其他主节点凑
13.Redis集群做水平扩展
选yes
查看集群状态:

13.Redis集群做水平扩展
8007节点已经没有槽,全部迁移到了8001节点,可以删除8007节点了

  1. 删除8007节点与8008节点
    最后我们直接使用del-node命令删除8007,8008节点即可
#删除8007
/usr/local/redis-5.0.2/src/redis-cli -a lglg --cluster del-node 192.135.20.135:8007 f179fa4384a39f304b553b63a0c2f6e27446021b
# 删除8008
/usr/local/redis-5.0.2/src/redis-cli -a lglg --cluster del-node 192.135.20.135:8008 312f6ec111b455786ebfd2fac8492c17102adcee