redis 哨兵

本文围绕Redis Sentinel展开,介绍其在Redis分布式中实现高可用的作用,即自动完成故障发现和转移并通知应用方。阐述了高可用原理,包括节点监控、下线标识及故障转移选举。还给出部署方法,如增加配置文件和两种启动方式,并对关键配置项进行了解析。

哨兵的作用

    在redis分布式中,当主节点出现故障时,redis sentinel能自动完成故障发现和故障转移,并通知应用方,从而实现高可用

高可用的原理

   每个sentinel节点会对数据节点和其他sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,它还会和其他sentinel节点进行“协商”,当大多数sentinel节点都认为主节点不可达时,他们会选举出一个sentinel节点来完成自动故障转移的工作,同时会将这个变化实时通知给redis应用方

部署sentinel

1.增加配置文件 redis-sentinel-26379.conf

port 26379
daemonize yes
logfile "26379.log"
dir /opt/soft/redis/data
sentinel monitor mymaster 127.0.01 6379 2
sentinel down-after-milliseconds my master 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

2.启动

启动的方法有两种

方法一

redis-sentinel redis-sentinel-26379.conf

方法二

redis-server redis-sentinel-26379.conf --sentinel

配置项解析

 sentinel monitor <master-name> <ip> <port> <quorum>

本配置说明sentinel节点要监控的是一个名字叫做<master-name>,ip地址和端口为<IP><PORT>的主节点,<QUORUM>代表要判定主节点最终不可达所需要的票数

sentinel down-after-millseconds <master-name> <times>

每个sentinel节点都要通过定期发送ping命令来判断redis数据节点和其余sentinal节点是否可达,如果超过了down-after-millseconds配置的时间且没有有效的恢复,则判定节点不可达。<times>单位是毫秒,注意的地方:down-after-millseconds虽然以<master-name>为参数,但实际上对sentinel节点,主节点,从节点的失败判定同时有效

sentinel parallel-syncs <master-name> <nums>

paralllel-syncs用来限制在一次故障转移之后,每次向新的主节点发起复制操作的从节点个数,如果这个参数配置的比较大,那么多个从节点会向新的主节点发起复制操作,尽管复制操作通常不会阻塞主节点,但是同时向主节点发起复制,必然会对主节点所在的机器造成一定的网络和磁盘io开销

sentinel failover-timeout <master-name> <times>

故障转移超时时间,作用于故障转移的各个阶段

sentinel auth-pass <master-name> <password>

如果sentinel监控的主节点配置了密码,sentinel auth-pass配置通过增加主节点的密码,防止sentinel节点对主节点无法监控

 

### Redis 哨兵模式配置与原理 #### 一、Redis 哨兵模式的原理 Redis 哨兵模式是一种用于实现 Redis 高可用性的解决方案。其核心功能在于通过一组哨兵进程来监控 Redis 主从实例的状态,并在主节点发生故障时自动执行故障转移操作,从而提升系统的可靠性和稳定性。 - **哨兵的作用** 哨兵节点负责实时监测 Redis 主从集群中的各个节点状态。当发现主节点不可用时,哨兵会协商并选举新的主节点,随后通知其他从节点更新配置以完成切换过程[^1]。 - **高可用性保障** 推荐至少部署三个哨兵节点以形成多数派共识机制(Quorum),这可以有效防止因单点失效而导致整个系统瘫痪的情况。这种设计不仅增强了系统的健壮性,还确保了决策的一致性和准确性。 #### 二、Redis 哨兵模式的配置方法 以下是基于典型场景下的 Redis 哨兵模式配置流程: 1. **准备环境** - 确保每台服务器上已安装 Redis 并具备运行多个实例的能力。 - 创建必要的目录结构以便存储不同端口对应的配置文件和数据文件。 2. **编写主从配置文件** 下面是一个简单的 `redis.conf` 文件模板,适用于作为主节点或从节点使用的实例: ```conf port 6379 bind 0.0.0.0 daemonize yes pidfile /var/run/redis_6379.pid logfile "/var/log/redis/redis.log" dir /data/redis/ ``` 3. **创建哨兵配置文件** 使用如下命令生成哨兵专用的配置文件: ```bash cp redis.conf sentinel.conf ``` 修改后的 `sentinel.conf` 示例内容可能类似于这样: ```conf port 26379 daemonize yes pidfile /var/run/redis-sentinel.pid logfile "/var/log/redis/sentinel.log" sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1 ``` 4. **启动服务** 启动 Redis 实例以及相应的哨兵进程可以通过以下方式完成: ```bash ./src/redis-server ./redis.conf --slaveof 127.0.0.1 6379 ./src/redis-sentinel ./sentinel.conf ``` 如果需要查看具体的日志输出,则可参考下面的操作指令获取更多信息: ```bash tail -f /path/to/sentinel.log ``` #### 三、注意事项 为了使 Redis 哨兵模式正常工作,请注意以下几个方面事项: - 至少设置三个以上的独立物理机器上的哨兵节点,避免网络分区带来的脑裂现象影响仲裁结果的有效性; - 调整参数如 `down-after-milliseconds`, `failover-timeout` 和 `parallel-syncs` 来适应实际业务需求,优化性能表现同时兼顾安全性考虑; ```python import redis from redis.sentinel import Sentinel # 连接到哨兵sentinel = Sentinel([('localhost', 26379)], socket_timeout=0.1) # 获取当前活跃 Master 的连接对象 master = sentinel.master_for('mymaster') print(master.ping()) # 测试连通性 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值