Redis--哨兵模式
Redis哨兵模式介绍
在主从模式的系统中,从数据库在整个系统中起到了数据冗余备份和读写分离的作用,但是当数据库遇到异常中断服务后,只能通过手动的方式选择一个从数据库来升级为主数据库,这种方式很麻烦需要人工介入,这时通过哨兵模式可以实现自动化的系统监控和故障恢复。
哨兵模式的作用:
- 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
- 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件、切换主机。
- 在一主多从的Redis系统中,可以使用多个哨兵进行监控任务以保证系统的问题。
故障切换(failover):假设主节点宕机后,哨兵1先发现了这一结果,系统并不会立刻进行故障切换。仅仅是哨兵1主观的认为主节点不可用,这个现象成为主观下线。当后面的哨兵也检测到主节点不可用,并且数量达到一定值时(quorum),那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从节点指向主节点,这个过程称为客观下线。
主观下线:哨兵之间会互相监测运行状态,并且会交换一下节点监测的状态,同时哨兵也会监测主从节点的状态。如果检测到某一个节点没有正常回复,并且距离上次正常回复的时间超过了某个阈值,那么就认为该节点为主观下线。
客观下线:这个时候后面的哨兵也会来监测该节点是不是真的主观下线,如果有足够多数量的哨兵都认为它确实主观下线了(quorum),那么它就会被标记为客观下线,这个时候哨兵会找下线节点的从节点,然后与其他哨兵协商出一个从节点做主节点,并将剩余的从节点指向新的主节点。
Redis哨兵模式搭建
配置环境
Redis 节点:10.224.192.206:8001(master)、10.224.192.209:8002、10.224.192.210:8003
sentinel节点:10.224.192.206、10.224.192.209、10.224.192.210
Redis配置
redis配置:
bind 0.0.0.0 #允许所有网络访问
port 8001 #redis端口
daemonize yes #后台运行
pidfile "/home/redis/data1/redis_8001.pid"
loglevel verbose #日志等级
logfile "/home/redis/data1/redis.log"
redis slave额外配置:
slaveof master-IP master-port #slave同步master的IP和port
slave-read-only yes #只读模式
slave-priority 100 #默认为100,master宕机后slave变成master的优先级
自从 Redis 2.6 之后, slave 支持只读模式且默认开启。redis.conf 文件中的 slave-read-only 变量控制这个行为,且可以在运行时使用 来随时开启或者关闭。只读模式下的 slave 将会拒绝所有写入命令,因此实践中不可能由于某种出错而将数据写入 slave 。DEBUG 或者 CONFIG 这样的管理员命令仍在启用。在 redis.conf 文件中使用 rename-command 指令可以禁用上述管理员命令以提高只读实例的安全性。
sentinel配置
配置文件 | 详解 |
---|---|
protected-mode no | 禁止保护模式 |
port 26379 | 指定端口号信息 |
daemonize yes | 以守护进程方式打开(后台运行) |
pidfile "/home/redis/data1/redis-sentinel.pid" | 指定pid文件存放位置 |
logfile "/home/redis/data1/sentinel.log" | 指定日志文件存放位置 |
sentinel monitor master-name IP port quorum | 监听的redis-master名字、IP、port、多少个哨兵认为master宕机才能切换 |
启动哨兵服务进程:
[root@app2 src]# ./redis-server ../data1/sentinel.conf --sentinel
进程日志信息:
###启动哨兵进程初始化日志(版本、服务器、pid、端口等信息)
16278:X 10 Oct 2020 02:14:23.788 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
16278:X 10 Oct 2020 02:14:23.788 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=16278, just started
16278:X 10 Oct 2020 02:14:23.788 # Configuration loaded
16279:X 10 Oct 2020 02:14:23.789 * Increased maximum number of open files to 10032 (it was originally set to 1024).
16279:X 10 Oct 2020 02:14:23.791 # Not listening to IPv6: unsupproted
16279:X 10 Oct 2020 02:14:23.793 * Running mode=sentinel, port=26379.
16279:X 10 Oct 2020 02:14:23.803 # Sentinel ID is 2f05e17d209bc3ae52d4cf21305fa238d1f74385
###监控的master服务器进程和slave服务器进程
16279:X 10 Oct 2020 02:14:23.803 # +monitor master mymaster 10.224.192.206 8001 quorum 2
16279:X 10 Oct 2020 02:14:23.804 * +slave slave 10.224.192.209:8002 10.224.192.209 8002 @ mymaster 10.224.192.206 8001
16279:X 10 Oct 2020 02:14:23.806 * +slave slave 10.224.192.210:8003 10.224.192.210 8003 @ mymaster 10.224.192.206 8001
###另外两个一起监控master的哨兵进程
16279:X 10 Oct 2020 02:14:24.046 * +sentinel sentinel 261369717151e09aaa58e116150f21694cdc7c5b 10.224.192.210 26381 @ mymaster 10.224.192.206 8001
16279:X 10 Oct 2020 02:14:24.152 * +sentinel sentinel b35dc58cc66ab5e7a98f99274dcb1556932c874f 10.224.192.209 26380 @ mymaster 10.224.192.206 8001
###将master服务器进程down,哨兵经过投票推选10.224.192.210 8003作为新的master
16279:X 10 Oct 2020 02:16:29.680 # +sdown master mymaster 10.224.192.206 8001
16279:X 10 Oct 2020 02:16:29.743 # +odown master mymaster 10.224.192.206 8001 #quorum 2/2
16279:X 10 Oct 2020 02:16:29.743 # +new-epoch 1
16279:X 10 Oct 2020 02:16:29.743 # +try-failover master mymaster 10.224.192.206 8001
16279:X 10 Oct 2020 02:16:29.745 # +vote-for-leader 2f05e17d209bc3ae52d4cf21305fa238d1f74385 1
16279:X 10 Oct 2020 02:16:29.748 # 261369717151e09aaa58e116150f21694cdc7c5b voted for 2f05e17d209bc3ae52d4cf21305fa238d1f74385 1
16279:X 10 Oct 2020 02:16:29.749 # b35dc58cc66ab5e7a98f99274dcb1556932c874f voted for 2f05e17d209bc3ae52d4cf21305fa238d1f74385 1
16279:X 10 Oct 2020 02:16:29.811 # +elected-leader master mymaster 10.224.192.206 8001
16279:X 10 Oct 2020 02:16:29.811 # +failover-state-select-slave master mymaster 10.224.192.206 8001
16279:X 10 Oct 2020 02:16:29.867 # +selected-slave slave 10.224.192.210:8003 10.224.192.210 8003 @ mymaster 10.224.192.206 8001
16279:X 10 Oct 2020 02:16:29.867 * +failover-state-send-slaveof-noone slave 10.224.192.210:8003 10.224.192.210 8003 @ mymaster 10.224.192.206 8001
16279:X 10 Oct 2020 02:16:29.967 * +failover-state-wait-promotion slave 10.224.192.210:8003 10.224.192.210 8003 @ mymaster 10.224.192.206 8001