redis哨兵模式的使用

实验规划

master节点:    10.0.0.81
slave1节点:    10.0.0.82
slave2节点:    10.0.0.83

requirepass:   123456
masterpass:    123456

搭建主从复制

安装redis

[root@centos81 ~]#dnf -y install redis

修改主节点配置

[root@centos81 ~]#vim /etc/redis.conf

bind 0.0.0.0
masterauth "123456"
requirepass "123456"

修改两个从节点配置

[root@centos82 ~]#vim /etc/redis.conf

bind 0.0.0.0
masterauth "123456"
requirepass "123456"
replicaof 10.0.0.81 6379

启动redis服务,查看各节点状态

[root@centos81 ~]#systemctl enable --now redis

# master节点
[root@centos81 ~]#redis-cli -a 123456 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.0.0.82,port=6379,state=online,offset=70,lag=0
slave1:ip=10.0.0.83,port=6379,state=online,offset=70,lag=1
master_replid:f923c2c31d83fde2b96794fbfe112e1a240d4103
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:70
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:70

# slave1节点
[root@centos82 ~]#redis-cli -a 123456 info replication
# Replication
role:slave
master_host:10.0.0.81
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:42
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:f923c2c31d83fde2b96794fbfe112e1a240d4103
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:42
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:15
repl_backlog_histlen:28

# slave2节点
[root@centos83 ~]#redis-cli -a 123456 info replication
# Replication
role:slave
master_host:10.0.0.81
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:2338
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:f923c2c31d83fde2b96794fbfe112e1a240d4103
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:2338
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2325
repl_backlog_histlen:14

搭建哨兵

修改各节点哨兵配置文件

[root@centos8 ~]#vim /etc/redis-sentinel.conf

# 修改以下两处即可

# mymaster是集群的名称,数字2的意思是当有2个哨兵认为master挂了,就要进行故障转移。一般设置为集群哨兵数量一半以上。 
sentinel monitor mymaster 10.0.0.81 6379 2

# 集群名称和密码  
sentinel auth-pass mymaster 123456

启动哨兵

[root@centos81 ~]#systemctl enable --now redis-sentinel.service
[root@centos82 ~]#systemctl enable --now redis-sentinel.service
[root@centos83 ~]#systemctl enable --now redis-sentinel.service

# 启动哨兵后,会自动在配置文件中生成myid
[root@centos82 ~]#grep myid /etc/redis-sentinel.conf
sentinel myid d35c5133b9cccc244cdc8da0f73f5126e98c1a17

# 查看下端口
[root@centos82 ~]#ss -nlt
State      Recv-Q     Send-Q         Local Address:Port          Peer Address:Port
LISTEN     0          128                  0.0.0.0:26379              0.0.0.0:*
LISTEN     0          128                  0.0.0.0:6379               0.0.0.0:*
LISTEN     0          128                  0.0.0.0:22                 0.0.0.0:*
LISTEN     0          128                     [::]:26379                 [::]:*
LISTEN     0          128                     [::]:22                    [::]:*

# 查看下日志
[root@centos82 ~]#tail -f /var/log/redis/sentinel.log
3546:X 26 Oct 2020 20:10:55.986 # Configuration loaded
3546:X 26 Oct 2020 20:10:55.986 * supervised by systemd, will signal readiness
3546:X 26 Oct 2020 20:10:55.986 * Running mode=sentinel, port=26379.
3546:X 26 Oct 2020 20:10:55.987 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
3546:X 26 Oct 2020 20:10:55.987 # Sentinel ID is d35c5133b9cccc244cdc8da0f73f5126e98c1a17
3546:X 26 Oct 2020 20:10:55.987 # +monitor master mymaster 10.0.0.81 6379 quorum 2
3546:X 26 Oct 2020 20:10:55.988 * +slave slave 10.0.0.82:6379 10.0.0.82 6379 @ mymaster 10.0.0.81 6379
3546:X 26 Oct 2020 20:10:55.988 * +slave slave 10.0.0.83:6379 10.0.0.83 6379 @ mymaster 10.0.0.81 6379
3546:X 26 Oct 2020 20:11:14.006 * +sentinel sentinel 79b37bb5b002862c3e22834c31798e317ddf4661 10.0.0.81 26379 @ mymaster 10.0.0.81 6379
3546:X 26 Oct 2020 20:11:15.887 * +sentinel sentinel b4e7faf60185093b418bd02a0a4c0b644253e2eb 10.0.0.82 26379 @ mymaster 10.0.0.81 6379

# 查看sentinel状态
[root@centos82 ~]#redis-cli -p 26379
127.0.0.1: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=10.0.0.81:6379,slaves=2,sentinels=3

测试故障转移

# 杀死master
[root@centos81 ~]#killall redis-server

# 查看log
[root@centos81 ~]#tail /var/log/redis/sentinel.log
1960:X 26 Oct 2020 20:18:41.351 # +sdown master mymaster 10.0.0.81 6379
1960:X 26 Oct 2020 20:18:41.432 # +new-epoch 1
1960:X 26 Oct 2020 20:18:41.433 # +vote-for-leader d35c5133b9cccc244cdc8da0f73f5126e98c1a17 1
1960:X 26 Oct 2020 20:18:42.440 # +odown master mymaster 10.0.0.81 6379 #quorum 3/2
1960:X 26 Oct 2020 20:18:42.440 # Next failover delay: I will not start a failover before Mon Oct 26 20:24:41 2020
1960:X 26 Oct 2020 20:18:42.561 # +config-update-from sentinel d35c5133b9cccc244cdc8da0f73f5126e98c1a17 10.0.0.81 26379 @ mymaster 10.0.0.81 6379
1960:X 26 Oct 2020 20:18:42.561 # +switch-master mymaster 10.0.0.81 6379 10.0.0.83 6379
1960:X 26 Oct 2020 20:18:42.561 * +slave slave 10.0.0.82:6379 10.0.0.82 6379 @ mymaster 10.0.0.83 6379
1960:X 26 Oct 2020 20:18:42.561 * +slave slave 10.0.0.81:6379 10.0.0.81 6379 @ mymaster 10.0.0.83 6379
1960:X 26 Oct 2020 20:18:45.582 # +sdown slave 10.0.0.81:6379 10.0.0.81 6379 @ mymaster 10.0.0.84 6379

# 故障转移成功后配置文件自动修改
[root@centos81 ~]#grep replicaof /etc/redis.conf
# Master-Replica replication. Use replicaof to make a Redis instance a copy of
# replicaof <masterip> <masterport>
replicaof 10.0.0.83 6379

[root@centos82 ~]#grep mymaster /etc/redis-sentinel.conf
# sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
sentinel monitor mymaster 10.0.0.83 6379 2

# 重新启动原来的master节点10.0.0.81
# 自动变为新master节点10.0.0.83的从节点
[root@centos81 ~]#systemctl start redis
[root@centos81 ~]#redis-cli -a 123456 info replication
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
# Replication
role:slave
master_host:10.0.0.83
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:1220288
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:243f5d53ed324410a7b089cc3339ddc2ff794b27
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1220288
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:171713
repl_backlog_histlen:1048576

以上

原文地址:https://www.cnblogs.com/wuvikr/p/13881654.html