学习

步骤 1#

如果您仍然拥有我们在上一练习(3.2)中设置的主实例和副本实例 - 太棒了!我们将重复使用它们来创建我们的 Sentinel 设置。如果没有 - 请参考 说明 并再次完成它们。

完成后,您将拥有一个主 Redis 实例和一个副本实例。

步骤 2#

要初始化 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 指令。

步骤 3#

将此文件再复制两份 - sentinel2.conf 和 sentinel3.conf 并编辑它们,以便将 PORT 配置分别设置为 5001 和 5002。

步骤 4#

让我们在三个不同的终端选项卡中初始化三个 Sentinel

# Tab 1
$ redis-server ./sentinel1.conf --sentinel
# Tab 2
$ redis-server ./sentinel2.conf --sentinel
# Tab3
$ redis-server ./sentinel3.conf --sentinel

步骤 5#

如果您现在连接到其中一个 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

步骤 6#

如果我们现在通过按 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"