140. Redis集群之Sentinel(哨兵)

0. Sentinel介绍

哨兵(Sentinel) :是一个分布式系统, 可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossip protocols)来接收关于 Master 主服务器是否下线的信息,并使用投票协议(Agreement Protocols)来决定是否执行自动故障迁移,以及选择哪个 Slave 作为新的 Master。

每个哨兵(Sentinel)进程会向其它哨兵(Sentinel)、 Master、 Slave 定时发送消息,以确认对方是否”活”着,如果发现对方在指定配置时间(可配置的)内未得到回应,则暂时认为对方已掉线,也就是所谓的”主观认为宕机” , 主观是每个成员都具有的独自的而且可能相同也可能不同的意识,英文名称: Subjective Down,简称 SDOWN。

有主观宕机,肯定就有客观宕机。当“哨兵群”中的多数 Sentinel进程在对 Master 主服务器做出 SDOWN 的判断,并且通过 SENTINEL is-master-down-by-addr 命令互相交流之后,得出的 Master Server 下线判断,这种方式就是“客观宕机”, 客观是不依赖于某种意识而已经实际存在的一切事物, 英文名称是: Objectively Down, 简称 ODOWN。

通过一定的 vote算法,从剩下的 slave 从服务器节点中,选一台提升为 Master 服务器节点,然后自动修改相关配置,并开启故障转移( failover)。

Sentinel 机制可以解决 master 和 slave 角色的切换问题。

1. redis-sentinel(哨兵)

在这里插入图片描述

1、监控
2、自动选主,切换(6381 slaveof no one)
32号从库(6382)指向新主库(63814、应用透明 
5、自动处理故障节点

sentinel搭建过程
1.创建相关目录
mkdir /data/26380
cd /data/26380

2.编写配置文件
vim sentinel.conf
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 

3.启动:
[root@db01 26380]# redis-sentinel /data/26380/sentinel.conf  &>/tmp/sentinel.log &

4.检测端口:
[root@db01 ~]# lsof -i:26380
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
redis-sen 7829 root    4u  IPv6  74231      0t0  TCP *:26380 (LISTEN)
redis-sen 7829 root    5u  IPv4  74232      0t0  TCP *:26380 (LISTEN)
============================================================================
如果有问题:
1、重新准备12从环境
2kill掉sentinel进程
3、删除sentinel目录下的所有文件
4、重新搭建sentinel

2. 测试高可用

2.1 停主库测试:
[root@db01 ~]# redis-cli -p 6380 -a 123  shutdown

[root@db01 ~]# redis-cli -p 6381 -a 123 info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6382,state=online,offset=1069611,lag=1
master_repl_offset:1069611
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:21036
repl_backlog_histlen:1048576

2.2 启动源主库(6380),看状态。
[root@db01 ~]# redis-server /data/6380/redis.conf 

[root@db01 ~]# redis-cli -p 6381 -a 123 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6382,state=online,offset=1075878,lag=1
slave1:ip=127.0.0.1,port=6380,state=online,offset=1075878,lag=1
master_repl_offset:1076011
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:27436
repl_backlog_histlen:1048576

发布了148 篇原创文章 · 获赞 65 · 访问量 7596

猜你喜欢

转载自blog.csdn.net/chengyinwu/article/details/103914900