民工兄的Redis教程(十三):集群集群扩容的原理与实践
集群集群扩容概念
当redis数据量日渐增多,内存不足的时候,这时候就需要集群扩容了、集群 集群扩容可以增加内存或者节点,因为redis数据是存储在内存中的。
Redis集群添加节点扩展步骤:
- 1。在新服务器
- 2 上启用 redis 集群。使用工具将新部署的节点添加到集群
- 3。使用工具放置簇位重新分配
- 4。跨主从复制比例
扩容原理:
原节点已计算好要给新添加的节点多少个槽位,新节点准备导入准备需要加入集群。当一切完成后,主节点为新节点预留共享时隙,然后将相关时隙信息传输给新节点。
4节点redis集群,每个节点有16384/4个槽位,一个节点有4096个槽位。 扩容前后架构图对比
增加节点后,主从复制变成四主四从。您只需将从数据库关系更改为192.168.81.230,节点192.168.81.230将从数据库复制。节点192.168.81.240主库,192.168.81.240复制.219.18的主库618.1812。
环境准备
在新节点上部署redis集群
#将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,该系列持续更新。
使用工具将redis-4添加到集群中
在原集群中的任意机器上安装ruby环境就可以了。安装ruby环境可以用工具添加。
命令:./redis-trib.rb add-node 新增节点:port 现有集群:port
[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
查看集群信息,已经有8个节点了
[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 。该系列不断更新。
重新分配槽位
当有新节点加入集群时,必须重新分配槽位,否则整个集群将无法使用。
命令格式:./redis-trib.rb reshard 预留任一集群主库的ip:port
时,可以全选,直接为所有节点预留部分槽位,移动到新节点。
您还可以指定一个节点,将其部分时隙转移到新节点。
所有节点共享位置给新节点
[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填写要移动的目的节点的ID号,即要转移到谁,这个就是我们要移动到的目的地。我们希望新机器上的6390节点作为master数据库,所以填写6390节点ID号。
设置位置从哪个节点转移。可以一项一项转移,也可以全部填写。所有这一切意味着总共 4096 个席位将从所有节点中取出并分配给新机器。如果使用“全部移动”,则所有父节点将从某些位置移动到新节点,并且在全部完成后该工具将立即退出。
我们使用all来自动移动所有主节点。直接输入所有内容即可自动传输。通常一切都在使用中。 提示我们继续分配,我们选择“是”
更改已完成,并且程序退出会自动将指定的节点插槽移至新节点
前面的步骤是一样的,只需要去源节点选择指定节点即可。
填写要转账的主节点ID。填写主机节点ID后,输入done并回车开始数据传输。 询问是否继续,我们输入yes
开始数据传输
检查集群信息和状态
6390分配插槽后,您可以检查所有集群信息是否成功。
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes
可以看到6390有3个位数,这意味着它们被3个节点分开。这也印证了我之前所说的。只要有足够的槽位,槽位顺序就不需要存在。可以 再次使用 reshard 命令可以看到有 4096 个槽位
检查集群状态
[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
配置四主四从交叉复制
目前有 3 个表观 Master。必须手动配置一些交叉复制来实现四主四从,这是不合理的。
只需要使用6381端口192.168.81.230和6391端口192.168.81.240
- Slaja库的192.168.81 6381端口作为端口192.168.81。 6391的8.81.240
- 192.168 .81.240为192.168。配置端口6380 81.210从库与新节点交叉复制时,建议优先使用192.168.81.230。这样主库192.168.81.210就不需要将rdb文件传输到从库,也可以缓解主库的问题。对库的压力,如果先跨过192.168.81.240的配置,192.168.81.210的主库有2个副本,主库要一次移动2个rdb文件,这就增加了压力
注:先分割192.168.81.230,再分割192.168 .81.240
配置四主四从交叉复制 查看集群信息
#将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
已经四主四从,集群状态ok
来源:https://jianxl.blog csdn.net/article/details/121329856
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。