Redis 哨兵配置

环境配置:
vmvare_workstation
3个虚拟机ip如下:
s1 192.168.12.13 主服务器
s2 192.168.12.85 从服务器
s3 192.168.12.73 从服务器
操作系统 ubuntu 18.04 redis 版本 v4.0.9

安装redis 和 哨兵


sudo apt install redis
sudo apt install redis-sentinel

配置从服务器redis.conf

protected-mode no(默认是yes 所以主从都配置为no)
slaveof 192.168.12.13 6379
slave-read-only yes //从服务器只读
masterauth your_key_word

配置哨兵sentinel配置文件 sentinel.conf


sentinel monitor mymaster 192.168.12.13 6379 2
哨兵监控的主机信息,包括主机名、ip、端口,2代表法定人数quorum,如果进行了主备切换
这里会自动变为主服务器的ip
sentinel down-after-milliseconds mymaster 5000
哨兵认为redis实例失效的所需的毫秒数 我这里写5s方便我进行测试;默认是30s
sentinel failover-timeout mymaster 15000
哨兵故障转移的几个部骤的时间,默认是180s
sentinel auth-pass mymaster 20200410
设置master和slave的密码 一定要一致。
# sentinel notification-script mymaster /var/redis/notify.sh
# 指定sentinel检测到该监控的redis实例指向的实例异常时,调用的报警脚本。
该配置项可选,但是很常用。
# sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
# 当一个master由于failover而发生改变时,这个脚本将会被调用,
通知相关的客户端关于master地址已经发生改变的信息。

启动主从看一看

redis-cli 命令下 执行 info replication 查看情况

 

同样在从服务器上 启动redis 查看 连接情况
127.0.0.1:6379> info replication
# Replication role:slave master_host:192.168.12.13
master_port:6379
master_link_status:up
master_last_io_seconds_ago:3
master_sync_in_progress:0
slave_repl_offset:126
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:b5ff630371193a74cee2d775fa00b666e90969a9
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:126
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:126
测试一下是否真的主从同步了
在主服务器上 设置一个key

例如 set jack veryhandsome
在从服务器上查询一下
get jack veryhandome
bingo ~

启动哨兵
分别启动3台哨兵服务
redis-sentinel sentinel.conf sudo netstat -nultp |grep redis 可以看到redis的进程和哨兵进程
持续观察日志情况
sudo tail -f /var/log/redis/redis-sentinel.log

# oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo

# Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=35118, just started
# Configuration loaded * Running mode=sentinel, port=26379.
# WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. # Sentinel ID is 139c1451d62767bef18d6048a73acb6ca1b2a00d
# +monitor master mymaster 192.168.12.13 6379 quorum 2
* +slave slave 192.168.12.73:6379 192.168.12.73 6379 @ mymaster 192.168.12.13 6379
* +slave slave 192.168.12.85:6379 192.168.12.85 6379 @ mymaster 192.168.12.13 6379
* +sentinel sentinel 4e85c44b588ebfe8db830acce09d3d30b2e4a372 192.168.12.85 26379 @ mymaster 192.168.12.13 6379
* +sentinel sentinel cbac9471ab513b25cd07b9d5c75f54e28d66cf3c 192.168.12.73 26379 @ mymaster 192.168.12.13 6379
进行主从切换
模拟一台主服务器掉线
可以在redis-cli 里面shutdown,debug sleep 40 或者直接kill -9 杀掉redis-server的进程。这里我采用debug sleep 40
127.0.0.1:6379> debug sleep 40

在 日志文件(/var/log/redis/redis-sentinel.log )里可以看到选举的过程

领导者哨兵选举
1 73这台哨兵先投了自己一票
2 剩余2台也跟着投了73的票,超过法定人数(quorum),成为leader哨兵,由73这台哨主导进行主备切换。

选择合适的从节点作为主节点
# +elected-leader master mymaster 192.168.12.13 6379
# +failover-state-select-slave master mymaster 192.168.12.13 6379
# +selected-slave slave 192.168.12.85:6379 192.168.12.85 6379 @ mymaster 192.168.12.13 6379
开始将85转为主节点
* +failover-state-send-slaveof-noone slave 192.168.12.85:6379 192.168.12.85 6379 @ mymaster 192.168.12.13 6379
* +failover-state-wait-promotion slave 192.168.12.85:6379 192.168.12.85 6379 @ mymaster 192.168.12.13 6379
# +promoted-slave slave 192.168.12.85:6379 192.168.12.85 6379 @ mymaster 192.168.12.13 6379
# +failover-state-reconf-slaves master mymaster 192.168.12.13 6379
leader哨兵会告诉其他从服务器,去复制新的主服务器
* +slave-reconf-sent slave 192.168.12.73:6379 192.168.12.73 6379 @ mymaster 192.168.12.13 6379
* +slave-reconf-inprog slave 192.168.12.73:6379 192.168.12.73 6379 @ mymaster 192.168.12.13 6379
* +slave-reconf-done slave 192.168.12.73:6379 192.168.12.73 6379 @ mymaster 192.168.12.13 6379
# -odown master mymaster 192.168.12.13 6379 // 此时13又上线了
# +failover-end master mymaster 192.168.12.13 6379
把从新上线13转为新主节点85的从服务器
#+switch-master mymaster 192.168.12.13 6379 192.168.12.85 6379
#+slave slave 192.168.12.73:6379 192.168.12.73 6379 @ mymaster 192.168.12.85 6379
* +slave slave 192.168.12.13:6379 192.168.12.13 6379 @ mymaster 192.168.12.85 6379
# +sdown slave 192.168.12.13:6379 192.168.12.13 6379 @ mymaster 192.168.12.85 6379
# -sdown slave 192.168.12.13:6379 192.168.12.13 6379 @ mymaster 192.168.12.85 6379
* +convert-to-slave slave 192.168.12.13:6379 192.168.12.13 6379 @ mymaster 192.168.12.85 6379

这时候去85服务器上 执行info replication 查看

而192.168.12.13上 变为了role:slave
# Replication
role:slave
master_host:192.168.12.85
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:49764446
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:810842080156a1591aa984c90fe01250d4e1b5ef
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:49764446
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:49376480
repl_backlog_histlen:387967

哨兵模式常用命令
127.0.0.1:26379> INFO
# 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=192.168.12.85:6379,slaves=2,sentinels=3
127.0.0.1:26379>sentinel masters 列出给定主服务器
127.0.0.1:26379>sentinel slaves mymaster (主服务器名字)列出所有从服务器
127.0.0.1:26379> sentinel sentinels mymaster 查看其它哨兵信息

遇到的问题
1 master_link_status:down 这个可能是bind的ip不对 具体看这个
2 Next failover delay: I will not start a failover before
我这里是主服务器的protected-mode 没有设置为no,如果不设置默认是yes
requirepass设置了 masterauth 也要设置。
可能会用到的一些命令
查看是否启动了
sudo netstat -nultp |grep redis
杀掉redis相关进程 sh是执行代码
sudo netstat -nultp |grep redis|awk '{print $7}'|cut -d "/" -f 1|awk '{print "sudo kill -9 " $1}'|sh
启动redis和哨兵服务
sudo redis-server redis.conf && sudo redis-sentinel sentinel.conf
参考链接:

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注