美文网首页
Redis在windows下的哨兵配置(二)

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

作者: 丶兔小胖 | 来源:发表于2018-09-28 15:05 被阅读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的小窝

    相关文章

      网友评论

          本文标题:Redis在windows下的哨兵配置(二)

          本文链接:https://www.haomeiwen.com/subject/smcpoftx.html