Redis Sentinel 中的 master-name(如 mymaster)是一个 逻辑标识符,用于唯一标识一个主从集群(即一组主节点及其关联的从节点)。它的核心作用是为 Sentinel 提供 集群的抽象标识,使得 Sentinel 能够管理和监控多个独立的主从集群,同时客户端也能通过该名称动态发现主节点。
为什么需要 master-name?
1. 标识主从集群的唯一性
- 场景:一个 Redis Sentinel 实例可能同时监控多个主从集群(例如:业务 A 的集群
business-a,业务 B 的集群business-b)。 - 作用:
master-name作为逻辑名称,区分不同的主从集群。- Sentinel 通过
master-name关联主节点、从节点及监控规则(如down-after-milliseconds、quorum等)。 - 客户端通过
master-name向 Sentinel 查询对应集群的主节点地址。
- Sentinel 通过
2. Sentinel 与主从集群的绑定
- 配置绑定:
在 Sentinel 的配置文件(如sentinel.conf)中,需明确声明监控的每个主从集群的master-name:CONF
sentinel monitor mymaster 192.168.1.100 6379 2 # 监控名为 "mymaster" 的主节点 sentinel down-after-milliseconds mymaster 5000 # 针对 "mymaster" 的节点不可达超时时间- 所有与
mymaster关联的配置(如故障转移条件)均通过该名称绑定。
- 所有与
3. 客户端动态发现主节点
- 客户端查询:
客户端(如 Lettuce、Jedis)通过master-name向 Sentinel 请求主节点信息:JAVA
// Lettuce 客户端示例 RedisURI redisUri = RedisURI.Builder.sentinel("sentinel-host", 26379, "mymaster").build();- Sentinel 根据
master-name返回当前主节点的 IP 和端口。
- Sentinel 根据
4. Sentinel 事件通信
- Pub/Sub 频道:
Sentinel 通过发布订阅机制广播集群状态变更事件(如+switch-master),事件消息中必须包含master-name:PLAINTEXT
+switch-master <master-name> <old-ip> <old-port> <new-ip> <new-port>- 客户端和 Sentinel 根据
master-name识别事件对应的主从集群。
- 客户端和 Sentinel 根据
5. 多集群管理
- 多租户场景:
若系统中存在多个业务线,每个业务线使用独立的 Redis 集群,可通过不同的master-name管理隔离性(如order-master、payment-master)。
master-name 的设计意义
-
解耦物理拓扑
- 客户端无需硬编码主节点的 IP 和端口,只需通过逻辑名称
master-name访问集群,即使主节点发生故障迁移,客户端也无感知。
- 客户端无需硬编码主节点的 IP 和端口,只需通过逻辑名称
-
支持动态扩展
- 新增主从集群时,只需在 Sentinel 中注册新的
master-name,无需修改客户端代码。
- 新增主从集群时,只需在 Sentinel 中注册新的
-
统一配置管理
- Sentinel 的监控规则(如超时时间、仲裁数)基于
master-name配置,便于按集群定制策略。
- Sentinel 的监控规则(如超时时间、仲裁数)基于
注意事项
-
全局唯一性
- 同一 Sentinel 组内,
master-name必须唯一,避免监控冲突。
- 同一 Sentinel 组内,
-
客户端一致性
- 客户端配置的
master-name必须与 Sentinel 中定义的一致,否则无法发现主节点。
- 客户端配置的
-
命名规范
- 建议使用有业务意义的名称(如
user-service-master),避免使用默认值mymaster。
- 建议使用有业务意义的名称(如
示例场景
假设一个 Sentinel 监控两个主从集群:
- 订单服务集群
master-name:order-master- 主节点:
order-redis-01:6379
- 支付服务集群
master-name:payment-master- 主节点:
payment-redis-01:6379
客户端通过不同的 master-name 访问对应集群:
JAVA
// 订单服务客户端 RedisURI orderRedisUri = RedisURI.Builder.sentinel("sentinel-host", 26379, "order-master").build(); // 支付服务客户端 RedisURI paymentRedisUri = RedisURI.Builder.sentinel("sentinel-host", 26379, "payment-master").build();
总结
master-name 是 Redis Sentinel 中 逻辑标识主从集群的核心字段,它解耦了物理拓扑与业务逻辑,使得 Sentinel 能够高效管理多集群,并实现客户端的动态服务发现。正确配置和使用 master-name 是保障 Redis 高可用架构稳定性的关键。
1242

被折叠的 条评论
为什么被折叠?



