实现思路
- 设置重试机制:当遇到连接异常时,不立即终止脚本,而是进行多次重试,以应对短暂的网络波动。
- 记录日志:详细记录每次连接尝试和异常信息,方便后续排查问题。
- 超时设置:为每次连接尝试设置合理的超时时间,避免无限期等待。
- 节点状态跟踪:记录每个节点的连接状态,对于多次尝试仍无法连接的节点,可进行特殊处理(如跳过或标记)。
关键代码片段(以Python为例)
import time
import redis
import logging
# 配置日志
logging.basicConfig(filename='redis_sentinel_deploy.log', level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
# 定义Redis Sentinel节点信息
sentinel_nodes = [
('sentinel1.example.com', 26379),
('sentinel2.example.com', 26379),
('sentinel3.example.com', 26379)
]
# 最大重试次数
MAX_RETRIES = 5
# 每次重试间隔时间(秒)
RETRY_INTERVAL = 5
# 连接超时时间(秒)
CONNECT_TIMEOUT = 10
for sentinel_ip, sentinel_port in sentinel_nodes:
retry_count = 0
while retry_count < MAX_RETRIES:
try:
sentinel = redis.sentinel.Sentinel(
[(sentinel_ip, sentinel_port)],
socket_timeout=CONNECT_TIMEOUT
)
logging.info(f"成功连接到Sentinel节点 {sentinel_ip}:{sentinel_port}")
# 在此处可以进行后续的Redis Sentinel初始化操作
break
except redis.exceptions.ConnectionError as e:
retry_count += 1
logging.warning(f"连接Sentinel节点 {sentinel_ip}:{sentinel_port} 失败,重试 {retry_count}/{MAX_RETRIES} - {str(e)}")
time.sleep(RETRY_INTERVAL)
if retry_count == MAX_RETRIES:
logging.error(f"经过 {MAX_RETRIES} 次重试,仍无法连接到Sentinel节点 {sentinel_ip}:{sentinel_port}")