手动搭建Redis1主2从+ 3 Sentinel 高可用集群

环境准备

一台机器部署:

  • Redis 主节点 : 127.0.0.1:6379
  • Redis 从节点 : 127.0.0.1:6380, 127.0.0.1:6381
  • Sentinel 节点 : 127.0.0.1:26379, 127.0.0.1:26380, 127.0.0.1:26381

步骤 1:安装 Redis 6.2.17

复制代码
bash 复制代码
# 下载并编译 Redis
wget https://download.redis.io/releases/redis-6.2.17.tar.gz
tar xzf redis-6.2.17.tar.gz
cd redis-6.2.17
make && make install

# 创建配置和数据目录
mkdir -p /opt/redis/{master,slave1,slave2,sentinel1,sentinel2,sentinel3}

步骤 2:配置 Redis 主从节点

(1) 主节点配置 (/opt/redis/master/redis.conf)
复制代码
bash 复制代码
bind 0.0.0.0
port 6379
daemonize yes
pidfile /var/run/redis-master.pid
logfile "/opt/redis/master/redis.log"
dir /opt/redis/master
requirepass your_redis_password  # 主节点密码
masterauth your_redis_password    # 从节点访问主节点的密码(需与 requirepass 一致)
(2) 从节点1配置 (/opt/redis/slave1/redis.conf)
复制代码
bash 复制代码
bind 0.0.0.0
port 6380
daemonize yes
pidfile /var/run/redis-slave1.pid
logfile "/opt/redis/slave1/redis.log"
dir /opt/redis/slave1
requirepass your_redis_password
masterauth your_redis_password
replicaof 127.0.0.1 6379  # 指向主节点
(3) 从节点2配置 (/opt/redis/slave2/redis.conf)
复制代码
bash 复制代码
bind 0.0.0.0
port 6381
daemonize yes
pidfile /var/run/redis-slave2.pid
logfile "/opt/redis/slave2/redis.log"
dir /opt/redis/slave2
requirepass your_redis_password
masterauth your_redis_password
replicaof 127.0.0.1 6379  # 指向主节点

步骤 3:配置 Sentinel 节点

(1) Sentinel1 配置 (/opt/redis/sentinel1/sentinel.conf)
复制代码
bash 复制代码
port 26379
daemonize yes
pidfile /var/run/redis-sentinel1.pid
logfile "/opt/redis/sentinel1/sentinel.log"
dir /opt/redis/sentinel1

sentinel monitor mymaster 127.0.0.1 6379 2  # 监控名为 "mymaster" 的主节点,quorum=2
sentinel auth-pass mymaster your_redis_password  # 主节点密码
sentinel down-after-milliseconds mymaster 5000   # 5秒不可达视为故障
sentinel failover-timeout mymaster 60000         # 故障转移超时时间(毫秒)
sentinel parallel-syncs mymaster 1               # 故障转移时允许同步的从节点数
(2) Sentinel2 配置 (/opt/redis/sentinel2/sentinel.conf)
复制代码
bash 复制代码
port 26380
daemonize yes
pidfile /var/run/redis-sentinel2.pid
logfile "/opt/redis/sentinel2/sentinel.log"
dir /opt/redis/sentinel2

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster your_redis_password
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
(3) Sentinel3 配置 (/opt/redis/sentinel3/sentinel.conf)
复制代码
bash 复制代码
port 26381
daemonize yes
pidfile /var/run/redis-sentinel3.pid
logfile "/opt/redis/sentinel3/sentinel.log"
dir /opt/redis/sentinel3

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel auth-pass mymaster your_redis_password
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1

步骤 4:启动服务

(1) 启动 Redis 主从节点
复制代码
bash 复制代码
# 启动主节点
redis-server /opt/redis/master/redis.conf

# 启动从节点
redis-server /opt/redis/slave1/redis.conf
redis-server /opt/redis/slave2/redis.conf
(2) 启动 Sentinel 节点
复制代码
bash 复制代码
redis-sentinel /opt/redis/sentinel1/sentinel.conf
redis-sentinel /opt/redis/sentinel2/sentinel.conf
redis-sentinel /opt/redis/sentinel3/sentinel.conf

步骤 5:验证集群状态

(1) 检查主从复制状态
复制代码
bash 复制代码
# 连接主节点
redis-cli -h 127.0.0.1 -p 6379 -a your_redis_password info replication

# 输出应包含:
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=...
slave1:ip=127.0.0.1,port=6381,state=online,offset=...
(2) 检查 Sentinel 监控状态
复制代码
bash 复制代码
# 连接任意 Sentinel 节点
redis-cli -h 127.0.0.1 -p 26379 info sentinel

# 输出应包含:
sentinel_masters:1
sentinel_tilt:0
master0:name=mymaster,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

步骤 6:模拟故障转移测试

(1) 手动停止主节点
复制代码
bash 复制代码
redis-cli -h 127.0.0.1 -p 6379 -a your_redis_password shutdown
(2) 观察 Sentinel 日志

查看 Sentinel 日志文件(如 /opt/redis/sentinel1/sentinel.log),确认触发故障转移:

复制代码
bash 复制代码
# 日志中应出现以下事件:
+sdown master mymaster 127.0.0.1 6379
+odown master mymaster 127.0.0.1 6379
+vote-for-leader ...
+switch-master mymaster 127.0.0.1 6379 127.0.0.1 6380  # 切换至新主节点
(3) 验证新主节点
复制代码
bash 复制代码
redis-cli -h 127.0.0.1 -p 6380 -a your_redis_password info replication
# 输出应显示 role:master

关键注意事项

  1. 密码一致性

    • 所有 Redis 主从节点和 Sentinel 的 requirepassmasterauthsentinel auth-pass 必须一致。
  2. 防火墙设置

    • 确保 Redis 和 Sentinel 的端口开放(6379, 6380, 6381, 26379, 26380, 26381)。
  3. 生产环境优化

    • 将主从节点和 Sentinel 分散在不同物理机或可用区。
    • 调整 down-after-millisecondsparallel-syncs 参数优化故障转移速度。
  4. 日志与监控

    • 监控 INFO replicationINFO sentinel 状态。
    • 配置日志轮转(如 logrotate)避免日志文件过大。

总结

通过以上步骤,您已成功部署一个基于 Redis Sentinel 的高可用集群。Sentinel 会持续监控主节点,并在故障时自动切换至从节点,保障服务可用性。

相关推荐
liuc031714 小时前
AI下调用redis并调用deepseek
数据库·redis·mybatis
遇见火星14 小时前
Redis主从复制深度解析:数据高可用与负载均衡的核心方案
数据库·redis·缓存·负载均衡
哈里谢顿17 小时前
MySQL + Redis 协同 示例
redis·mysql
哈里谢顿19 小时前
redis实现排行榜功能
redis
Ahtacca21 小时前
Redis 五大常用数据类型详解及 Java 客户端(RedisTemplate)操作实战
java·数据库·redis·学习·缓存
rchmin1 天前
Redis集群扩容数据迁移方案分析
redis·缓存
最贪吃的虎1 天前
Redis 除了缓存,还能干什么?
java·数据库·redis·后端·缓存
哈里谢顿1 天前
redis常见问题分析
redis
MySQL实战1 天前
Redis 7.0 新特性之maxmemory-clients:限制客户端内存总使用量
数据库·redis
蜂蜜黄油呀土豆1 天前
Redis 底层实现深度解析:从 ListPack 到哈希表扩容
数据结构·redis·zset·sds·listpack·哈希表扩容