链接 Redis Sentinel 的一个坑

date
Jan 10, 2024
slug
connect-redis-sentinel
status
Published
tags
中间件
summary
哨兵节点不会直接响应工作命令。
type
Post
Redis Sentinel(哨兵机制)用于监控 Redis 服务器以及提供高可用性和故障转移的自动化。
如下图所示:
notion image
Sentinel有以下职责:
  1. 监控(Monitoring):Sentinel会不断检查您的Redis主服务器和从服务器是否正在正常工作。
  1. 通知(Notification):当被监视的某个Redis实例出现问题时,Sentinel可以通过API调用来通知其他系统或者人员。
  1. 自动故障迁移(Automatic failover):当一个主服务器无法正常工作时,Sentinel可以启动故障迁移过程,将其中一个从服务器升级为新的主服务器,并且让其他从服务器改变配置,开始复制新的主服务器。
  1. 配置提供者(Configuration provider):客户端可以使用Redis Sentinel集群中的任何Sentinel节点来查询关于主服务器和从服务器的信息。这样客户端就不需要硬编码哪个是主服务器、哪个是从服务器了。
由此可见,Sentinel 主要是为了提高可用性而诞生的架构。

链接 Sentinel 的坑

当我们只知道Redis Sentinel的信息时,连接和操作流程如下:
  1. 首先,我们需要连接到某个已知的Redis Sentinel节点。
  1. 一旦建立连接,我们可以从该Sentinel节点获取主节点(master)和从节点(slave)的信息。
  1. 获得这些信息后,我们才能真正地连接到工作节点(即主节点或从节点),并开始执行实际的数据读写操作。
在单节点Redis中,我们可以直接连接到该节点并开始工作。然而,要使用Redis Sentinel,我们必须先连接到Sentinel节点,然后再根据其提供的信息找到实际的工作节点。
需要注意的是,Sentinel节点本身不参与数据的读写操作,它们的主要职责是监控集群的健康状态,并在主节点故障时自动完成故障切换。因此,尽管使用Sentinel可能需要更多的步骤,但这种方式为保证Redis集群的高可用性提供了重要的支持。
下面的图片描述了两者的区别:
notion image
我今天在链接redis的时候,忘记我要链接是Sentinel了,日志提示我链接成功,执行$PING没问题,$ PING ""却一直报错,提示:
$ ERR wrong number of arguments for 'ping' command
真是百思不得其解啊,在debug非常久之后,发现自己链接到了sentinel节点上了,在这里它只响应$ PING,输入额外参数就会报错的。
我们在链接到sentinel之后,应该通过以下命令来拿到主从节点的信息,然后再去链接它们进行工作。
  • SENTINEL MASTERS Show a list of monitored masters and their state.
  • SENTINEL slaves <master name> Show a list of slaves for this master, and their state.
  • SENTINEL get-master-addr-by-name <master name> : 返回给定名字的主服务器的 IP 地址和端口号。
获得地址信息后,再去链接工作节点,然后才能正常响应命令。
 

Ref

 

© hhmy 2019 - 2024