【Java 开发手记】Redisson 与 Redis 哨兵模式的配置
·
Redisson 与 Redis 哨兵模式的配置指南
1. 哨兵模式核心概念
- 哨兵节点:监控 Redis 主从节点状态,自动处理故障转移
- 主节点名称:哨兵识别的唯一标识(如
mymaster) - 高可用流程:
- 哨兵检测主节点故障
- 选举新主节点
- 更新其他从节点配置
- 通知客户端新拓扑
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. 最佳实践建议
-
哨兵部署:
- 至少部署 3 个哨兵节点(避免脑裂)
- 分散在不同物理服务器
-
客户端配置:
// 启用DNS监控(解决云环境IP变更问题) config.useSentinelServers().setDnsMonitoringInterval(5000); // 设置读写分离 config.useSentinelServers().setReadMode(ReadMode.SLAVE); -
故障处理增强:
// 添加监听器处理拓扑变更 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());
注意事项:
- 确保所有哨兵节点时钟同步(NTP服务)
- 生产环境建议设置
sentinel auth-pass密码- 网络超时设置应大于哨兵的
down-after-milliseconds- 使用
connectionMinimumIdleSize保持最小连接池故障转移期间可能出现短暂写入失败(通常 < 1s),业务层需设计重试机制。
更多推荐
所有评论(0)