如果您仍然拥有我们在上一练习(3.2)中设置的主实例和副本实例 - 太棒了!我们将重复使用它们来创建我们的 Sentinel 设置。如果没有 - 请参考 说明 并再次完成它们。
完成后,您将拥有一个主 Redis 实例和一个副本实例。
要初始化 Redis Sentinel,您需要提供一个配置文件,所以让我们创建一个
$ touch sentinel1.conf
打开文件并粘贴以下设置
port 5000
sentinel monitor myprimary 127.0.0.1 6379 2
sentinel down-after-milliseconds myprimary 5000
sentinel failover-timeout myprimary 60000
sentinel auth-pass myprimary a_strong_password
术语分解
port
- Sentinel 应运行的端口sentinel monitor
- 监控特定 IP 地址和端口上的主服务器。拥有主服务器的地址,Sentinel 将能够自行发现所有副本。此行上的最后一个参数是法定人数所需的 Sentinel 数量。在我们的示例中 - 该数字是 2。sentinel down-after-milliseconds
- 实例不可达的时间(以毫秒为单位),以将其视为已关闭sentinel failover-timeout
- 如果一个 Sentinel 投票给另一个 Sentinel 进行给定主服务器的故障转移,它将等待这么长时间才能再次尝试故障转移同一个主服务器。sentinel auth-pass
- 为了使 Sentinel 在配置了 requirepass 时连接到 Redis 服务器实例,Sentinel 配置必须包含 sentinel auth-pass 指令。将此文件再复制两份 - sentinel2.conf
和 sentinel3.conf
并编辑它们,以便将 PORT 配置分别设置为 5001 和 5002。
让我们在三个不同的终端选项卡中初始化三个 Sentinel
# Tab 1
$ redis-server ./sentinel1.conf --sentinel
# Tab 2
$ redis-server ./sentinel2.conf --sentinel
# Tab3
$ redis-server ./sentinel3.conf --sentinel
如果您现在连接到其中一个 Sentinel,您将能够运行许多在 Redis 实例上运行时会出错的新命令。例如
# Provides information about the Primary
SENTINEL master myprimary
# Gives you information about the replicas connected to the Primary
SENTINEL replicas myprimary
# Provides information on the other Sentinels
SENTINEL sentinels myprimary
# Provides the IP address of the current Primary
SENTINEL get-master-addr-by-name myprimary
如果我们现在通过按 Ctrl+C 或运行 redis-cli -p 6379 DEBUG sleep 30
命令来杀死主 Redis 实例,我们将在 Sentinel 的日志中观察到故障转移过程将在大约 5 秒后开始。如果您再次运行返回主服务器 IP 地址的命令,您将看到副本已提升为主服务器:
redis> SENTINEL get-master-addr-by-name myprimary
1) "127.0.0.1"
2) "6380"