Redisson 与 Redis 哨兵模式的配置指南

1. 哨兵模式核心概念
  • 哨兵节点:监控 Redis 主从节点状态,自动处理故障转移
  • 主节点名称:哨兵识别的唯一标识(如 mymaster
  • 高可用流程
    1. 哨兵检测主节点故障
    2. 选举新主节点
    3. 更新其他从节点配置
    4. 通知客户端新拓扑
2. Maven 依赖配置
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.17.7</version>
</dependency>

3. Redisson 客户端配置
Config config = new Config();
config.useSentinelServers()
    .setMasterName("mymaster")  // 哨兵配置文件中的主节点名称
    .addSentinelAddress("redis://sentinel1:26379")
    .addSentinelAddress("redis://sentinel2:26379")
    .setPassword("your_password")  // 若启用认证
    .setDatabase(0)
    .setCheckSentinelsList(false);  // 禁用哨兵列表自动更新

RedissonClient client = Redisson.create(config);

4. 关键配置参数详解
参数 说明 示例值
masterName 哨兵监控的主节点名称 "mymaster"
sentinelAddresses 哨兵节点地址列表 "redis://192.168.1.10:26379"
sentinelPassword 哨兵节点密码(若独立设置) "sentinel_pass"
slaveConnectionMinimumIdleSize 从节点最小空闲连接 10
failedSlaveCheckInterval 故障从节点检查间隔(毫秒) 180000
5. 哨兵模式配置文件示例(redis-sentinel.conf)
sentinel monitor mymaster 192.168.1.20 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

6. 最佳实践建议
  1. 哨兵部署

    • 至少部署 3 个哨兵节点(避免脑裂)
    • 分散在不同物理服务器
  2. 客户端配置

    // 启用DNS监控(解决云环境IP变更问题)
    config.useSentinelServers().setDnsMonitoringInterval(5000);
    
    // 设置读写分离
    config.useSentinelServers().setReadMode(ReadMode.SLAVE);
    

  3. 故障处理增强

    // 添加监听器处理拓扑变更
    client.getNodesGroup().addConnectionListener(new ConnectionListener() {
        @Override
        public void onConnect(InetSocketAddress addr) {
            System.out.println("Connected to: " + addr);
        }
        
        @Override
        public void onDisconnect(InetSocketAddress addr) {
            System.out.println("Disconnected from: " + addr);
        }
    });
    

7. 验证配置
// 检查主节点信息
RSentinelService sentinel = client.getSentinelService();
MasterSlaveServersConfig config = sentinel.getMasterSlaveServersConfig();
System.out.println("Current master: " + config.getMasterAddress());

// 测试基本操作
RBucket<String> bucket = client.getBucket("test");
bucket.set("哨兵模式验证");
System.out.println(bucket.get());

注意事项

  1. 确保所有哨兵节点时钟同步(NTP服务)
  2. 生产环境建议设置 sentinel auth-pass 密码
  3. 网络超时设置应大于哨兵的 down-after-milliseconds
  4. 使用 connectionMinimumIdleSize 保持最小连接池

故障转移期间可能出现短暂写入失败(通常 < 1s),业务层需设计重试机制。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐