一、简介
针对 Redis 主从复制所产生的主节点宕机导致整个服务无法操作,需要人工手动修改配置文件选择主节点问题,Redis 哨兵模式则是一种改进方式。
我们可以运行多个哨兵,每个哨兵会向其他哨兵,节点定时发送消息,确认对方是否活着,而且哨兵的作用如下:
1、管理 Redis 服务器,检查 Master 和 Slave 是否正常。
2、Redis 节点出现问题,哨兵会向管理者发送通知。
3、Master 不能工作时,会将其中一个 Slave 选举为 Master。
他的原理如下:
1、每隔一定时间监听Master节点,获取整个Redis集群节点列表。
2、多个哨兵监听一个Master,多个哨兵之间通过发布订阅在彼此之间建立连接。
3、单个哨兵会向 Master 节点发送 Ping 命令,如果认为该 Master 节点为不可用,就会让其他哨兵进行确认 Master 是否可用,当配置个数的数量的哨兵都认为 Master 不可应,则重新选择 Master。
![](https://i-blog.csdnimg.cn/blog_migrate/9b5322a6fb0eafe848f3dfe23ed56c92.png)
二、示例
下面,将介绍如何搭建哨兵模式,首先,我们需要准备三台服务器,在我们所安装的 Redis 目录下,有一个sentinel.conf
配置文件,这个文件可以配置哨兵模式。
1、启动 Redis 节点
首先需要修改 从节点的 Redis 的配置文件,确认主从节点,主节点不用修改。
vim redis.conf
主节点密码
masterauth 123456
主节点地址
slaveof 10*.1*.*.11 6379
修改完成后启动所有 Redis 节点
/usr/local/bin/redis-server ./redis.conf
2、启动哨兵节点
我们可以先把这个配置文件复制到我们启动哨兵的文件夹,这个文件夹一般可以是启动 Redis 的文件夹,统一管理
cp /usr/local/redis/redis-5.0.7/sentinel.conf ./
需要修改的配置文件如下,三台节点一起修改
vim sentinel.conf
后台运行模式
daemonize yes
Redis 主节点的地址,这里的 2 是当 2 个哨兵认为主节点不可用,就重新选举
sentinel monitor mymaster 123.*.*.1 6379 2
Redis 主节点的面
sentinel auth-pass mymaster 123456
启动所有哨兵
/usr/local/bin/redis-sentinel sentinel.conf
启动完成后我们可以查看所有服务器的结果
3、测试结果
我们可以随机进入一台 Redis 节点查看他的角色及一些基本信息
/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 -a '123456'
info replication
我们可以把主节点停掉,看看效果,我们可以发现当前节点已经变成了主节点
我们可以再次尝试启动刚才被我们停掉的节点,可以发现他已经自动变成了从节点,我们可以查看配置文件 redis.conf,会发现 Redis 已经帮我们修改了配置文件里面的节点配置信息。
注意
1、需要在 redis.conf 配置 Redis 节点的密码,否则停掉的节点再次启动,无法同步当前主节点的数据。
2、如果之前运行过哨兵模式,需要注意sentinel.conf 里面的配置是否有系统自动配置的主节点,否则会造成干扰,哨兵模式无法成功部署,解决方式是在新的 sentinel.conf 配置文件上从新配置
3、必须先运行 Redis 节点再运行哨兵
masterauth <master-password>
三、思考
哨兵模式解决了主从复制 Master 节点宕机后无法写的问题,但是缺点在于主节点和从节点数据都是一样的,数据冗余,而且只能允许有一个主节点,中心化。而 Redis 集群能解决这个问题。
—— 完
ABOUT
公众号:【星尘Pro】
github:https://github.com/huangliangyun