Files
rikako-note/中间件/redis/redis sentinel.md
2025-12-22 16:44:19 +08:00

84 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
- [redis sentinel](#redis-sentinel)
- [sentinel as a distributed system](#sentinel-as-a-distributed-system)
- [sentinel部署要点](#sentinel部署要点)
- [sentinel配置](#sentinel配置)
- [sentinel monitor](#sentinel-monitor)
- [其他sentinel选项](#其他sentinel选项)
- [down-after-milliseconds](#down-after-milliseconds)
- [parallel-syncs](#parallel-syncs)
# redis sentinel
## sentinel as a distributed system
redis sentinel是一个分布式系统其设计旨在多个sentinel进程协同工作。
redis sentinel的优势如下
- 当多个sentinel节点都一致认为master不再可访问时将会触发故障检测机制。该机制能够有效的降低false positive几率
- 即使并非所有sentinel进程都正常工作sentinel机制仍然能够正常工作确保整个sentinel机制拥有容错性
sentinels、redis实例、客户端共同构成了包含特定属性的更大分布式系统。
sentinels默认会监听26379端口 sentinels实例之间会通过该端口进行通信。如果该端口未开放那么sentinels之间将无法通信也无法协商一致failover将不会被执行。
### sentinel部署要点
- 对于一个具备鲁棒性的形同部署而言至少需要三个sentinels进程实例
- 三个sentinel实例应当被部署在独立故障的计算机/虚拟机中
- sentinel + redis 分布式系统并不保证在发生故障时,对系统的`acked writes`不被丢失。
- 因为redis的replication是异步的故而在发生故障时可能会丢失部分写入
- clients需要sentinel支持大部分client library中包含sentinel支持
### sentinel配置
redis包含一个名为`sentinel.conf`的文件用于配置sentinel典型的最小化配置如下
```redis
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5
```
只需要指定监控的主节点并为每个主节点指定不同的名称。无需手动指定replicas系统会自动发现replicas。sentinel将会自动使用replicas的额外信息来更新配置。
并且发生故障转移replica被提升为主节点时/新sentinel被发现时该配置文件也会被重写。
在上述配置文件示例中监控了两个redis实例集合每个redis实例集合都由一个master和一系列replicas组成。上述一个集合被称为`mymaster`,另一个集合被称为`resque`
### sentinel monitor
```
sentinel monitor <master-name> <ip> <port> <quorum>
```
上述是`sentinel monitor`的语法其用于告知redis监控名为`mymaster`的master实例并且其地址为`127.0.0.1`,端口号为`6379`quorum为2。
其中quorum的含义如下
- quorm为需要达成`master不可访问`这一共识的sentinels数量其将将master标记为失败并且在条件允许的情况下启动failover
- quorum仅用于检测失败。为了实际的执行故障转移sentinels中的一个需要被选举为leader这需要获取多数sentinel进程的投票后才能完成
例如假设有5个sentinel进程并且给定master的quorum为2那么
- 如果两个sentinels达成共识master不可访问那么其中一个sentinel将会尝试开启故障转移
- 只有当至少存在3个sentinels可访问时故障转移才会被授权并实际启动故障转移
在实际应用中,少数派分区将永远不会在故障时触发故障转移。
### 其他sentinel选项
其他sentinel选项的格式集合都如下
```
sentinel <option_name> <master_name> <option_value>
```
#### down-after-milliseconds
`down-after-milliseconds`选项代表sentinel认为实例宕机的时间在该段时间内实例应当是不可访问的
#### parallel-syncs
`parallel-syncs`代表故障转移时replicas同时被重新配置的数量。replicas在故障转移时会被重新配置并使用新的master节点。
-`parallel-syncs`参数指定的值被降低时,故障转移过程耗费的时间将会增加
- replication过程通常是非阻塞的但是其间有一个时间段会中止并从master批量加载数据。此时可能并不希望所有的replicas都不可用并从新master同步数据
配置参数可以在运行时被修改,
- 针对master的配置参数可以通过`SENTINEL SET`命令修改
- 全局配置参数可以通过`SENTINEL CONFIG SET`命令来进行修改