redis哨兵

该博客详细介绍了如何配置Redis的哨兵系统,包括设置master和slave节点,实现主从复制,以及通过sentinel节点监控和进行故障切换。在测试环境中,使用不同端口避免干扰,并解释了在主节点故障时,Sentinel如何自动选择新的master并更新配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备三个redis服务,命名分别为 master,slave1,slave2 .这里为在测试机上,不干扰原来的redis服务,我们master 使用6000端口。

1. master配置修改端口:

redis-6000.conf
port 6000
daemonize yes
logfile "6000.log"
dbfilename dump-6000.rdb
dir "/data/redis/6000/"
#requirepass 123456

2. slave修改配置: 
 
两个从节点的配置完全一样,与主节点不一样的是加了slaveof
redis-6001.conf , redis-6002.conf
port 6001
daemonize yes
dbfilename "dump-6001.rdb"
dir "/data/redis/data/"
slaveof 127.0.0.1 6000

3.启动服务
启动master
redis-server redis-6000.conf
启动slave
redis-server redis-6001.conf
redis-server redis-6002.conf


4. 确认主从关系
[root@localhost 6000]# redis-cli -h 127.0.0.1 -p 6000 info replication
# Replication
role:master
connected_slaves:2
......

[root@localhost 6000]# redis-cli -h 127.0.0.1 -p 6001 info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6000
......

5. 验证下 主从复制
master
[root@demo-1 redis]# redis-cli -p 6000
127.0.0.1:6000> set test redis
OK
127.0.0.1:6000> get test
"redis"

slave1
[root@demo-1 local]# redis-cli -p 6001
127.0.0.1:6001> get test
"redis"

slave2
[root@demo-1 ~]# redis-cli -p 6002
127.0.0.1:6002> get test
"redis"
127.0.0.1:6002> 

可以看到主机执行写命令,从机能同步主机的值,主从复制,读写分离就实现了。

6. 部署sentinel节点

3个sentinel节点的部署方法完全是一致的(端口不同),下面以sentinel-1节点的部署为例子
配置sentinel节点
redis-sentinel-26379.conf,redis-sentinel-26380.conf,redis-sentinel-26381.conf
port 26379
daemonize yes
logfile "26379.log"
dir "/data/redis/sent1/"
sentinel monitor mymaster 127.0.0.1 6000 2
sentinel down-after-milliseconds mymaster 30000

sentinel monitor mymaster 127.0.0.1 6000 2 
sentinel节点要监控127.0.0.1:6000这个master节点,2代表判断主节点失败至少需要2个sentinel节点同意,mymaster是主节点别名

7.启动服务
[root@localhost redis]# redis-sentinel sentine-26379.conf
[root@localhost redis]# redis-sentinel sentine-26380.conf
[root@localhost redis]# redis-sentinel sentine-26381.conf 

8.查看日志
18836:X 18 Apr 15:23:52.703 # Sentinel ID is 0767e28f6404076d6b46f34576f90b9efd65509b
18836:X 18 Apr 15:23:52.703 # +monitor master mymaster 127.0.0.1 6000 quorum 2
18836:X 18 Apr 15:23:59.943 * +sentinel sentinel bcf5dfc41b87b88425d8fef769fc5fc1d73ee89f 127.0.0.1 26380 @ mymaster 127.0.0.1 6000
18836:X 18 Apr 15:24:02.764 * +sentinel sentinel 5b03f4b845da7f68abc9c4353d2c4b1b2d6bf4c5 127.0.0.1 26381 @ mymaster 127.0.0.1 6000

9.确认
[root@localhost redis]# redis-cli -h 127.0.0.1 -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:6000,slaves=2,sentinels=3

[root@localhost redis]# ps -ef|grep redis
root 18271 1 0 14:53 ? 00:00:01 redis-server 127.0.0.1:6000
root 18278 1 0 14:53 ? 00:00:01 redis-server 127.0.0.1:6001
root 18285 1 0 14:53 ? 00:00:01 redis-server 127.0.0.1:6002
root 18649 18617 0 15:13 pts/0 00:00:00 vim redis-6000.conf
root 18836 1 0 15:23 ? 00:00:00 redis-sentinel *:26379 [sentinel]
root 18845 1 0 15:23 ? 00:00:00 redis-sentinel *:26380 [sentinel]
root 18853 1 0 15:24 ? 00:00:00 redis-sentinel *:26381 [sentinel]
root 18881 14071 0 15:25 pts/1 00:00:00 grep --color=auto redis

10.故障切换,kill master进程
[root@localhost 6000]# kill -9 18271
[root@localhost tmp]# tail -f 26379.log
18836:X 18 Apr 15:49:33.888 # +sdown master mymaster 127.0.0.1 6000
18836:X 18 Apr 15:49:34.005 # +new-epoch 1
18836:X 18 Apr 15:49:34.006 # +vote-for-leader 5b03f4b845da7f68abc9c4353d2c4b1b2d6bf4c5 1
18836:X 18 Apr 15:49:34.259 # +config-update-from sentinel 5b03f4b845da7f68abc9c4353d2c4b1b2d6bf4c5 127.0.0.1 26381 @ mymaster 127.0.0.1 6000
18836:X 18 Apr 15:49:34.259 # +switch-master mymaster 127.0.0.1 6000 127.0.0.1 6001
18836:X 18 Apr 15:49:34.259 * +slave slave 127.0.0.1:6002 127.0.0.1 6002 @ mymaster 127.0.0.1 6001#切换到6001了
18836:X 18 Apr 15:49:34.259 * +slave slave 127.0.0.1:6000 127.0.0.1 6000 @ mymaster 127.0.0.1 6001

master切换成了6001 ,当6000端口的这个服务重启的时候,他会变成6001端口服务的slave。
因为sentinel在切换master的时候,把对应的sentinel.conf和redis.conf文件的配置修改。

11.查看集群信息
[root@localhost 6000]# redis-cli -h 127.0.0.1 -p 6001 info replication
# Replication
role:master #可以看到6001已经是master了
connected_slaves:1
......
[root@localhost 6000]# redis-cli -h 127.0.0.1 -p 6002 info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6001
......

12.重新启动6000端口的原来的master看看效果如何

[root@localhost redis]# redis-server redis-6000.conf
18836:X 18 Apr 15:55:00.063 # -sdown slave 127.0.0.1:6000 127.0.0.1 6000 @ mymaster 127.0.0.1 6001
18836:X 18 Apr 15:55:10.024 * +convert-to-slave slave 127.0.0.1:6000 127.0.0.1 6000 @ mymaster 127.0.0.1 6001
可以看到6000启动之后变成slave了
[root@localhost redis]# redis-cli -h 127.0.0.1 -p 6000 info replication
# Replication
role:slave #6000启动之后变成slave
master_host:127.0.0.1
master_port:6001
......
[root@localhost redis]# redis-cli -h 127.0.0.1 -p 6001 info replication
# Replication
role:master
connected_slaves:2
......
[root@localhost redis]# redis-cli -h 127.0.0.1 -p 6002 info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6001
......

注意: 生产环境 redis sentinel所有节点应该分布在不同机器上,sentinel中的数据节点和普通的redis数据节点配置上没任何区别,只不过添加了一些sentinel节点对他们进行监控
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值