Redis分布式集群--Redis哨兵(Sentinel)模式

Redis哨兵(Sentinel)模式

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式

Redis分布式集群--Redis哨兵(Sentinel)模式_第1张图片

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例

通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器

当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机

然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式

用文字描述一下故障切换(failover)的过程。假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的

搭建环境

一主(server1)二从(server2、server3)

具体流程

Redis主从复制

https://blog.csdn.net/zhangyukai9579/article/details/101624792

操作流程

server1–master

Redis主目录里拷贝sentinel.conf配置文件到 /etc/redis

vim /etc/redis/sentinel.conf

17 protected-mode no

关闭保护模式

84 sentinel monitor server1--master(ip) 2

2个sentinel认为master下线,就认为该master客观下线

启动failover并选举产生新的master

通常最后一个参数不能多于启动的sentinel实例数

113 sentinel down-after-milliseconds mymaster 10000

单位时间内连接不上认为主机离线,单位是ms

在server1上将配置好之后的sentinel.conf文件给server2–slave与server3–slave节点各传送一份

注意要在开启sentinel进程之前发送文件,否则文件内容会发生变化

redis-server --help

redis-server /etc/redis/sentinel.conf --sentinel

server1上开启sentinel进程

server2–slave

redis-server /etc/redis/sentinel.conf --sentinel

在server2上开启sentinel进程

server3–slave

redis-server /etc/redis/sentinel.conf --sentinel

在server3上开启sentinel进程

测试

真实主机

真机连接server1

redis-cli 

info

可以看到server1是master节点,server2和server3是slave节点

shutdown

shutdown掉server1的redis服务

ps -aux | grep redis 

查看进程,可以看到server1的redis-server进程已经关闭

server1的redis-sentinel进程依然正常运行,可以参加选举

server2–slave(master)

在server2上可以看到将master由server1切换为server2

真实主机

真机使用命令远程登陆server2

redis-cil -h server2

server2是master,server3是slave

server1–master(slave)

ps -aux | grep redis 

server1查看进程,redis-server进程没有开启

vim /etc/redis/6379.conf

server1作为slave节点,master节点是server2

replicaof server2 6379 

/etc/init.d/redis_6379.conf restart

重启server1上的redis服务

ps -aux | grep redis 

进程恢复

server2–slave(master)

redis-cli

info 

server2是master节点,server1和server3是slave节点

get test

"usename:leon | password:123456"

你可能感兴趣的:(Redis)