Redis Sentinel
Redis Sentinel 在不使用 Redis Cluster 时为 Redis 提供高可用性。
简单来说,Redis Sentinel 负责监控 master 和 slave,并在 master 出问题的时候从 slave 中选举一个出来作为 master 对外提供访问
注意
因为涉及到选举机制,所以 Redis Sentinel 的实例至少要有3个
配置文件
master.conf
bind 127.0.0.1
port 6379
requirepass vn4sj5kbxdaG
slave.conf
bind 127.0.0.1
port 6380
replicaof 127.0.0.1 6379
requirepass vn4sj5kbxdaG
sentinel0.conf
port 5000
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
sentinel auth-pass mymaster vn4sj5kbxdaG
sentinel1.conf
port 5001
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
sentinel auth-pass mymaster vn4sj5kbxdaG
sentinel2.conf
port 5002
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
sentinel auth-pass mymaster vn4sj5kbxdaG
sentinel 配置项说明
sentinel monitor mymaster 127.0.0.1 6379 2
给 master 一个命名,2 是 quorum,是多个 Sentinel 中需要对 master 不可达(unreachable)状态达成一致意见的 Sentinel 个数
sentinel down-after-milliseconds mymaster 5000
The down-after-milliseconds value is 5000 milliseconds, that is 5 seconds,so masters will be detected as failing as soon as we don't receive any reply from our pings within this amount of time.
sentinel failover-timeout mymaster 60000
failover-timeout
用于指定当 Sentinel 主观下线一个 Redis master 时,Sentinel 需要等待多长时间来执行故障转移(failover)操作。这个时间间隔称为“故障转移超时时间”。
默认情况下,failover-timeout
的值是 30 秒,也就是说,如果 Sentinel 检测到 master 宕机,会等待 30 秒后执行故障转移。
在这个时间内,Sentinel 会继续监控 master 的状态,如果它重新启动并且 Sentinel 认为它可以正常工作,那么 Sentinel 将不会执行故障转移。
可以通过修改 failover-timeout
配置项的值来改变故障转移的超时时间。
例如,将 failover-timeout
的值设置为 60 秒,可以使 Sentinel 在 master 宕机后等待更长的时间再执行故障转移,这可以降低错误的故障转移率。
sentinel parallel-syncs mymaster 1
parallel-syncs
用于控制执行故障转移操作时,新的 master 同步数据的并发度。
在 Redis Sentinel 中,当一个 slave 被提升为新的 master 后,其他的 slave 需要同步新的 master 上的数据。
parallel-syncs
配置项用于控制同步操作的并发度,默认值是 1,表示同步操作是串行执行的,也就是一个一个地同步每个 slave。
可以将 parallel-syncs
的值设置为一个大于 1 的数字,以提高同步操作的并发度,从而加速同步操作。
但是需要注意的是,并发度越高,需要的网络带宽和系统资源也就越多,可能会对系统造成负担,因此需要根据具体的应用场景和硬件配置来选择合适的并发度。
需要注意的是,在 Redis Sentinel 3.2 版本之前,parallel-syncs
配置项的值对 slave 同步操作的并发度控制并不是很精确,而是会受到一些其他因素的影响。
在 Redis Sentinel 3.2 版本及之后的版本中,parallel-syncs
配置项的值才真正控制 slave 同步操作的并发度。
sentinel auth-pass mymaster vn4sj5kbxdaG
配置 sentinel 访问 master 的密码
启动
master
F:\下载目录\Redis-x64-5.0.14.1>.\redis-server.exe .\config\sentinel\master.conf
slave
F:\下载目录\Redis-x64-5.0.14.1>.\redis-server.exe .\config\sentinel\slave.conf
sentinel0
F:\下载目录\Redis-x64-5.0.14.1>.\redis-server.exe .\config\sentinel\sentinel0.conf --sentinel
sentinel1
F:\下载目录\Redis-x64-5.0.14.1>.\redis-server.exe .\config\sentinel\sentinel1.conf --sentinel
sentinel2
F:\下载目录\Redis-x64-5.0.14.1>.\redis-server.exe .\config\sentinel\sentinel2.conf --sentinel
思考
sentinel 各个节点的配置文件中并没有配置其他 sentinel 节点,它们是怎么找到彼此的呢?
应该也是通过 master
故障转移测试
参考
https://redis.io/docs/management/sentinel/