Redis之哨兵模式

当我们搭建一个主从复制时,master宕机之后我们需要选取一个新的master,用于解决这个问题的策略就是哨兵模式

哨兵模式简介:

哨兵(sentinel)是一个分布式文件系统,用于对主从结构中的每一台服务器进行监控,当出现故障时通过投票机制选出新的master并将所有slave连接到新的master

哨兵的作用:

1.监控:①不断的检查master和slave是否正常运行

2.通知:当被监控的服务器出现了问题,向其它的哨兵和客户端发送通知

3.自动故障转移:断开slave和master的连接,投票选出一个新的master并将所有slave连接新的master,告知客户端新的服务器地址

注意:①哨兵在redis中也是一台服务器,只是不提供数据

           ②通常哨兵配置单数

启用哨兵模式:

1.配置一个1托2的主从结构

 在从节点的配置文件中配置master的ip和port,并以配置文件的形式启动从节点服务器

2. 配置3个哨兵服务器的配置文件,除了端口号不同其它配置项一致(此配置文件在redis解压目录中存在即sentinel.conf,将其复制不修改源文件)

①查看一下setinel.conf中的配置项

setinel monitor <master名称(自定义)> host port  2 :配置master的服务名称、ip和端口号、2是指:哨兵的数量,当超过一般的哨兵认为master已经不能正常工作了就让它下线,这也是为什么哨兵数量一般设置为奇数的原因,偶数的话很容易投票打平。

setinel down-after-milliseconds <master名称(要与monitor的名称一致)>  30000:单位是毫秒,这里默认设置是30秒,用于判断master挂掉的默认时间周期,也是主从切换启动的条件之一

parrallel-syncs <master名称>  1:指定同时进行主从复制slave数量

failover-timeout <master名称> 180000:默认时间单位是毫秒,这里默认设置是3分钟,指定故障出现时故障切换的超大超时时间,超过这个时间就认定故障切换失败

②配置哨兵配置文件并且清空data中的文件

 

 ③启动哨兵服务

redis-sentinel conf/sentinel-6379.conf
redis-sentinel conf/sentinel-6380.conf
redis-sentinel conf/sentinel-6381.conf

从日志中可以看出,本身我们是设置6379为master但是由于网络或者其它原因,在规定时间内没有应答,就让它下线了并且推选出新的master为6381

 

可以看出确实是这样 

哨兵的工作原理:

三个阶段:①监控②通知③故障转移

阶段一:监控阶段

·用于同步各个节点的状态信息

                ·获取各个sentinel的状态

                ·获取master的信息

                        ·master的属性

                                ·runid

                                ·role:master

                        ·各个slave的详细信息

                ·获取所有slave的状态(根据master中的slave信息)

                        ·slave属性

                                ·runid

                                ·role:slave

                                ·master_host、mast_port

                                ·offset

                                ·......

 

 阶段二:通知阶段

阶段三:故障转移阶段 

1.发现故障

 2.推选负责人(投票)

假如sentinel1和sentinel5要竞选故障处理的负责人,它两就同时向sentinel2发送选我的消息,谁的消息先到sentinel就投谁,其它以此类推,假如投票结果一样就比较竞选次数,假如竞选次数也一样就比较runid

 3.优选新master

·服务器列表中挑选master

        ·在线的

        ·响应慢的

        ·与原master断开时间久的

        ·优先原则

                ·优先级

                ·offset

                ·runid

·发送指令(sentinel)

        ·向新的master发送slaveof no one

        ·向其他slave发送slaveof 新master的ip port

        ·原master故障恢复后作为slave连接master

 

 

 

### Redis 哨兵模式配置 为了实现高可用性的 Redis 架构,哨兵模式通过多个哨兵节点来提供自动化的故障检测和转移功能。在实际应用中,建议至少部署三个哨兵节点以确保系统的健壮性和决策的可靠性[^2]。 #### 启动 Redis 节点 分别启动三台 Redis 节点可以使用如下命令: ```bash redis-server redis.conf ``` 因为是在 Redis 解压目录下执行此命令,因此 `redis.conf` 使用的是相对路径[^3]。 #### 查看集群状态 要查看当前集群的状态,可以通过以下命令获取有关复制的信息: ```bash INFO replication ``` 这有助于确认各个节点之间的同步情况以及主从关系是否正常建立。 ### Redis 哨兵模式工作原理 Redis 哨兵模式的核心在于其能够监控 Redis 服务的状态,并在出现故障时自动进行故障转移[^1]。具体来说,Sentinel 系统必须具备检测 Redis 主实例是否有问题的能力,并能在主实例发生故障时迅速作出反应[^5]。 - **监控**:每个 Sentinel 进程会定期向它所知的所有 Master 和 Slave 发送 PING 请求并等待回应;如果超过一定时间未收到有效回复,则认为该服务器不可达。 - **通知**:当某个 Master 出现问题后,Sentinel 可以发送消息给管理员或者应用程序开发者以便他们采取相应措施。 - **选举新Master**:一旦发现原 Master 不再可用,剩下的 Sentinels 将共同协商选出一个新的 Master 来接管原有角色的任务。 - **重新配置客户端连接信息**:更新所有 Client 对新的 Master 地址的认知,使它们能继续访问数据而不会中断业务流程。 ### 配置文件详解 `sentinel.conf` 文件是 Redis Sentinel 的核心配置文档,其中包含了定义 Sentinel 行为、指定被监视的主节点详情及设定故障切换策略等内容的关键参数说明[^4]。 例如,在配置文件中有这样的设置项用来指明需要监测的目标 master 名字及其 IP 地址端口号等基本信息: ```plaintext sentinel monitor mymaster 127.0.0.1 6379 2 ``` 这里表示名为 `mymaster` 的主库位于本地主机上监听着默认端口 6379 ,并且要求有两票以上的同意才能决定一次 failover 操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值