Redis 主从复制及哨兵模式配置

Redis 主从复制

  1. 配置主节点 (redis-node1, IP: 172.25.254.10)

    [root@redis-node1 ~]# vim /etc/redis/redis.conf

修改项

复制代码
bind * -::*             # 允许所有网络接口访问
protected-mode no       # 关闭保护模式,允许远程连接

[root@redis-node1 ~]# systemctl restart redis_6379.service

注释protected-mode no 至关重要,否则未设置密码且绑定公网 IP 时,Redis 将拒绝外部连接,导致主从同步失败。

  1. 配置从节点 (redis-node2 & node3)
    Node2 (172.25.254.20):

    [root@redis-node2 ~]# vim /etc/redis/redis.conf

修改项

复制代码
bind * -::*
protected-mode no
replicaof 172.25.254.10 6379   # 指定主节点 IP 和端口

[root@redis-node2 ~]# systemctl restart redis_6379.service

Node3 (172.25.254.30):

注释 :配置同 Node2,只需确保 replicaof 指向正确的主节点 IP。

  1. 验证主从状态
复制代码
# 在主节点查看
[root@redis-node1 ~]# redis-cli
127.0.0.1:6379> info replication
# 输出应显示 role:master 且 connected_slaves:2

# 在从节点查看
[root@redis-node2 ~]# redis-cli
127.0.0.1:6379> info replication
# 输出应显示 role:slave 且 master_host:172.25.254.10
  1. 数据同步测试

    主节点写入

    [root@redis-node1 ~]# redis-cli
    127.0.0.1:6379> set name lee
    OK

    从节点读取(应成功)

    [root@redis-node2 ~]# redis-cli
    127.0.0.1:6379> get name
    "lee"

    从节点写入(应失败)

    127.0.0.1:6379> set test 123
    (error) READONLY You can't write against a read only replica.

注释:从节点默认是只读的,这是为了保证数据一致性,所有写操作必须发生在主节点。

Redis 哨兵模式配置与故障切换

  1. 准备哨兵配置文件 (sentinel.conf)
    在主节点创建并编辑配置文件:

    [root@redis-node1 ~]# cp -p sentinel.conf /etc/redis/
    [root@redis-node1 ~]# vim /etc/redis/sentinel.conf

关键配置项

复制代码
protected-mode no                       # 关闭保护模式
port 26379                              # 哨兵监听端口
daemonize no                            # 前台运行(生产环境通常设为 yes 或使用 systemd 管理)
sentinel monitor mymaster 172.25.254.10 6379 2  # 监控主节点,2 表示至少 2 个哨兵同意才判定下线
sentinel down-after-milliseconds mymaster 10000 # 10 秒连不上视为主观下线
sentinel parallel-syncs mymaster 1      # 故障转移后,同时同步新主的从节点数量
sentinel failover-timeout mymaster 180000       # 故障转移超时时间

注释quorum 2 表示至少需要 2 个哨兵实例确认主节点失效才能进行故障转移,防止误判。

  1. 全局关闭保护模式
    确保所有 Redis 节点(主和从)的 redis.conf 中均设置:

    在所有节点执行

    [root@redis-node ~]# vim /etc/redis/redis.conf
    protected-mode no
    [root@redis-node ~]# systemctl restart redis_6379.service

注释:哨兵需要连接 Redis 实例进行监控,若开启保护模式且未配置密码,哨兵可能无法连接。

  1. 分发配置文件并启动哨兵

    将配置复制到从节点

    [root@redis-node1 ~]# scp /etc/redis/sentinel.conf root@172.25.254.20:/etc/redis/
    [root@redis-node1 ~]# scp /etc/redis/sentinel.conf root@172.25.254.30:/etc/redis/

    在所有节点启动哨兵

    [root@redis-node1~3 ~]# redis-sentinel /etc/redis/sentinel.conf

注释 :启动后观察日志,应看到 +monitor master+slave 信息,表示哨兵已识别主从架构。

  1. 测试故障切换 (Failover)
    手动关闭主节点:

    [root@redis-node1 6379]# redis-cli
    127.0.0.1:6379 > SHUTDOWN

观察哨兵日志(关键流程):

复制代码
# +sdown master ...          # 主观下线
# +odown master ...          # 客观下线(达到 quorum 票数)
# +vote-for-leader ...       # 选举领导哨兵
# +elected-leader ...        # 领导选举完成
# +selected-slave ...        # 选择新的从节点提升为主
# +switch-master ...         # 完成主从切换

注释+switch-master mymaster 172.25.254.10 6379 172.25.254.20 6379 表示主节点已由 .10 切换为 .20。

  1. 验证新拓扑结构
    在原从节点 (Node2, 新主) 查看:

    [root@redis-node2 ~]# redis-cli
    127.0.0.1:6379 > info replication

    应显示 role:master, connected_slaves:1 (原 Node3)

在原从节点 (Node3) 查看:

复制代码
[root@redis-node3 ~]# redis-cli
127.0.0.1:6379 > info replication
# 应显示 role:slave, master_host:172.25.254.20 (指向新主)
  1. 恢复原主节点

    [root@redis-node1 6379]# /etc/init.d/redis_6379 start

验证:

在原主节点 (Node1) 查看 info replication,它会自动变为 Slave 角色,并同步新主节点 (Node2) 的数据。

复制代码
role:slave
master_host:172.25.254.20

注释:Redis 哨兵模式具备自动修复能力,旧主恢复后会自动降级为从节点,加入新的主从集群,无需人工干预配置。

相关推荐
勿忘,瞬间9 分钟前
Mybatis高阶
java·数据库·mybatis
天天喝旺仔33 分钟前
Python asyncio 异步编程实战:用协程与事件循环构建高性能网络服务
服务器·网络·python·性能优化·fastapi
运维行者_42 分钟前
ISP 企业级带宽计费怎么做?网络流量计费的 6 大核心能力
运维·服务器·网络·数据库·支持向量机·接口隔离原则
奇树谦1 小时前
PCB生产制造全流程详解:从开料、钻孔、沉铜到检测、包装
网络·数据库·制造
驾驭人生1 小时前
Hangfire.Redis.StackExchange 已归档停更!生产任务卡死、重复执行、网络抖动问题解决方案
数据库·redis·缓存
xierui1231231 小时前
Agent记忆不是聊天记录:用三层存储构建可追溯的 AI 工作流
数据库·人工智能·aigc·软件工程
2301_800074211 小时前
mysql DQL
数据库·sql·mysql
西风未眠2 小时前
ClickHouse数据库引擎引起的数据丢失
数据库·clickhouse·故障
海浪仙人掌2 小时前
应收账款分析如何操作?应收账款分析有哪些注意事项?
数据库·人工智能
Elastic 中国社区官方博客2 小时前
在 Elasticsearch 中回填时间序列数据:通过批量 API 加载数月的历史指标数据
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索