Redis Cluster集群扩容主从节点详细教程

2022年05月13日 阅读数:3
这篇文章主要向大家介绍Redis Cluster集群扩容主从节点详细教程,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1.Cluster集群扩容概念

当redis数据量日渐增加,当内存不够用的时候,这时候就须要集群扩容了,cluster集群扩容能够增长内存也能够增长节点,由于redis数据都是存在内存中java

redis cluster增长节点进行扩容步骤:node

​ 1.在新的服务器上部署redis clusterredis

​ 2.使用工具将新部署的节点加到集群中shell

​ 3.使用工具将集群槽位从新分配数据库

​ 4.将主从复制关系调整成交叉模式缓存

扩容原理: 原来的节点算好要拿出多少的槽位给新加的节点,新加的节点准备导入的槽位,准备的前提条件就是加入集群,一切准备就绪后,主节点将划分出来的槽位分配给新节点,而后将相关槽位的数据迁移到新的节点ruby

4个节点的redis cluster,每一个节点的槽位时16384/4,一个节点4096个槽位
Redis Cluster集群扩容主从节点详细教程_原力计划服务器

扩容先后的架构图对比图架构

新增节点后,主从复制就变成了四主四从,只须要变更192.168.81.230的从库关系便可,192.168.81.230节点从库复制192.168.81.240节点的主库,192.168.81.240从库复制192.168.81.210的主库
Redis Cluster集群扩容主从节点详细教程_java_02ide

环境准备

IP 主机名 端口号 节点
192.168.81.210 redis-1 6380 master
192.168.81.210 redis-1 6381 slave—>redis-2
192.168.81.220 redis-2 6380 master
192.168.81.220 redis-2 6381 slave—>redis-3
192.168.81.230 redis-3 6380 master
192.168.81.230 redis-3 6381 (slave—>redis-1)x slave—>redis-4
192.168.81.240 redis-4 6390 master
192.168.81.240 redis-4 6391 slave—>redis-1

2.在新节点部署redis cluster

1.将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 

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

2.准备配置文件
[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

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

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

在原来集群的任意一台机器安装了ruby环境便可操做

3.1.安装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

3.2.将redis-4加入集群

须要将redis-4的6390和6391端口都加入到集群,可使用工具进行添加

命令:./redis-trib.rb add-node 新节点:端口 现有集群:端口

[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集群扩容主从节点详细教程_java_03

查看集群信息,已经有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

4.将槽位从新分配

当新节点加入集群后,须要从新分配槽位,不然整个集群是没法使用的

命令格式./redis-trib.rb reshard 集群任意一个主库的ip:端口

分配的时候能够选择all,直接将全部节点分出一部分槽位迁移给新节点

也能够指定某个节点迁移出一部分槽位给新节点

4.1.全部节点分出槽位给新节点

[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集群扩容主从节点详细教程_d3_04

填写要迁移到目标节点的ID号,也就是要迁移给谁,这里咱们要迁移给新加的节点,咱们要让新机器的6390节点成为主库,所以就填写6390节点的ID号
Redis Cluster集群扩容主从节点详细教程_数据库_05

设置要从哪一个节点上迁移槽位,能够一台一台的迁移,也能够填写all,all的意思是从全部节点上一共取出4096个槽位分给新机器,若是使用all迁移,会把全部主节点迁移出一部分槽位给新节点,执行完all直接就退出工具

咱们使用all自动将全部主节点进行迁移,直接输入all便可自动迁移,通常都使用all

Redis Cluster集群扩容主从节点详细教程_数据库_06

提示咱们是否继续分配,咱们选择yes
Redis Cluster集群扩容主从节点详细教程_数据库_07
迁移完成自动退出程序
Redis Cluster集群扩容主从节点详细教程_redis_08

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

前面步骤一致,只须要在source node选择指定节点便可

填写要迁移的主节点ID,填写完主机节点ID后,输入done,回车以后开始迁移数据
Redis Cluster集群扩容主从节点详细教程_java_09

提示咱们是否继续,咱们输入yes

Redis Cluster集群扩容主从节点详细教程_原力计划_10

开始数据迁移
Redis Cluster集群扩容主从节点详细教程_数据库_11

4.3.查看集群信息及状态

当6390分配完槽位后,能够看下集群信息是否分配成功

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

能够看到6390上有3段槽位号,说明是从三个节点上分出来的,正好也验证了以前说的一句话,槽位顺序不必定要存在,只要槽位数量够就能够

Redis Cluster集群扩容主从节点详细教程_redis_12

再次使用reshard命令便可看到都是4096个槽位

Redis Cluster集群扩容主从节点详细教程_原力计划_13

查看集群状态

[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.配置四主四从交叉复制

目前是5个主节点3个从节点,显然是不合理的,咱们要手动配置一些交叉复制实现四主四从

只须要操做192.168.81.230的6381端口和192.168.81.240的6391端口便可

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文件,压力也就大了

注意:先作192.168.81.230的交叉在作192.168.81.240的交叉

5.1.配置四主四从交叉复制

1.将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

2.建议在记事本里准备好命令
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集群扩容主从节点详细教程_d3_14

5.2.查看集群信息及状态

[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集群扩容主从节点详细教程_redis_15