三十四、Redis扩容集群

版权声明:本文为博主原创文章,未经博主允许欢迎转载,请注明原文链接。一起交流,共同进步。 https://blog.csdn.net/newbie_907486852/article/details/81989361

                                          Redis扩容集群

这里写图片描述

1、准备新节点

新节点:

  • 集群模式
  • 配置和其他节点统一
  • 启动后是孤儿节点

新增两个节点8006、8007:

#redis基本配置
port 8006
daemonize yes
pidfile /var/run/redis-8006.pid
dir /opt/module/redis-4.0.11/data
logfile "8006.log"
dbfilename "dump-8006.rdb"


#集群开关,默认是不开启集群模式。
cluster-enabled yes

#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。
#这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件,
#请确保与实例运行的系统中配置文件名称不冲突
cluster-config-file nodes-8006.conf

#默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。设置为no,可以在slot没有全部分配的时候提供服务。
#不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致。
#就是有一个节点挂了这个集群还能使用
cluster-require-full-coverage no

8007节点一致。

2、加入集群

2.1、节点加入集群的解释

这里写图片描述

这里写图片描述


add-node命令可以将新节点加入集群,节点可以为master,也可以为某个master节点的slave:

add-node  new_host:new_port existing_host:existing_port
          --slave
          --master-id <arg>


new_host:new_port                    新增节点的IP及端口
existing_host:existing_port          已知节点的IP及端口

目的是为了新节点和旧结点间进行meet操作,让整个集群知道新节点进来了

add-node有两个可选参数:

--slave:设置该参数,则新节点以slave的角色加入集群
--master-id:这个参数需要设置了--slave才能生效,--master-id用来指定新节点的master节点。如果不设置该参数,则会随机为节点选择master节点。


add-node流程如下:

  1. 通过load_cluster_info_from_node方法转载集群信息,check_cluster方法检查集群是否健康。
  2. 如果设置了–slave,则需要为该节点寻找master节点。设置了–master-id,则以该节点作为新节点的master,如果没有设置–master-id,则调用get_master_with_least_replicas方法,寻找slave数量最少的master节点。如果slave数量一致,则选取load_cluster_info_from_node顺序发现的第一个节点。load_cluster_info_from_node顺序的第一个节点是add-node设置的existing_host:existing_port节点,后面的顺序根据在该节点执行cluster nodes返回的结果返回的节点顺序。
  3. 连接新的节点并与集群第一个节点握手。
  4. 如果没设置–slave就直接返回ok,设置了–slave,则需要等待确认新节点加入集群,然后执行cluster replicate命令复制master节点。
2.2、8006、8007两个节点加入案例:


先启动8006、8007两个节点:

redis-server redis-8006.conf
redis-server redis-8007.conf

先添加一个主节点8006:

./redis-trib.rb add-node 127.0.0.1:8006  127.0.0.1:8000

结果:

f8b5360af3341fc0f87b9492b4a3d69689ef1072 127.0.0.1:8006@18006 myself,master - 0 1535032508000 0 connected

为8006主节点添加一个从节点8007:

./redis-trib.rb add-node --slave --master-id f8b5360af3341fc0f87b9492b4a3d69689ef1072 127.0.0.1:8007  127.0.0.1:8000

结果:

[root@redis src]# redis-cli -p 8006 cluster nodes
7979884fe3020a77decb542b5f841dce99fa555e 127.0.0.1:8007@18007 slave f8b5360af3341fc0f87b9492b4a3d69689ef1072 0 1535032756000 0 connected
f8b5360af3341fc0f87b9492b4a3d69689ef1072 127.0.0.1:8006@18006 myself,master - 0 1535032753000 0 connected

3、迁移槽和数据

这里写图片描述

这里写图片描述

3.1、迁移slot及数据语法


reshard命令可以在线把集群的一些slot从集群原来slot负责节点迁移到新的节点,利用reshard可以完成集群的在线横向扩容和缩容。

 reshard          host:port
                  --slots <arg>
                  --to <arg>
                  --from <arg>
                  --yes
                  --pipeline <arg>
                  --timeout <arg>

参数解释:

host:port:这个是必传参数,用来从一个节点获取整个集群信息,相当于获取集群信息的入口。
--from <arg>:需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,
              还可以直接传递--from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入。
--to <arg>:slot需要迁移的目的节点的node id,目的节点只能填写一个,不传递该参数的话,则会在迁移过程中提示用户输入。
--slots <arg>:迁移到目标节点的slot总数量,不传递该参数的话,则会在迁移过程中提示用户输入。
--yes:设置该参数,可以在打印执行reshard计划的时候,提示用户输入yes确认后再执行reshard。
--timeout <arg>:设置migrate命令的超时时间。
--pipeline <arg>:定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10

迁移前:

7979884fe3020a77decb542b5f841dce99fa555e 127.0.0.1:8007@18007 slave f8b5360af3341fc0f87b9492b4a3d69689ef1072 0 1535032756000 0 connected
f8b5360af3341fc0f87b9492b4a3d69689ef1072 127.0.0.1:8006@18006 myself,master - 0 1535032753000 0 connected
a2d034b74c9cec4cd8398e8b23ae2d2ab124d49d 127.0.0.1:8000@18000 slave 9d1cb9fea95f1b205fc7a5ecb20125259765d6ca 0 1535032755246 7 connected
fd17cbac4a5ca1942490d3734a73387341e80fb7 127.0.0.1:8005@18005 slave f5960002d40cf3711eca7146719c4f568115f76c 0 1535032756000 3 connected
1f0d813205ea17d9b254488215bd48612c0ff2b5 127.0.0.1:8001@18001 master - 0 1535032755000 2 connected 5461-10922
9d1cb9fea95f1b205fc7a5ecb20125259765d6ca 127.0.0.1:8003@18003 master - 0 1535032757258 7 connected 0-5460
f5960002d40cf3711eca7146719c4f568115f76c 127.0.0.1:8002@18002 master - 0 1535032756252 3 connected 10923-16383
93ae6d9a42bf485a955d2387b0a0d659e2c12902 127.0.0.1:8004@18004 slave 1f0d813205ea17d9b254488215bd48612c0ff2b5 0 1535032758265 2 connected

所有节点向8006节点迁移1364个slot:

./redis-trib.rb reshard --slots 4096 --to f8b5360af3341fc0f87b9492b4a3d69689ef1072 --from all --yes 127.0.0.1:8000

槽点迁移后:

7979884fe3020a77decb542b5f841dce99fa555e 127.0.0.1:8007@18007 slave f8b5360af3341fc0f87b9492b4a3d69689ef1072 0 1535035117200 9 connected
f8b5360af3341fc0f87b9492b4a3d69689ef1072 127.0.0.1:8006@18006 myself,master - 0 1535035113000 9 connected 0-1363 5461-6826 10923-12286
a2d034b74c9cec4cd8398e8b23ae2d2ab124d49d 127.0.0.1:8000@18000 slave 9d1cb9fea95f1b205fc7a5ecb20125259765d6ca 0 1535035116193 7 connected
fd17cbac4a5ca1942490d3734a73387341e80fb7 127.0.0.1:8005@18005 slave f5960002d40cf3711eca7146719c4f568115f76c 0 1535035114000 3 connected
1f0d813205ea17d9b254488215bd48612c0ff2b5 127.0.0.1:8001@18001 master - 0 1535035114000 2 connected 6827-10922
9d1cb9fea95f1b205fc7a5ecb20125259765d6ca 127.0.0.1:8003@18003 master - 0 1535035114000 7 connected 1364-5460
f5960002d40cf3711eca7146719c4f568115f76c 127.0.0.1:8002@18002 master - 0 1535035115000 3 connected 12287-16383
93ae6d9a42bf485a955d2387b0a0d659e2c12902 127.0.0.1:8004@18004 slave 1f0d813205ea17d9b254488215bd48612c0ff2b5 0 1535035115189 2 connected

猜你喜欢

转载自blog.csdn.net/newbie_907486852/article/details/81989361