Redis在windows下的哨兵配置(二)

2018-09-28  本文已影响0人  丶兔小胖

1. 背景

1.1 主从复制的问题

Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用:

但是问题来了:

2. 提出问题

第一个问题,我们接下来讲的Sentinel就可以解决。而后两个问题,Redis也给出了方案Redis Cluster。

3. 解决问题

3.1 Redis Sentinel的高可用

Redis Sentinel是一个分布式架构,包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当发现节点不可达时,会对节点做下线标识。

如果被标识的是主节点,他还会选择和其他Sentinel节点进行“协商”,当大多数的Sentinel节点都认为主节点不可达时,他们会选举出一个Sentinel节点来完成自动故障转移工作,同时将这个变化通知给Redis应用方。

整个过程完全自动,不需要人工介入,所以可以很好解决Redis的高可用问题。

接下来我们就通过部署一个Redis Sentinel实例来了解整体框架。

4. 解决问题

4.1 安装和基本配置

Redis集群的主从配置,里面有安装和基本配置,所以这里不做介绍,不懂的请查看:Redis在Windows下的主从配置(一)

4.2 Sentinel配置

新建sentinel.conf配置内容如下

# 这个是Redis6379中sentinel.conf的配置内容,其他文件同理新增然后改一下端口即可,26380,和 26381。
#当前Sentinel服务运行的端口
port 26379  
# 哨兵监听的主服务器 
sentinel monitor mymaster 127.0.0.1 6379 2
# 3s内mymaster无响应,则认为mymaster宕机了
sentinel down-after-milliseconds mymaster 3000
#如果10秒后,mysater仍没启动过来,则启动failover  
sentinel failover-timeout mymaster 10000  
# 执行故障转移时, 最多有1个从服务器同时对新的主服务器进行同步
sentinel parallel-syncs mymaster 1

配置文件只需要配置master的信息就好啦,不用配置slave的信息,因为slave能够被自动检测到(master节点中有关于slave的消息)。

5. 测试

5.1 编写脚本测试
@echo off
redis-server.exe  sentinel.conf --sentinel
@pause

先启动主从,再启动哨兵
查看主服务器6379(Master)信息:

RDM Redis Console
Connecting...
已连接。
master6379:0>info replication
"# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=59713,lag=1
slave1:ip=127.0.0.1,port=6381,state=online,offset=59713,lag=1
master_repl_offset:59846
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:59845
"
master6379:0>

查看主从服务器6380(Slave)信息(从6381同理):

RDM Redis Console
Connecting...
已连接。
slave6380:0>info replication
"# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:69121
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
"
slave6380:0>
5.2 Redis-Sentinel高可用场景测试
5.2.1 主服务器master宕机
RDM Redis Console
Connecting...
已连接。
master6379:0>shutdown
连接错误:Command execution timeout
master6379:0>

查看观察选举新的master的过程和显示了failover的过程,整个日志信息还是比较完整的。最后选举了6380为主服务器 master切换到了6380

[6544] 28 Sep 14:49:53.269 # Sentinel ID is 9cc7765f8e8a048426ff585d2a477dbf889a862b
[6544] 28 Sep 14:49:53.270 # +monitor master mymaster 127.0.0.1 6379 quorum 2
[6544] 28 Sep 14:49:53.272 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
[6544] 28 Sep 14:49:53.274 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
[6544] 28 Sep 14:49:57.848 * +sentinel sentinel 6c21975f688efe9ceb853f0d063bc539f1b4bec1 127.0.0.1 26380 @ mymaster 127.0.0.1 6379
[6544] 28 Sep 14:50:01.905 * +sentinel sentinel 24ebbf41c727de4cb67a1af3ac55afd37aca3526 127.0.0.1 26381 @ mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:01.942 # +sdown master mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:02.008 # +odown master mymaster 127.0.0.1 6379 #quorum 2/2
[6544] 28 Sep 14:51:02.008 # +new-epoch 1
[6544] 28 Sep 14:51:02.009 # +try-failover master mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:02.011 # +vote-for-leader 9cc7765f8e8a048426ff585d2a477dbf889a862b 1
[6544] 28 Sep 14:51:02.019 # 6c21975f688efe9ceb853f0d063bc539f1b4bec1 voted for 9cc7765f8e8a048426ff585d2a477dbf889a862b 1
[6544] 28 Sep 14:51:02.021 # 24ebbf41c727de4cb67a1af3ac55afd37aca3526 voted for 9cc7765f8e8a048426ff585d2a477dbf889a862b 1
[6544] 28 Sep 14:51:02.104 # +elected-leader master mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:02.104 # +failover-state-select-slave master mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:02.177 # +selected-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:02.177 * +failover-state-send-slaveof-noone slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:02.255 * +failover-state-wait-promotion slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:03.043 # +promoted-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:03.045 # +failover-state-reconf-slaves master mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:03.097 * +slave-reconf-sent slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:04.099 * +slave-reconf-inprog slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:04.100 * +slave-reconf-done slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:04.170 # -odown master mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:04.170 # +failover-end master mymaster 127.0.0.1 6379
[6544] 28 Sep 14:51:04.171 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380
[6544] 28 Sep 14:51:04.175 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380
[6544] 28 Sep 14:51:04.175 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380
[6544] 28 Sep 14:51:07.211 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6380

连接到6380查看已经切换过来

slave6380:0>info replication
"# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6381,state=online,offset=25742,lag=0
master_repl_offset:25875
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:25874
"
slave6380:0>
5.2.2 之前故障的6379 master重新启动

启动6379服务,发现6379成为6380的从服务器!

RDM Redis Console
Connecting...
已连接。
master6379:0>info replication
"# Replication
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:79211
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
"
master6379:0>
5.2.2 从服务器Slave宕机和重启(自行测试)

Redis Sentinel 参考资料

欢迎关注我的微信公众号:


Abbot的小窝
上一篇下一篇

猜你喜欢

热点阅读