手动搭建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 会持续监控主节点,并在故障时自动切换至从节点,保障服务可用性。

相关推荐
问道飞鱼1 小时前
【数据库知识】Mysql进阶-高可用MHA(Master High Availability)方案
数据库·mysql·adb·高可用·mha
搞不懂语言的程序员2 小时前
Redis的Pipeline和Lua脚本适用场景是什么?使用时需要注意什么?
数据库·redis·lua
清幽竹客4 小时前
redis数据结构-02(INCR、DECR、APPEND)
数据结构·redis
呦呦鹿鸣Rzh5 小时前
redis
数据库·redis·缓存
摘星编程6 小时前
Redis+Caffeine构建高性能二级缓存
数据库·redis·缓存
fanTuanye7 小时前
redis 缓存穿透,缓存击穿,缓存雪崩
java·redis·缓存
星星点点洲15 小时前
【Redis】谈谈Redis的设计
数据库·redis·缓存
Lion Long19 小时前
CodeBuddy 中国版 Cursor 实战:Redis+MySQL双引擎驱动〈王者荣耀〉战区排行榜
数据库·redis·mysql·缓存·腾讯云·codebuddy首席试玩官·codebuddy
柯南二号1 天前
MacOS 用brew 安装、配置、启动Redis
redis