学习

步骤 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 在 Redis 服务器实例配置了 requirepass 时连接到它们,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"