13.Redis集群做水平扩展

概述

现在的集群架构是三主三从
在这里插入图片描述
我们在原始集群基础上再增加一主(8007)一从(8008),增加节点后的集群参见下图,
在这里插入图片描述

增加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
在这里插入图片描述

将节点添加进集群

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
在这里插入图片描述
在这里插入图片描述

配置8007为集群主节点

此时8007和8008节点都添加进入了集群,都是master节点
在这里插入图片描述
配置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的从节点
在这里插入图片描述
但此时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

在这里插入图片描述
已经为8007master分配槽

删除8007主节点

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

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

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

在这里插入图片描述
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

猜你喜欢

转载自blog.csdn.net/lglglglglgui/article/details/108825182
今日推荐