命令记不住

登陆

Redis 哨兵模式

Redis哨兵模式

Redis-sentinel(哨兵)

1.功能介绍
1.监控

自动选主,切换(6381 slaveof no one)

2.号从库(6382)指向新主库(6381)

应用透明

故障节点恢复后,自动重构

2. sentinel搭建过程

[root@db01 data]#mkdir /data/26380
[root@db01 data]#ls
26380  mysql  mysql-5.7.20  mysql-boost-5.7.20.tar.gz  redis  redis-3.2.12.tar.gz
[root@db02 data]#cd /data/26380
[root@db01 26380]#cat > sentinel.conf <<EOF
> port 26380
> dir "/data/26380"
> sentinel monitor mymaster 127.0.0.1 6380 1
> sentinel down-after-milliseconds mymaster 5000
> sentinel auth-pass mymaster 123
> EOF

2.1启动:

[root@db01 redis]#redis-sentinel /data/26380/sentinel.conf &
[1] 4790

2.2查看哨兵监控的主节点:

[root@db01 ~]#redis-cli -p 26380
127.0.0.1:26380> SENTINEL masters
1)  1) "name"
    2) "mymaster"
    3) "ip"
    4) "127.0.0.1"
    5) "port"
    6) "6380"
……

2.3停主库测试:

[root@db01 26380]#redis-cli -p 6380 -a 123
127.0.0.1:6380> SHUTDOWN
not connected> exit

[root@db01 26380]#netstat -tunlp | grep 638
tcp        0      0 0.0.0.0:26380           0.0.0.0:*               LISTEN      4921/redis-sentinel 
tcp        0      0 0.0.0.0:6381            0.0.0.0:*               LISTEN      4601/redis-server * 
tcp        0      0 0.0.0.0:6382            0.0.0.0:*               LISTEN      4607/redis-server * 
tcp6       0      0 :::26380                :::*                    LISTEN      4921/redis-sentinel 
tcp6       0      0 :::6381                 :::*                    LISTEN      4601/redis-server * 
tcp6       0      0 :::6382                 :::*                    LISTEN      4607/redis-server * 
[root@db01 26380]#4921:X 17 Apr 07:21:42.862 # +sdown master mymaster 127.0.0.1 6380
4921:X 17 Apr 07:21:42.862 # +odown master mymaster 127.0.0.1 6380 #quorum 1/1
4921:X 17 Apr 07:21:42.862 # +new-epoch 1
4921:X 17 Apr 07:21:42.862 # +try-failover master mymaster 127.0.0.1 6380
4921:X 17 Apr 07:21:42.865 # +vote-for-leader f393e689cc3061f14114a22e34eba03293644020 1
4921:X 17 Apr 07:21:42.865 # +elected-leader master mymaster 127.0.0.1 6380
4921:X 17 Apr 07:21:42.865 # +failover-state-select-slave master mymaster 127.0.0.1 6380
4921:X 17 Apr 07:21:42.924 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380
4921:X 17 Apr 07:21:42.924 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380
4921:X 17 Apr 07:21:43.026 * +failover-state-wait-promotion slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380
4921:X 17 Apr 07:21:43.904 # +promoted-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6380
4921:X 17 Apr 07:21:43.904 # +failover-state-reconf-slaves master mymaster 127.0.0.1 6380
4921:X 17 Apr 07:21:43.991 # +failover-end master mymaster 127.0.0.1 6380
4921:X 17 Apr 07:21:43.991 # +switch-master mymaster 127.0.0.1 6380 127.0.0.1 6381
4921:X 17 Apr 07:21:43.991 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
[root@db01 26380]#4921:X 17 Apr 07:21:49.002 # +sdown slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381

2.4查看哨兵监控的主节点:

[root@db01 ~]#redis-cli -p 26380
127.0.0.1:26380> SENTINEL masters
1)  1) "name"
    2) "mymaster"
    3) "ip"
    4) "127.0.0.1"
    5) "port"
    6) "6381"
……

2.5查看是否切换成功:

[root@db01 26380]# redis-cli -p 6381 -a 123
127.0.0.1:6381> info replication
# Replication
role:master
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

2.6启动源主库(6380)查看状态。

[root@db01 ~]#redis-server /data/6380/redis.conf
[root@db01 ~]#redis-cli -p 6380 -a 123
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6381
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:1648
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

2.7 Sentinel管理命令:

[root@db01 ~]#redis-cli -p 26380 
PING :返回 PONG 。
SENTINEL masters :列出所有被监视的主服务器
SENTINEL slaves <master name>
SENTINEL get-master-addr-by-name <master name> : 返回给定名字的主服务器的 IP 地址和端口号。
SENTINEL reset <pattern> : 重置所有名字和给定模式 pattern 相匹配的主服务器。
SENTINEL failover <master name> : 当主服务器失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移。
推荐阅读