哨兵用于实现redis集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作
参考主从配置先搭建一主二从模式
还是采用A B C D四个窗口,来配置
D:创建哨兵配置文件,并启动哨兵进程
[root@localhost bin]# cd redisConfig/ 进入配置文件夹
[root@localhost redisConfig]# vi sentinel.conf 创建名字为sentinel.conf的文件
文件内容为:
sentinel monitor mymaster 127.0.0.1 6379 1
解释:sentinel monitor 主节点名字[随便起的] 主节点IP 主节点端口 哨兵投票的票数
哨兵投票宕机是否确认死亡后决定故障转移的票数
[root@localhost redisConfig]# ll
总用量 260
-rw-r--r--. 1 root root 63102 4月 24 19:39 redis-6379.conf
-rw-r--r--. 1 root root 63102 4月 24 19:54 redis-6380.conf
-rw-r--r--. 1 root root 63102 4月 24 19:56 redis-6381.conf
-rw-r--r--. 1 root root 63089 4月 17 22:02 redis.conf
-rw-r--r--. 1 root root 43 4月 24 23:17 sentinel.conf
[root@localhost redisConfig]#
启动:
[root@localhost bin]# redis-sentinel redisConfig/sentinel.conf 启动命令
9625:X 24 Apr 2021 23:25:06.639 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
9625:X 24 Apr 2021 23:25:06.639 # Redis version=5.0.12, bits=64, commit=00000000, modified=0, pid=9625, just started
9625:X 24 Apr 2021 23:25:06.639 # Configuration loaded
9625:X 24 Apr 2021 23:25:06.640 * Increased maximum number of open files to 10032 (it was originally set to 1024).
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.12 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in sentinel mode 运行一个哨兵
|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379 端口号
| `-._ `._ / _.-' | PID: 9625 pid
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
9625:X 24 Apr 2021 23:25:06.641 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
9625:X 24 Apr 2021 23:25:06.643 # Sentinel ID is bcedd6d917bb5ac16196b743632b8b7aa30c90ba
9625:X 24 Apr 2021 23:25:06.643 # +monitor master mymaster 127.0.0.1 6379 quorum 1 主机为6379
9625:X 24 Apr 2021 23:25:06.644 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379 丛机为6380
9625:X 24 Apr 2021 23:25:06.645 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379 从机为 6381
测试,A将6379宕机,也就是关闭
等待一会看看哨兵的控制台
master宕机了
9625:X 24 Apr 2021 23:28:17.467 # +sdown master mymaster 127.0.0.1 6379
哨兵1票通过
9625:X 24 Apr 2021 23:28:17.467 # +odown master mymaster 127.0.0.1 6379 #quorum 1/1
9625:X 24 Apr 2021 23:28:17.467 # +new-epoch 1
开始进行故障转移
9625:X 24 Apr 2021 23:28:17.467 # +try-failover master mymaster 127.0.0.1 6379
9625:X 24 Apr 2021 23:28:17.476 # +vote-for-leader bcedd6d917bb5ac16196b743632b8b7aa30c90ba 1
9625:X 24 Apr 2021 23:28:17.476 # +elected-leader master mymaster 127.0.0.1 6379
9625:X 24 Apr 2021 23:28:17.476 # +failover-state-select-slave master mymaster 127.0.0.1 6379
选择81为提升Master的节点
9625:X 24 Apr 2021 23:28:17.529 # +selected-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
开始执行故障转移 81 执行 slaveof no one 提升为master
9625:X 24 Apr 2021 23:28:17.529 * +failover-state-send-slaveof-noone slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
9625:X 24 Apr 2021 23:28:17.584 * +failover-state-wait-promotion slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
9625:X 24 Apr 2021 23:28:18.154 # +promoted-slave slave 127.0.0.1:6381 127.0.0.1 6381 @ mymaster 127.0.0.1 6379
9625:X 24 Apr 2021 23:28:18.154 # +failover-state-reconf-slaves master mymaster 127.0.0.1 6379
9625:X 24 Apr 2021 23:28:18.202 * +slave-reconf-sent slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
9625:X 24 Apr 2021 23:28:19.170 * +slave-reconf-inprog slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
9625:X 24 Apr 2021 23:28:19.170 * +slave-reconf-done slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6379
9625:X 24 Apr 2021 23:28:19.232 # +failover-end master mymaster 127.0.0.1 6379
切换master 从79->81
9625:X 24 Apr 2021 23:28:19.232 # +switch-master mymaster 127.0.0.1 6379 127.0.0.1 6381
将80 的master 设置 为81
9625:X 24 Apr 2021 23:28:19.232 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ mymaster 127.0.0.1 6381
将79 的master 设置为81
9625:X 24 Apr 2021 23:28:19.232 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
9625:X 24 Apr 2021 23:28:49.237 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
控制台输出完成后查看80 和 81
B:查看80
master已经切换成为81
C:查看81
已经提升成为master,并且有一个子节点80
A:重新启动79
默认为主节点,没有从节点,等待一会等哨兵扫描到
将6379 转化为slave,并将其master设置为 6381
9687:X 24 Apr 2021 23:42:32.157 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
A:再次查看
切换成功,单哨兵 完成
关闭刚才的单哨兵控制台
D:ctrl+c
网址:https://www.cnblogs.com/joeymary/p/11492791.html
多哨兵就不写了,原理和单哨兵一样,就是多人选举决定是否宕机和slave升级票选,下面是配置参数
#sentinel 配置
#端口
port 26379
#目录
dir /tmp
#日志文件
logfile /var/log/redis/redis-sentinel.log
#是否在后台执行,yes:后台运行;no:不是后台运行
daemonize yes
#是否开启保护模式,默认开启。开启后,只能根据配置的bind地址和密码进行访问。
protected-mode no
#主节点信息,格式:sentinel <master-name> <ip> <redis-port> <quorum>;
#<master-name> 自定义主节点名称;
#<ip> <redis-port> 主节点的ip和端口;
#<quorum> 多少个主节点检测到主节点有问题就进行故障转移
sentinel monitor mymaster 127.0.0.1 6379 2
#sentinel与master的心跳时间(毫秒),默认30秒。
sentinel down-after-milliseconds mymaster 30000
#故障转移时,最多可以有多少个slave同时对新的master进行数据同步,该值越小,完成故障转移的时间越长,但可用slave数量越多,该值越大,越多slave因为replication而不可用。建议设置为1。
sentinel parallel-syncs mymaster 1
#故障转移超时时间(毫秒),默认180秒。
sentinel failover-timeout mymaster 180000
#master和slaves密码。
#sentinel auth-pass mymaster password
#当sentinel有警告级别的事件发生时执行(也有的资料说failover时触发)的脚本。
#sentinel notification-script <master-name> <script-path>
#故障转移之后执行的脚本,并传递7个参数:<master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>。
#<master-name> 表示 master名字
#<role> 表示的是 每个redis实力的角色,如leader、observer
#<state> 表示状态
#<from-ip> 原来的redis master
#<from-port>
#<to-ip> 故障迁移后的redis master
#<to-port>
#sentinel client-reconfig-script <master-name> <script-path>
作者:彼岸舞
时间:2021\05\05
内容关于:Redis
本文属于作者原创,未经允许,禁止转发