Redisson + Sentinel + Watchdog 是 Redis 生态中解决 分布式锁高可用 与 长任务续期 的经典组合,适用于需要强一致性和容错能力的场景。以下是技术详解与实战指南:
一、组件协同原理
1. Redisson:分布式锁客户端
- 核心功能:封装 Redis 命令为
RLock接口,提供lock()/unlock()方法。 - 看门狗(Watchdog):
- 默认启用,自动续期锁至
30 秒(可配置)。 - 续期逻辑:后台线程每
10 秒(1/3锁过期时间)发送PEXPIRE命令。
- 默认启用,自动续期锁至
2. Sentinel:高可用守护者
- 故障转移:主节点故障时,自动选举新主节点并重新配置从节点。
- 锁容错:确保 Redisson 客户端在故障转移后仍能操作锁。
3. Watchdog:锁续期机制
- 适用场景:长任务(如批量数据处理、外部 API 调用)。
- 终止条件:客户端调用
unlock()或进程终止。
二、配置实战
1. Sentinel 集群配置
# sentinel1.conf
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2 # quorum=2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 180000
启动 Sentinel 节点:
redis-sentinel sentinel1.conf
2. Redisson 客户端配置
Config config = new Config();
config.useSentinelServers()
.addSentinelAddress("redis://sentinel1:26379", "redis://sentinel2:26379")
.setMasterName("mymaster")
.setPassword("your_redis_password")
.setConnectTimeout(10000); // 连接超时
RedissonClient redisson = Redisson.create(config);
3. 获取分布式锁
RLock lock = redisson.getLock("order_processing_lock");
// 默认30秒锁,自动续期
lock.lock();
// 显式指定超时时间(不推荐长任务)
// lock.lock(10, TimeUnit.SECONDS);
try {
// 业务逻辑(如处理订单)
processLongRunningTask();
} finally {
lock.unlock(); // 释放锁,停止看门狗续期
}
三、高可用与容错
1. 故障转移测试
- 模拟主节点故障:
redis-cli -p 6379 DEBUG sleep 30 # 阻塞主节点30秒 - 观察 Sentinel 日志:
+switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380 # 新主节点地址 - 验证锁状态:
- Redisson 客户端自动重连新主节点,锁仍有效。
- 任务继续执行,不受故障转移影响。
2. 脑裂(Split-Brain)防护
- 配置参数:
sentinel monitor mymaster 127.0.0.1 6379 2 sentinel config-epoch mymaster 100 # 防止旧配置回滚 - 客户端行为:
- 检测到网络分区时,优先连接多数派 Sentinel 节点。
四、监控与调优
1. 关键指标
- 锁争用:
redisson_lock_owned_by_current_client(当前客户端持有的锁数)。 - 续期失败:
redisson_watchdog_renewal_failures(需告警)。 - Sentinel 状态:
sentinel_masters(监控的主集群数)。
2. 调优建议
- 看门狗超时:
config.setWatchdogTimeout(60000); // 延长至60秒(适合超长任务) - 连接池:
config.setConnectionPoolSize(64); // 高并发场景增大连接池
五、常见问题
1. 锁未释放
- 原因:客户端崩溃、
finally块未执行。 - 解决:
- 设置锁过期时间(即使不启用看门狗)。
- 使用
tryLock()检测锁状态:if (lock.tryLock(0, 10, TimeUnit.SECONDS)) { try { // 业务逻辑 } finally { lock.unlock(); } }
2. 性能瓶颈
- 场景:高并发下锁竞争激烈。
- 优化:
- 拆分锁粒度(如按用户 ID 分片)。
- 使用
RedissonRedLock(多 Redis 实例加锁)。
六、总结
Redisson + Sentinel + Watchdog 组合提供:
- 高可用锁服务:Sentinel 确保故障转移后锁仍有效。
- 自动续期:看门狗机制避免长任务因锁过期而中断。
- 易用性:Redisson 封装复杂逻辑,开发者聚焦业务。
适用场景:
- 电商订单处理(需强一致性)。
- 金融交易系统(故障容忍度低)。
- 分布式任务调度(如 Quartz 集群)。
注意事项:
- 避免锁超时时间过长(增加死锁风险)。
- 定期演练故障转移,验证客户端行为。
686

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



