
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 > EOF2.1启动:
[root@db01 redis]#redis-sentinel /data/26380/sentinel.conf & [1] 47902.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 63812.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:02.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:02.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 意见的情况下, 强制开始一次自动故障迁移。