民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践

2023-06-0717:00:41数据库教程Comments754 views字数 7071阅读模式

Cluster 集群扩容概念

当redis数据量日渐增长,当内存不够用的时候,这时候就需要集群扩容了,cluster集群扩容可以增加内存也可以增加节点,因为redis数据都是存在内存中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

redis cluster增加节点进行扩容步骤:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

  • 1.在新的服务器上部署redis cluster
  • 2.使用工具将新部署的节点加到集群中
  • 3.使用工具将集群槽位重新分配
  • 4.将主从复制关系调整成交叉模式

扩容原理:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

原来的节点算好要拿出多少的槽位给新加的节点,新加的节点准备导入的槽位,准备的前提条件就是加入集群,一切准备就绪后,主节点将划分出来的槽位分配给新节点,然后将相关槽位的数据迁移到新的节点。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

4个节点的redis cluster,每个节点的槽位时16384/4,一个节点4096个槽位 。民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践扩容前后的架构图对比图文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

新增节点后,主从复制就变成了四主四从,只需要变动192.168.81.230的从库关系即可,192.168.81.230节点从库复制192.168.81.240节点的主库,192.168.81.240从库复制192.168.81.210的主库
民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

环境准备民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

在新节点部署redis cluster

#将redis管理工具从redis-1拷贝到redis-4并安装
[root@redis-1 ~]# scp -rp /data/redis_cluster root@192.168.81.240:/data
[root@redis-4 ~]# cd /data/redis_cluster/redis-3.2.9
[root@redis-4 /data/redis_cluster/redis-3.2.9]# make install 

#创建部署路径
[root@redis-4 ~]# mkdir -p /data/redis_cluster/redis_{6390,6391}/{conf,data,logs,pid}

#准备配置文件
[root@redis-4 ~]# cat > /data/redis_cluster/redis_6390/conf/redis_6390.conf <<EOF
bind $(ifconfig | awk 'NR==2{print $2}')
port 6390  
daemonize yes
logfile /data/redis_cluster/redis_6390/logs/redis_6390.log
pidfile /data/redis_cluster/redis_6390/pid/redis_6390.log
dbfilename "redis_6390.rdb"
dir /data/redis_cluster/redis_6390/data
cluster-enabled yes
cluster-config-file node_6390.conf
cluster-node-timeout 15000
save 60 10000
save 300 10
save 900 1
EOF

[root@redis-4 ~]# cat > /data/redis_cluster/redis_6391/conf/redis_6391.conf <<EOF
bind $(ifconfig | awk 'NR==2{print $2}')
port 6391  
daemonize yes
logfile /data/redis_cluster/redis_6391/logs/redis_6391.log
pidfile /data/redis_cluster/redis_6391/pid/redis_6391.log
dbfilename "redis_6391.rdb"
dir /data/redis_cluster/redis_6391/data
cluster-enabled yes
cluster-config-file node_6391.conf
cluster-node-timeout 15000
save 60 10000
save 300 10
save 900 1
EOF

#启动redis
[root@redis-4 ~]# ./redis_shell.sh start 6390
[root@redis-4 ~]# ./redis_shell.sh start 6391

更多关于 Redis 学习的文章,请参阅:NoSQL 数据库系列之 Redis ,本系列持续更新中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

使用工具将redis-4加入集群

在原来集群的任意一台机器安装了 ruby 环境即可操作。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

安装ruby环境

//安装ruby管理工具 
[root@redis-1 ~]# yum -y install rubygems  

//移除官网源
[root@redis-1 ~]# gem sources --remove https://rubygems.org/   
https://rubygems.org/ removed from sources

//增加阿里云源
[root@redis-1 ~]# gem sources -a http://mirrors.aliyun.com/rubygems/
http://mirrors.aliyun.com/rubygems/ added to sources

//更新缓存
[root@redis-1 ~]# gem update --system
ruby2.3.0以下版本执行会报错

//安装ruby支持redis的插件
[root@redis-1 ~]# gem install redis -v 3.3.5
Fetching: redis-3.3.5.gem (100%)
Successfully installed redis-3.3.5
Parsing documentation for redis-3.3.5
Installing ri documentation for redis-3.3.5
1 gem installed

将redis-4加入集群

需要将redis-4的6390和6391端口都加入到集群,可以使用工具进行添加。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

命令:./redis-trib.rb add-node 新节点:端口 现有集群:端口文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

[root@redis-1 ~]# cd /data/redis_cluster/redis-3.2.9/src/
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb add-node 192.168.81.240:6390 192.168.81.210:6380
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb add-node 192.168.81.240:6391 192.168.81.210:6380

民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践查看集群信息,已经有8个节点文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes
ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 192.168.81.220:6380 master - 0 1612424799243 2 connected 5461-10922
9b7641253ea66073d865accdd4460d2877f9ff5d 192.168.81.220:6381 master - 0 1612424801262 8 connected 10923-16383
b19722a1d3d482a2c6eaaec15e5e72018600389f 192.168.81.240:6391 master - 0 1612424797227 0 connected
6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2 192.168.81.240:6390 master - 0 1612424796216 9 connected
bdd20b03b573b2def6a9ee5053a75867709fc908 192.168.81.210:6381 slave ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 0 1612424796721 4 connected
812ae8ccf55d8994f1f9d30a20f6cff42fb24b4a 192.168.81.230:6380 slave 9b7641253ea66073d865accdd4460d2877f9ff5d 0 1612424800253 8 connected
904a0109976cae38e5a3059fd70ce2727a0ed8fb 192.168.81.230:6381 slave b61b8d0421b94b9de7267dda6c6f401a42622047 0 1612424798232 6 connected
b61b8d0421b94b9de7267dda6c6f401a42622047 192.168.81.210:6380 myself,master - 0 0 1 connected 0-5460

更多关于 Redis 学习的文章,请参阅:NoSQL 数据库系列之 Redis ,本系列持续更新中。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

将槽位重新分配

当新节点加入集群后,需要重新分配槽位,否则整个集群是无法使用的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

命令格式:./redis-trib.rb reshard 集群任意一个主库的ip:端口文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

分配的时候可以选择all,直接将所有节点分出一部分槽位迁移给新节点。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

也可以指定某个节点迁移出一部分槽位给新节点。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

所有节点分出槽位给新节点

[root@redis-1 ~]# cd /data/redis_cluster/redis-3.2.9/src
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb reshard 192.168.81.210:6380
How many slots do you want to move (from 1 to 16384)? 4096
//需要迁移的槽位数量,也就是要拿出多少个槽位给新节点,我们输入4096,因为16384除4刚好是4096

What is the receiving node ID? 6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2  
//迁移给目标节点的ID号,也就是新节点的6390ID号,6390作为新节点的主库

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
  //迁移方式:all将所有主节点分出一部分槽位给新节点

Do you want to proceed with the proposed reshard plan (yes/no)? yes   //是否继续分配

设置要迁移的槽位数量,填写4096民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践填写要迁移到目标节点的ID号,也就是要迁移给谁,这里我们要迁移给新加的节点,我们要让新机器的6390节点成为主库,因此就填写6390节点的ID号。民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践设置要从哪个节点上迁移槽位,可以一台一台的迁移,也可以填写all,all的意思是从所有节点上一共取出4096个槽位分给新机器,如果使用all迁移,会把所有主节点迁移出一部分槽位给新节点,执行完all直接就退出工具。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

我们使用all自动将所有主节点进行迁移,直接输入all即可自动迁移,一般都使用all。民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践提示我们是否继续分配,我们选择yes
民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践迁移完成自动退出程序
民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

迁移指定节点的槽位给新节点

前面步骤一致,只需要在source node选择指定节点即可。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

填写要迁移的主节点ID,填写完主机节点ID后,输入done,回车之后开始迁移数据。民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践提示我们是否继续,我们输入yes民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践开始数据迁移民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

查看集群信息及状态

当6390分配完槽位后,可以看下集群信息是否分配成功。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes

可以看到6390上有3段槽位号,说明是从三个节点上分出来的,正好也验证了之前说的一句话,槽位顺序不一定要存在,只要槽位数量够就可以民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践再次使用reshard命令即可看到都是4096个槽位民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践查看集群状态文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 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:8        #节点数已经是8个了
cluster_size:4
cluster_current_epoch:11
cluster_my_epoch:1
cluster_stats_messages_sent:67364
cluster_stats_messages_received:67293

配置四主四从交叉复制

目前是5个主节点3个从节点,显然是不合理的,我们要手动配置一些交叉复制实现四主四从。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

只需要操作192.168.81.230的6381端口和192.168.81.240的6391端口即可文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

  • 192.168.81.230的6381端口作为192.168.81.240的6390端口的从库
  • 192.168.81.240的6391作为192.168.81.210的6380端口的从库

再配置与新节点交叉复制的时候,建议先操作192.168.81.230,这样192.168.81.210的主库就没有需要传输rdb文件到从库了,也可以减轻主库的压力,如果先让192.168.81.240配置交叉,这样一来192.168.81.210的主库就有2份复制了,主库就需要一次传输2份rdb文件,压力也就大了文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

注意:先做192.168.81.230的交叉在做192.168.81.240的交叉文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

配置四主四从交叉复制

#将master主库的所有ID获取下来
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes | grep 'master' | awk '{print $1,$2}'
ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 192.168.81.220:6380
6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2 192.168.81.240:6390
812ae8ccf55d8994f1f9d30a20f6cff42fb24b4a 192.168.81.230:6380
b61b8d0421b94b9de7267dda6c6f401a42622047 192.168.81.210:6380

#建议在记事本里准备好命令
redis-3同步redis-4
192.168.81.230:6381> CLUSTER REPLICATE 6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2

redis-4同步redis-3
192.168.81.240:6391> CLUSTER REPLICATE b61b8d0421b94b9de7267dda6c6f401a42622047
民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践

查看集群信息及状态

[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes

[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 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:8
cluster_size:4
cluster_current_epoch:11
cluster_my_epoch:1
cluster_stats_messages_sent:69698
cluster_stats_messages_received:69627
[root@redis-1 ~]# 

已经是四主四从了,并且集群状态也是ok
民工哥死磕Redis教程(十三): Cluster 集群扩容原理与实践文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html

来源:https://jiangxl.blog.csdn.net/article/
details/121329856
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/sjk/45638.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/sjk/45638.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定