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

Redis | 哨兵模式

Redis | 哨兵模式

1. 简介

Redis Sentinel(哨兵)是Redis提供的一种高可用性解决方案。它是一个独立的进程,用于监控和管理Redis主从模式的节点,并在主节点故障时自动进行故障转移。哨兵模式可以确保Redis集群的高可用性和数据一致性。

在哨兵模式中,有一个主节点(Master)和多个从节点(Slave),以及一个或多个哨兵(Sentinel)。主节点负责接收写操作和复制数据到从节点,而从节点负责复制主节点的数据。哨兵负责监控主节点和从节点的状态,并在主节点故障时自动将一个从节点提升为新的主节点。

以下是Redis哨兵模式的一些特点和工作原理:

  1. 哨兵选举:在启动时,每个哨兵都会对主节点进行投票选举,选出一个领头哨兵(Leader Sentinel)。领头哨兵负责协调故障转移过程。
  2. 监控:哨兵会定期检查Redis节点的健康状态,包括主节点和从节点的状态。如果发现主节点不可用,哨兵会触发故障转移。
  3. 故障转移:当主节点不可用时,领头哨兵会选出新的主节点,并通知其他哨兵和从节点进行切换。在故障转移期间,客户端的请求会被暂时拒绝,直到新的主节点选举完成。
  4. 数据一致性:在进行故障转移时,哨兵会确保新的主节点和从节点与旧的主节点数据保持一致。因此,即使主节点故障,数据不会丢失。

2. 配置

  1. 配置Redis主节点:
    在主节点的配置文件(redis.conf)中,设置requirepass选项为主节点的密码。例如:

    requirepass your_redis_password
    
  2. 配置Redis从节点:
    在从节点的配置文件(redis.conf)中,设置masterauth选项为主节点的密码,并使用replicaof选项将从节点连接到主节点。例如:

    masterauth your_redis_password
    replicaof <master-ip> <master-port>
    

    <master-ip><master-port>分别是主节点的IP地址和端口号。

  3. 配置Redis Sentinel:
    创建一个名为sentinel.conf的新文件,其中指定以下选项:

    bind *
    sentinel resolve-hostnames yes
    sentinel monitor mymaster <master-ip> <master-port> <quorum>
    sentinel down-after-milliseconds mymaster 5000
    sentinel failover-timeout mymaster 10000
    sentinel auth-pass mymaster <master-password>
    

    sentinel monitor中,mymaster是Redis实例的名称,<master-ip> <master-port>是主节点的IP地址和端口号,<quorum>是哨兵执行故障转移所需的最少哨兵数目。

    sentinel auth-pass配置了连接到主节点的密码,以便哨兵能够正确连接到Redis主节点。

  4. 启动Redis服务器和哨兵:
    首先,启动带密码的Redis主节点和从节点。然后,分别启动哨兵进程,并使用配置文件启动:

    redis-sentinel /path/to/sentinel.conf
    

3. 演示

注意:因为每启动redis都会修改sentinel.conf,如果之前测试过想重新开始测试,要将sentinel.conf内容恢复。

下面以1个主节点,2个从节点,1个哨兵节点演示。

文件树

hello-redis
├── docker-compose.yaml
└── sentinel└── sentinel.conf

文件

sentinel.conf

bind 127.0.0.1
sentinel resolve-hostnames yes
sentinel monitor mymaster 192.168.200.2 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel auth-pass mymaster 123456

docker-compose.yaml

version: "3.8"
networks:network:ipam:driver: defaultconfig:- subnet: '192.168.200.0/24'
services:master:container_name: masterimage: redis:7.0networks:network:ipv4_address: 192.168.200.2command:- redis-server- --replicaof no one- --requirepass 123456- --masterauth 123456- --bind * -::*replica1:container_name: replica1image: redis:7.0networks:network:ipv4_address: 192.168.200.3command:- redis-server- --requirepass 123456- --bind * -::*- --masterauth 123456- --replicaof 192.168.200.2 6379depends_on:- masterreplica2:container_name: replica2image: redis:7.0networks:network:ipv4_address: 192.168.200.4command:- redis-server- --requirepass 123456- --bind * -::*- --masterauth 123456- --replicaof 192.168.200.2 6379depends_on:- mastersentinel1:container_name: sentinel1image: redis:7.0networks:network:ipv4_address: 192.168.200.5volumes:- ./sentinel:/root/sentinelcommand:- redis-sentinel- /root/sentinel/sentinel.conf- --sentineldepends_on:- master
  • 启动:在hello-go文件夹下输入docker compose up启动。
  • 测试故障转移:docker stop master停止主节点,等待5秒就能从控制台或sentinel.conf中看到主节点发生切换。
  • 恢复故障主节点:docker start master就能看到master节点又加入集群,并且以从节点身份。

4. 注意

  1. 在生产环境中,建议使用多个哨兵和Redis Cluster等高级解决方案来实现更可靠和自动化的高可用性。
  2. 主节点也要指定masterauth(主节点授权),防止主节点意外中止恢复正常后以无法以从节点身份连接到集群。
http://www.lryc.cn/news/112129.html

相关文章:

  • MySQL语句性能分析与优化
  • SpringBoot实现数据库读写分离
  • Linux(四)--包软件管理器与Linux上环境部署示例
  • 自监督去噪:Recorrupted-to-Recorrupted原理分析与总结
  • 【css】css实现水平和垂直居中
  • 常见Charles在Windows10抓包乱码问题
  • 汽车维修保养记录查询API:实现车辆健康状况一手掌握
  • 正则表达式学习记录(Python)
  • Ubuntu20.04操作系统安装Docker
  • python制作小程序制作流程,用python编写一个小程序
  • Github 创建自己的博客网站
  • Windows上安装 jdk 环境并配置环境变量 (超详细教程)
  • 高效构建 vivo 企业级网络流量分析系统
  • 认识awk
  • 【C#学习笔记】数组和索引器
  • 常见距离计算的Python实现
  • 开发运营监控
  • 食品小程序的制作教程
  • Kubernetes(K8s)从入门到精通系列之十三:软件负载平衡选项
  • 数据特征选择 | Matlab实现具有深度度量学习的时频特征嵌入
  • 浅谈webpack
  • 【 stable diffusion LORA模型训练最全最详细教程】
  • 蓝桥杯上岸每日N题 第八期 (全球变暖)!!!
  • CSS基础介绍笔记1
  • https请求异常引发(Received fatal alert: unrecognized_name):如何快速解决项目中问题?
  • 小程序 view下拉滑动导致scrollview滑动事件失效
  • 《ROS2》教程
  • 抖音seo源码开发源代码搭建分享
  • MATLAB——使用建立好的神经网络进行分类程序
  • Spring5.2.x 源码使用Gradle成功构建