当前位置: 首页 > article >正文

Redis 哨兵模式配置教程

目录

1. 什么是 Redis 哨兵模式?

2. 环境准备

3. 配置主从节点

4. 配置哨兵

4.1 哨兵配置文件

4.2 启动哨兵

4.3 验证哨兵运行状态

5. 哨兵自动故障转移

5.1 测试自动故障转移

6. 高可用集群架构

7. 总结


1. 什么是 Redis 哨兵模式?

哨兵模式的功能主要有以下几方面:

  • 监控:不断检查主节点和从节点是否正常工作。
  • 自动故障转移:当主节点发生故障时,会自动将从节点提升为新的主节点,并通知其他从节点重新同步新的主节点。
  • 通知:哨兵会通知客户端,告知新的主节点地址。
  • 配置提供者:哨兵可以作为客户端与 Redis 的中介,提供主节点信息。

2. 环境准备

我们假设以下集群架构:

  • 主节点192.168.1.100:6379
  • 从节点1192.168.1.101:6379
  • 从节点2192.168.1.102:6379
  • 哨兵节点:同样运行在以上三台服务器上

3. 配置主从节点

确保主从节点已经正确配置,并且主从复制已经生效。具体配置方法可以参考之前的 Redis 主从复制教程。

  • 主节点 IP:192.168.1.100
  • 从节点1 IP:192.168.1.101
  • 从节点2 IP:192.168.1.102

4. 配置哨兵

4.1 哨兵配置文件

哨兵的配置文件通常命名为 sentinel.conf。我们需要在每台哨兵服务器上创建这个配置文件。以下是一个基本的哨兵配置文件模板:

# 指定监控的主节点及其端口,后面的2表示至少需要2个哨兵节点同意,才会判定主节点宕机
sentinel monitor mymaster 192.168.1.100 6379 2

# 主节点失败时允许多少个从节点自动提升为主节点
sentinel down-after-milliseconds mymaster 5000

# 故障转移超时时间
sentinel failover-timeout mymaster 15000

# 哨兵允许自动重启并重新连接失效的 Redis 主节点
sentinel parallel-syncs mymaster 1

将以上配置文件保存为 /usr/local/bin/sentinel.conf

4.2 启动哨兵

使用 Redis 自带的哨兵启动命令,启动每个节点的哨兵:

redis-sentinel  /usr/local/bin/sentinel.conf

也可以使用 Redis server 命令加上 --sentinel 参数:

redis-server /usr/local/bin/sentinel.conf --sentinel

4.3 验证哨兵运行状态

在启动哨兵后,可以使用以下命令连接到哨兵并检查状态:

redis-cli -p 26379

然后运行以下命令查看监控状态:

SENTINEL masters

此命令将显示哨兵监控的所有主节点及其状态信息。

5. 哨兵自动故障转移

当主节点发生故障时,哨兵将执行以下操作:

  1. 哨兵将会监控到主节点不可达,确认主节点失效。
  2. 在满足配置的条件下(如2个哨兵节点一致认为主节点失效),哨兵会选择一个从节点作为新的主节点。
  3. 哨兵通知其他从节点同步新的主节点数据。
  4. 哨兵更新主节点的信息,并通知客户端新的主节点地址。

5.1 测试自动故障转移

为了测试哨兵的故障转移功能,可以手动停止主节点 Redis 服务:

redis-cli -h 192.168.1.100 -p 6379 shutdown

在哨兵日志中,你可以观察到哨兵探测到主节点的故障,并选举新的主节点(通常从现有的从节点中选举)。

客户端再次连接时,哨兵会将新的主节点地址提供给客户端。

6. 高可用集群架构

为了达到 Redis 的高可用性,通常会部署至少三个哨兵节点,分布在不同的机器上以防止单点故障。如下是一个典型的集群架构:

  • 3个 Redis 实例:1个主节点,2个从节点。
  • 3个哨兵节点,分别部署在主节点和从节点的服务器上。

通过这样的架构,即使主节点故障,也能通过哨兵实现快速故障转移,保证服务持续可用。

7. 总结

Redis 哨兵模式通过提供自动监控和故障转移机制,实现了 Redis 集群的高可用性。通过部署多个哨兵节点和主从复制,系统能够有效应对主节点的故障并自动恢复,减少人工干预。


http://www.kler.cn/news/311452.html

相关文章:

  • docker在基础镜像上,比如rockylinux,如何配置yum仓库
  • AD域控服务器
  • Ubuntu22.04关闭631端口的方法
  • Java项目实战II基于Java+Spring Boot+MySQL的酒店客房管理系统(源码+数据库+文档)
  • Spring Controller
  • 如何确保Redis双删的准确性
  • React + Vite 多环境配置
  • 正也科技-辖区与指标管理系统 强化决策支持
  • 计算机网络 8.*结构化布线
  • 电力施工作业安全行为检测图像数据集
  • 【Python常用模块】_cx_Oracle模块详解
  • Docker SDK for Python: Python中操控Docker的利器
  • 【Linux进程控制】进程程序替换
  • Mac 上,终端如何开启 proxy
  • Vue3.0组合式API:使用reactive()、ref()创建响应式代理对象
  • hcia-openEuler V1.0师资题库-试卷3
  • 低代码平台中的数据源设计:构建高效应用的基础
  • 揭开 Vue 3 中大量使用 ref 的隐藏危机
  • 如何使用ssm实现基于WEB的文学网的设计与实现+vue
  • Utgard风格的平铺和Arm FrameBuffer Compression(AFBC)
  • iview Form Input组件按下回车键搜索和禁止触发表单默认事件
  • Rocky Linux 9 中添加或删除某个网卡的静态路由的方法
  • 【JSrpc破解前端加密问题】
  • 【Linux】对称加密和非对称加密的区别
  • (k8s)Kubernetes部署Promehteus
  • Tiny-universe-taks1-LLama3模型原理
  • 快速掌握Postman接口测试
  • 基于python+django+vue的在线学习资源推送系统
  • 一个手机号注册3个抖音号的绿色方法?
  • 如何查看电脑什么时候被人动过及看过的文件?