redis(4.0.10版本)哨兵、redis cluster集群部署、原理、测试

本文详细介绍了如何配置和管理RedisSentinel以实现主从切换,以及如何构建和扩展RedisCluster集群,包括环境准备、配置文件修改、集群创建、故障模拟与恢复等步骤,展示了Redis高可用性解决方案的实施过程。
摘要由CSDN通过智能技术生成

目录

一、哨兵原理

二、准备环境

1.准备2台服务器,修改主机名称192.168.1.134(redis-master)、 192.168.1.135(redis-slave),关闭防火墙

2.下载依赖包、获取redis-4.0.10.tar包

3.redis文件精简

4.系统调优配置

三、redis哨兵配置

1.在redis-master服务器上操作

2.在redis-slave服务器上操作

3.修改redis-master和redis-slave的redis.conf配置文件

四、构建redis cluster集群

1.上传工具,解码编译

2.安装ruby的redis扩展

3.在redis-master服务器上操作:创建redis-cluster集群

4.测试用redis-slave远程控制

5.批量导入数据观察key的集群分布情况,分析cluster集群key的节点分布情况

六、redis cluster 集群故障切换

1.启动redis-slave上所有的从库

2.redis-cluster集群从库的添加,在redis-master上操作

添加第三组服务器

3.查看集群所有节点信息

4.slave从库的读写测试

5.查看主从cluster集群key的分布情况

6.关掉7000端口的redis-server查看

7.重新启动7000端口的redis-server,再次查看

8.手动将redis-server 7000 端口重新切换为主库

9.如何删除节点? 不清空数据无法重新加入!

10.重新加入节点

七、总结


一、哨兵原理

通过向主节点执行info命令,获取从节点的信息,这也是为什么Sentinel节点不需要显示配置监控从节点
当有新的从节点加入时都可以立刻感知出来
节点不可达或者故障转移后,可以通过info命令实时更新节点拓扑信息

每隔1秒,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,来确认这些节点当前是否可达

发现新的Sentinel节点:通过订阅主节点的__sentinel__:hello了解其他的Sentinel节点信息,如果是新加入的Sentinel节点,将该Sentinel节点信息保存起来,并与该Sentinel节点创建连接。
Sentinel节点之间交换主节点的状态,作为后面客观下线以及领导者选举的依据
    

二、准备环境

1.准备2台服务器,修改主机名称192.168.1.134(redis-master)、 192.168.1.135(redis-slave),关闭防火墙
[root@localhost ~] hostnamectl set-hostname redis-master
[root@localhost ~] bash

[root@redis-master ~] systemctl stop firewalld
[root@redis-master ~] setenforce 0
[root@redis-master ~] iptables -F
2.下载依赖包、获取redis-4.0.10.tar包
[root@slave ~] yum -y install wget gcc gcc-c++ make tar openssl openssl-devel cmake
[root@slave ~] rz

[root@slave ~] ll
总用量 1704
-rw-------. 1 root root    1257 6月  16 18:40 anaconda-ks.cfg
-rw-r--r--. 1 root root 1738465 7月   3 18:03 redis-4.0.10.tar.gz

[root@master ~] cd /usr/src/redis-4.0.10/
[root@master redis-4.0.10] make
[root@slave redis-4.0.10] make MALLOC=jemalloc #避免碎片和可伸缩的并发支持
[root@master redis-4.0.10] make PREFIX=/usr/local/redis install
[root@master redis-4.0.10] mkdir -p /usr/local/redis/conf    #创建配置文件目录
[root@master redis-4.0.10] cp sentinel.conf /usr/local/redis/conf/   #redis哨兵配置文件
[root@master redis-4.0.10] cp src/redis-trib.rb /usr/local/redis/bin/  #创建集群的工具
[root@master redis-4.0.10] ln -s /usr/local/redis/bin/* /usr/local/bin/  #优化命令
3.redis文件精简
[root@master redis-4.0.10] cp redis.conf /usr/local/redis/conf/
[root@master redis-4.0.10] cd /usr/local/redis/
[root@master redis] cp conf/redis.conf{,.bak}
[root@master redis] egrep -v  "^$|^#" conf/redis.conf.bak > conf/redis.conf
4.系统调优配置

启用透明大页面压缩

[root@master redis] echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@master redis] echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@master redis] echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
[root@master redis] echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local

进一步优化

# 修改文件并发数
[root@master redis] echo "* - nofile 10240" >> /etc/security/limits.conf
#监听队列
[root@master redis] echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf
#   0内存不够,就会拒绝申请
#1物理内存都允许分配给你,只要有内存就给你用,这样可以避免申请内存失败的问题。
[root@master redis] echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf

三、redis哨兵配置

1.在redis-master服务器上操作
[root@master redis] mkdir -p /data/redis-cluster   #创建集群工具目录
[root@master redis] cd /data/redis-cluster
[root@master redis-cluster] mkdir 7000 7001 7002   #创建3个redis目录
[root@master redis-cluster] cp /usr/local/redis/conf/redis.conf /data/redis-cluster/7000/
[root@master redis-cluster] cp /usr/local/redis/conf/redis.conf /data/redis-cluster/7001/
[root@master redis-cluster] cp /usr/local/redis/conf/redis.conf /data/redis-cluster/7002/
2.在redis-slave服务器上操作
[root@redis-slave redis] mkdir -p /data/redis-cluster
[root@redis-slave redis] cd /data/redis-cluster/
[root@redis-slave redis-cluster] mkdir 8000 8001 8002
[root@redis-slave redis-cluster] scp 192.168.1.134:/data/redis-cluster/7000/redis.conf 8000
The authenticity of host '192.168.1.134 (192.168.1.134)' can't be established.
ECDSA key fingerprint is SHA256:mgc4iZ/w11vaana8aZbfLvgUSFhlAbUK/ghw1ANkBNw.
ECDSA key fingerprint is MD5:c2:c7:85:09:96:72:84:a1:13:6b:72:f2:e1:d5:2b:e6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.134' (ECDSA) to the list of known hosts.
root@192.168.1.134's password: 
redis.conf                                                       100% 1313   704.6KB/s   00:00    
[root@redis-slave redis-cluster] scp 192.168.1.134:/data/redis-cluster/7000/redis.conf 8001
root@192.168.1.134's password: 
redis.conf                                                       100% 1313   762.3KB/s   00:00    
[root@redis-slave redis-cluster] scp 192.168.1.134:/data/redis-cluster/7000/redis.conf 8002
root@192.168.1.134's password: 
redis.conf                                                       100% 1313   852.6KB/s   00:00    
 
3.修改redis-master和redis-slave的redis.conf配置文件
[root@redis-master 7000] vim redis.conf 
cluster-enabled yes  #手动添加
bind 0.0.0.0
port 7000
tcp-backlog 1024
daemonize yes
pidfile /data/redis-cluster/7000/redis.pid
logfile "/data/redis-cluster/7000/redis.log"
dir /data/redis-cluster/7000/

7001和7002只需要替换7000即可
[root@redis-master redis-cluster] redis-server /data/redis-cluster/7001/redis.conf 
[root@redis-master redis-cluster] redis-server /data/redis-cluster/7002/redis.conf 
[root@redis-master redis-cluster] redis-server /data/redis-cluster/7000/redis.conf 
[root@redis-master redis-cluster] netstat -antup |grep redis
tcp        0      0 0.0.0.0:7000            0.0.0.0:*               LISTEN      19152/redis-server  
tcp        0      0 0.0.0.0:7001            0.0.0.0:*               LISTEN      19142/redis-server  
tcp        0      0 0.0.0.0:7002            0.0.0.0:*               LISTEN      19147/redis-server  
tcp        0      0 0.0.0.0:17000           0.0.0.0:*               LISTEN      19152/redis-server  
tcp        0      0 0.0.0.0:17001           0.0.0.0:*               LISTEN      19142/redis-server  
tcp        0      0 0.0.0.0:17002           0.0.0.0:*               LISTEN      19147/redis-server  

redis-slave服务器一样复制

[root@redis-slave redis-cluster] scp 192.168.1.134:/data/redis-cluster/7000/redis.conf 8000
root@192.168.1.134's password: 
redis.conf                                                       100% 1401     1.1MB/s   00:00    
[root@redis-slave redis-cluster] scp 192.168.1.134:/data/redis-cluster/7000/redis.conf 8001
root@192.168.1.134's password: 
redis.conf                                                       100% 1401   834.5KB/s   00:00    
[root@redis-slave redis-cluster] scp 192.168.1.134:/data/redis-cluster/7000/redis.conf 8002
root@192.168.1.134's password:  
redis.conf                                                       100% 1401   941.9KB/s   00:00 

#然后我们一样替换
[root@redis-slave redis-cluster] vim 8001/redis.conf
:%s/7000/8001/g   #末行模式
4 次替换,共 4 行  

[root@redis-slave redis-cluster] redis-server 8000/redis.conf 
[root@redis-slave redis-cluster] redis-server 8001/redis.conf 
[root@redis-slave redis-cluster] redis-server 8002/redis.conf 
[root@redis-slave redis-cluster] netstat -anptl |grep redis
tcp        0      0 0.0.0.0:18000           0.0.0.0:*               LISTEN      19072/redis-server  
tcp        0      0 0.0.0.0:18001           0.0.0.0:*               LISTEN      19077/redis-server  
tcp        0      0 0.0.0.0:18002           0.0.0.0:*               LISTEN      19082/redis-server  
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      19072/redis-server  
tcp        0      0 0.0.0.0:8001            0.0.0.0:*               LISTEN      19077/redis-server  
tcp        0      0 0.0.0.0:8002            0.0.0.0:*               LISTEN      19082/redis-server  

四、构建redis cluster集群

1.上传工具,解码编译
-rw-r--r--. 1 root root 15923244 12月  2 2020 ruby-2.5.1.tar.gz
[root@redis-master redis-cluster] tar xf ruby-2.5.1.tar.gz -C /usr/src/
[root@redis-master redis-cluster] cd /usr/src/ruby-2.5.1/
[root@redis-master ruby-2.5.1] ./configure && make && make install
[root@redis-master ruby-2.5.1] ruby --version
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux] #完成
2.安装ruby的redis扩展
[root@redis-master ruby-2.5.1] /usr/local/bin/gem install redis-3.2.0.gem
3.在redis-master服务器上操作:创建redis-cluster集群
[root@redis-master ~] redis-trib.rb create 192.168.1.134:7000 192.168.1.134:7001 192.168.1.134:7002
>>> Creating cluster
/usr/local/lib/ruby/gems/2.5.0/gems/redis-3.2.0/lib/redis/client.rb:422: warning: constant ::Fixnum is deprecated
>>> Performing hash slots allocation on 3 nodes...
Using 3 masters:
192.168.1.134:7000
192.168.1.134:7001
192.168.1.134:7002
M: 2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000
   slots:0-5460 (5461 slots) master
M: 17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001
   slots:5461-10922 (5462 slots) master
M: ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002
   slots:10923-16383 (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join..
>>> Performing Cluster Check (using node 192.168.1.134:7000)
M: 2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000
   slots:0-5460 (5461 slots) master
   0 additional replica(s)
M: ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002
   slots:10923-16383 (5461 slots) master
   0 additional replica(s)
M: 17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001
   slots:5461-10922 (5462 slots) master
   0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[root@redis-master ~] ps -ef |grep cluster |grep -v grep
root      19142      1  0 18:58 ?        00:00:08 redis-server 0.0.0.0:7001 [cluster]
root      19147      1  0 18:58 ?        00:00:08 redis-server 0.0.0.0:7002 [cluster]
root      19152      1  0 18:58 ?        00:00:08 redis-server 0.0.0.0:7000 [cluster]
4.测试用redis-slave远程控制
#在slave执行的 Redis 命令,将字符串 "crushlinux" 存储在键名为 "name" 的键值对中
[root@redis-slave redis-cluster] redis-cli -h 192.168.1.134 -c -p 7000 set name crushlinux
OK
#用7001、7002查看
[root@redis-slave redis-cluster] redis-cli -h 192.168.1.134 -c -p 7001 get name 
"crushlinux"
[root@redis-slave redis-cluster] redis-cli -h 192.168.1.134 -c -p 7002 get name 
"crushlinux"
 
5.批量导入数据观察key的集群分布情况,分析cluster集群key的节点分布情况
[root@redis-slave ~] for line in `seq -w 10000`;do redis-cli -h 192.168.1.134 -p 7000 -c set key3_${line} value_${line};done

[root@redis-slave ~] redis-cli -h 192.168.1.134 -p 7000 info Keyspace
# Keyspace
db0:keys=3338,expires=0,avg_ttl=0
[root@redis-slave ~] redis-cli -h 192.168.1.134 -p 7001 info Keyspace
# Keyspace
db0:keys=3354,expires=0,avg_ttl=0
[root@redis-slave ~] redis-cli -h 192.168.1.134 -p 7002 info Keyspace
# Keyspace
db0:keys=3310,expires=0,avg_ttl=0

六、redis cluster 集群故障切换

1.启动redis-slave上所有的从库
[root@redis-slave ~] netstat -lnpt |grep redis
tcp        0      0 0.0.0.0:18000           0.0.0.0:*               LISTEN      19072/redis-server  
tcp        0      0 0.0.0.0:18001           0.0.0.0:*               LISTEN      19077/redis-server  
tcp        0      0 0.0.0.0:18002           0.0.0.0:*               LISTEN      19082/redis-server  
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      19072/redis-server  
tcp        0      0 0.0.0.0:8001            0.0.0.0:*               LISTEN      19077/redis-server  
tcp        0      0 0.0.0.0:8002            0.0.0.0:*               LISTEN      19082/redis-server  
2.redis-cluster集群从库的添加,在redis-master上操作

添加第一组从服务器

[root@redis-master ~] redis-trib.rb add-node --slave 192.168.1.135:8000 192.168.1.134:7000
>>> Adding node 192.168.1.135:8000 to cluster 192.168.1.134:7000
/usr/local/lib/ruby/gems/2.5.0/gems/redis-3.2.0/lib/redis/client.rb:422: warning: constant ::Fixnum is deprecated
>>> Performing Cluster Check (using node 192.168.1.134:7000)
M: 2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000
   slots:0-5460 (5461 slots) master
   0 additional replica(s)
M: ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002
   slots:10923-16383 (5461 slots) master
   0 additional replica(s)
M: 17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001
   slots:5461-10922 (5462 slots) master
   0 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Automatically selected master 192.168.1.134:7000
>>> Send CLUSTER MEET to node 192.168.1.135:8000 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 192.168.1.134:7000.
[OK] New node added correctly.

添加第二组服务器

[root@redis-master ~] redis-trib.rb add-node --slave 192.168.1.135:8001 192.168.1.134:7001
>>> Adding node 192.168.1.135:8001 to cluster 192.168.1.134:7001
/usr/local/lib/ruby/gems/2.5.0/gems/redis-3.2.0/lib/redis/client.rb:422: warning: constant ::Fixnum is deprecated
>>> Performing Cluster Check (using node 192.168.1.134:7001)
M: 17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001
   slots:5461-10922 (5462 slots) master
   0 additional replica(s)
M: ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002
   slots:10923-16383 (5461 slots) master
   0 additional replica(s)
M: 2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000
   slots: (0 slots) slave
   replicates 2c5a4a7db65088e1d4825033e568ee9efef53290
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Automatically selected master 192.168.1.134:7001
>>> Send CLUSTER MEET to node 192.168.1.135:8001 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 192.168.1.134:7001.
[OK] New node added correctly.
添加第三组服务器
[root@redis-master ~] redis-trib.rb add-node --slave 192.168.1.135:8002 192.168.1.134:7002
>>> Adding node 192.168.1.135:8002 to cluster 192.168.1.134:7002
/usr/local/lib/ruby/gems/2.5.0/gems/redis-3.2.0/lib/redis/client.rb:422: warning: constant ::Fixnum is deprecated
>>> Performing Cluster Check (using node 192.168.1.134:7002)
M: ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002
   slots:10923-16383 (5461 slots) master
   0 additional replica(s)
S: 2d2fd7a884e8e1c388be576bbc83a82bfd34874d 192.168.1.135:8001
   slots: (0 slots) slave
   replicates 17e761dfeb1aacf4da9a063cf67871dc2989434f
M: 2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000
   slots: (0 slots) slave
   replicates 2c5a4a7db65088e1d4825033e568ee9efef53290
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Automatically selected master 192.168.1.134:7002
>>> Send CLUSTER MEET to node 192.168.1.135:8002 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 192.168.1.134:7002.
[OK] New node added correctly.
3.查看集群所有节点信息
[root@redis-master ~] redis-cli -p 7000 cluster nodes
2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000@17000 myself,master - 0 1688387168000 1 connected 0-5460
770de8d62fb988f4e5354cde0b973904716a301c 192.168.1.135:8002@18002 slave ca4b7a19524133e5a2466cb3e7b59076e123ce62 0 1688387170174 3 connected
c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000@18000 slave 2c5a4a7db65088e1d4825033e568ee9efef53290 0 1688387167147 1 connected
ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002@17002 master - 0 1688387169000 3 connected 10923-16383
2d2fd7a884e8e1c388be576bbc83a82bfd34874d 192.168.1.135:8001@18001 slave 17e761dfeb1aacf4da9a063cf67871dc2989434f 0 1688387167000 2 connected
17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001@17001 master - 0 1688387169165 2 connected 5461-10922
4.slave从库的读写测试
[root@redis-slave ~] redis-cli -h 192.168.1.135 -c -p 8000
192.168.1.135:8000> set address henan
-> Redirected to slot [3680] located at 192.168.1.134:7000
OK
192.168.1.134:7000> exit
[root@redis-slave ~] redis-cli -h 192.168.1.135 -c -p 8000 get address
"henan"
[root@redis-slave ~] redis-cli -h 192.168.1.135 -c -p 8001 get address
"henan"
[root@redis-slave ~] redis-cli -h 192.168.1.135 -c -p 8002 get address
"henan"
[root@redis-slave ~] redis-cli -h 192.168.1.134 -c -p 7000 get address
"henan"
[root@redis-slave ~] redis-cli -h 192.168.1.134 -c -p 7001 get address
"henan"
[root@redis-slave ~] redis-cli -h 192.168.1.134 -c -p 7002 get address
"henan"

通过测试,我们发现redis的cluster集群不论是主库还是从库都可以进行set和get。因此,在使用中我们就没必要都去主库了。

5.查看主从cluster集群key的分布情况
[root@redis-master ~] redis-cli -h 192.168.1.134 -c -p 7000 info Keyspace
# Keyspace
db0:keys=3339,expires=0,avg_ttl=0
[root@redis-master ~] redis-cli -h 192.168.1.135 -c -p 8000 info Keyspace
# Keyspace
db0:keys=3339,expires=0,avg_ttl=0
[root@redis-master ~] redis-cli -h 192.168.1.134 -c -p 7001 info Keyspace
# Keyspace
db0:keys=3354,expires=0,avg_ttl=0
[root@redis-master ~] redis-cli -h 192.168.1.135 -c -p 8001 info Keyspace
# Keyspace
db0:keys=3354,expires=0,avg_ttl=0
[root@redis-master ~] redis-cli -h 192.168.1.134 -c -p 7002 info Keyspace
# Keyspace
db0:keys=3310,expires=0,avg_ttl=0
[root@redis-master ~] redis-cli -h 192.168.1.135 -c -p 8002 info Keyspace
# Keyspace
db0:keys=3310,expires=0,avg_ttl=0
 

发现7000和8000、7001和8001、7002和8002分布相同,主从正常

6.关掉7000端口的redis-server查看
[root@redis-master ~] redis-cli -h 192.168.1.134 -p 7000 shutdown
[root@redis-master ~] redis-cli -h 192.168.1.135 -p 8000 cluster nodes
770de8d62fb988f4e5354cde0b973904716a301c 192.168.1.135:8002@18002 slave ca4b7a19524133e5a2466cb3e7b59076e123ce62 0 1688387680826 3 connected
2d2fd7a884e8e1c388be576bbc83a82bfd34874d 192.168.1.135:8001@18001 slave 17e761dfeb1aacf4da9a063cf67871dc2989434f 0 1688387682854 2 connected
17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001@17001 master - 0 1688387680000 2 connected 5461-10922
2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000@17000 master,fail - 1688387667273 1688387665657 1 disconnected 0-5460
c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000@18000 myself,slave 2c5a4a7db65088e1d4825033e568ee9efef53290 0 1688387683000 0 connected
ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002@17002 master - 0 1688387683867 3 connected 10923-16383

8000被切换成master

7.重新启动7000端口的redis-server,再次查看
[root@redis-master ~] redis-server /data/redis-cluster/7000/redis.conf
[root@redis-master ~] redis-cli -h 192.168.1.135 -p 8000 cluster nodes
770de8d62fb988f4e5354cde0b973904716a301c 192.168.1.135:8002@18002 slave ca4b7a19524133e5a2466cb3e7b59076e123ce62 0 1688387876067 3 connected
2d2fd7a884e8e1c388be576bbc83a82bfd34874d 192.168.1.135:8001@18001 slave 17e761dfeb1aacf4da9a063cf67871dc2989434f 0 1688387873037 2 connected
17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001@17001 master - 0 1688387874046 2 connected 5461-10922
2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000@17000 slave c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 0 1688387875057 4 connected
c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000@18000 myself,master - 0 1688387874000 4 connected 0-5460
ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002@17002 master - 0 1688387875000 3 connected 10923-16383

7000变成了slave

8.手动将redis-server 7000 端口重新切换为主库
[root@redis-master ~] redis-cli -h 192.168.1.134 -c -p 7000 cluster failover 
OK
[root@redis-master ~] redis-cli -h 192.168.1.135 -p 8000 cluster nodes
770de8d62fb988f4e5354cde0b973904716a301c 192.168.1.135:8002@18002 slave ca4b7a19524133e5a2466cb3e7b59076e123ce62 0 1688388038000 3 connected
2d2fd7a884e8e1c388be576bbc83a82bfd34874d 192.168.1.135:8001@18001 slave 17e761dfeb1aacf4da9a063cf67871dc2989434f 0 1688388038518 2 connected
17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001@17001 master - 0 1688388037000 2 connected 5461-10922
2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000@17000 master - 0 1688388037511 5 connected 0-5460
c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000@18000 myself,slave 2c5a4a7db65088e1d4825033e568ee9efef53290 0 1688388036000 4 connected
ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002@17002 master - 0 1688388037000 3 connected 10923-16383

7000端口重新变为master

9.如何删除节点? 不清空数据无法重新加入!
#查看8001节点ID
[root@redis-master ~] redis-cli -h 192.168.1.135 -p 8000 cluster nodes
770de8d62fb988f4e5354cde0b973904716a301c 192.168.1.135:8002@18002 slave ca4b7a19524133e5a2466cb3e7b59076e123ce62 0 1688388499015 3 connected
2d2fd7a884e8e1c388be576bbc83a82bfd34874d 192.168.1.135:8001@18001 slave 17e761dfeb1aacf4da9a063cf67871dc2989434f 0 1688388497000 2 connected
17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001@17001 master - 0 1688388499000 2 connected 5461-10922
2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000@17000 master - 0 1688388500023 5 connected 0-5460
c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000@18000 myself,slave 2c5a4a7db65088e1d4825033e568ee9efef53290 0 1688388498000 4 connected
ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002@17002 master - 0 1688388498004 3 connected 10923-16383
#删除8001节点
[root@redis-master ~] redis-trib.rb del-node 192.168.1.135:8001 '2d2fd7a884e8e1c388be576bbc83a82bfd34874d'
>>> Removing node 2d2fd7a884e8e1c388be576bbc83a82bfd34874d from cluster 192.168.1.135:8001
/usr/local/lib/ruby/gems/2.5.0/gems/redis-3.2.0/lib/redis/client.rb:422: warning: constant ::Fixnum is deprecated
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.

#清空8001节点现有数据

[root@redis-slave ~]# ps -ef|grep 8001
root      29157  18970  0 20:54 pts/0    00:00:00 grep --color=auto 8001
[root@redis-slave ~]# kill -9 18970
已杀死
[root@slave ~] cd /data/redis-cluster/8001/
[root@slave 8001]# ll
总用量 92
-rw-r--r--. 1 root root 80672 7月   3 20:50 dump.rdb
-rw-r--r--. 1 root root   805 7月   3 20:40 nodes.conf
-rw-r--r--. 1 root root  1401 7月   3 19:18 redis.conf
-rw-r--r--. 1 root root  4046 7月   3 20:50 redis.log
[root@slave 8001] rm -rf dump.rdb 
[root@slave 8001] rm -rf nodes.conf
10.重新加入节点
[root@slave 8001] redis-server /data/redis-cluster/8001/redis.conf
[root@master ~] redis-trib.rb add-node --slave 192.168.1.135:8001 192.168.1.134:7001
>>> Adding node 192.168.1.135:8001 to cluster 192.168.1.134:7001
/usr/local/lib/ruby/gems/2.5.0/gems/redis-3.2.0/lib/redis/client.rb:422: warning: constant ::Fixnum is deprecated
>>> Performing Cluster Check (using node 192.168.1.134:7001)
M: 17e761dfeb1aacf4da9a063cf67871dc2989434f 192.168.1.134:7001
   slots:5461-10922 (5462 slots) master
   0 additional replica(s)
S: 770de8d62fb988f4e5354cde0b973904716a301c 192.168.1.135:8002
   slots: (0 slots) slave
   replicates ca4b7a19524133e5a2466cb3e7b59076e123ce62
M: ca4b7a19524133e5a2466cb3e7b59076e123ce62 192.168.1.134:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
M: 2c5a4a7db65088e1d4825033e568ee9efef53290 192.168.1.134:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: c9ea0afbd1734f3b1fb7ea1cd8b8d4e2357ff07f 192.168.1.135:8000
   slots: (0 slots) slave
   replicates 2c5a4a7db65088e1d4825033e568ee9efef53290
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Automatically selected master 192.168.1.134:7001
>>> Send CLUSTER MEET to node 192.168.1.135:8001 to make it join the cluster.
Waiting for the cluster to join.
>>> Configure node as replica of 192.168.1.134:7001.
[OK] New node added correctly.

七、总结

redis cluster 集群,无论主库还是从库都可以进行set和get,有一个主机master宕机,自动切换其从服务器变成主服务器,宕机的服务器重新加入后i,自动变为从服务器!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我还能再学点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值