“Redis Sentinel”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
 
(未显示同一用户的3个中间版本)
第19行: 第19行:
 
port 6379
 
port 6379
 
requirepass vn4sj5kbxdaG
 
requirepass vn4sj5kbxdaG
</syntaxhighlight>
+
masterauth "vn4sj5kbxdaG"
 +
</syntaxhighlight>master 配置文件中也加入 masterauth 是因为在故障转移之后,原 master 会变成 slave,再连接新 master 的时候需要提供密码,否则会无法进行数据同步
  
 
==== slave.conf ====
 
==== slave.conf ====
第27行: 第28行:
 
replicaof 127.0.0.1 6379
 
replicaof 127.0.0.1 6379
 
requirepass vn4sj5kbxdaG
 
requirepass vn4sj5kbxdaG
 +
masterauth "vn4sj5kbxdaG"
 
</syntaxhighlight>
 
</syntaxhighlight>
  
第115行: 第117行:
  
 
=== 启动 ===
 
=== 启动 ===
 +
 +
==== master ====
 +
<syntaxhighlight lang="powershell">
 +
F:\下载目录\Redis-x64-5.0.14.1>.\redis-server.exe .\config\sentinel\master.conf
 +
</syntaxhighlight>
 +
 +
==== slave ====
 
<syntaxhighlight lang="powershell">
 
<syntaxhighlight lang="powershell">
redis-server /path/to/sentinel.conf --sentinel
+
F:\下载目录\Redis-x64-5.0.14.1>.\redis-server.exe .\config\sentinel\slave.conf
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
==== sentinel0 ====
 +
<syntaxhighlight lang="powershell">
 +
F:\下载目录\Redis-x64-5.0.14.1>.\redis-server.exe .\config\sentinel\sentinel0.conf --sentinel
 +
</syntaxhighlight>
 +
 +
==== sentinel1 ====
 +
<syntaxhighlight lang="powershell">
 +
F:\下载目录\Redis-x64-5.0.14.1>.\redis-server.exe .\config\sentinel\sentinel1.conf --sentinel
 +
</syntaxhighlight>
 +
 +
==== sentinel2 ====
 +
<syntaxhighlight lang="powershell">
 +
F:\下载目录\Redis-x64-5.0.14.1>.\redis-server.exe .\config\sentinel\sentinel2.conf --sentinel
 +
</syntaxhighlight>
 +
 +
 +
 +
=== 思考 ===
 +
 +
==== sentinel 各个节点的配置文件中并没有配置其他 sentinel 节点,它们是怎么找到彼此的呢? ====
 +
应该也是通过 master
 +
 +
 +
=== 故障转移测试 ===
 +
 +
Ctrl + C 停止监听 6379 的 master,
 +
 +
观察 sentinel 控制台输出发现监听 6380 的原 slave 配提升成了 master,
  
 +
原 master 被降成了 slave,重启监听 6379 的原 master,观察控制台输出发现它以 standalone 模式启动后开始作为 slave 连接 master
  
  

2023年2月19日 (日) 10:15的最新版本

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
masterauth "vn4sj5kbxdaG"

master 配置文件中也加入 masterauth 是因为在故障转移之后,原 master 会变成 slave,再连接新 master 的时候需要提供密码,否则会无法进行数据同步

slave.conf

bind 127.0.0.1
port 6380
replicaof 127.0.0.1 6379
requirepass vn4sj5kbxdaG
masterauth "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


故障转移测试

Ctrl + C 停止监听 6379 的 master,

观察 sentinel 控制台输出发现监听 6380 的原 slave 配提升成了 master,

原 master 被降成了 slave,重启监听 6379 的原 master,观察控制台输出发现它以 standalone 模式启动后开始作为 slave 连接 master



参考

https://redis.io/docs/management/sentinel/

https://www.youtube.com/watch?v=GEg7s3i6Jak

https://github.com/marcel-dempers/docker-development-youtube-series/tree/7ef03d3865cd25dec9c105202cb80f75a7b2448d/storage/redis/clustering