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

Redis哨兵模式以及主从

目录

Redis哨兵概述

哨兵模式的核心功能

哨兵模式的架构

哨兵模式的工作流程

哨兵模式的配置示例

哨兵模式的优缺点

哨兵模式与Redis Cluster的区别

最佳实践

Redis主从配置

Redis哨兵


Redis哨兵概述

Redis哨兵模式(Sentinel)是Redis提供的一种高可用性解决方案,主要用于监控Redis主从集群中的主节点(Master)和从节点(Slave),并在主节点发生故障时自动完成故障转移,确保Redis服务的持续可用性。以下是对Redis哨兵模式的全面概述:


哨兵模式的核心功能

  1. 监控(Monitoring)
    • 哨兵节点会持续监控Redis主节点和从节点的运行状态,包括心跳检测(每秒一次PING命令)。
    • 若主节点在指定时间内(down-after-milliseconds)未响应,哨兵会标记主节点为“主观下线”(SDOWN)。
  2. 故障通知(Notification)
    • 当哨兵发现主节点故障时,会通过Redis的发布/订阅机制或API通知管理员或其他系统。
  3. 自动故障转移(Automatic Failover)
    • 若多个哨兵节点(默认超过半数)确认主节点为“客观下线”(ODOWN),则会选举一个哨兵作为领导者(Leader),负责执行故障转移。
    • 领导者哨兵会从从节点中选举一个新主节点(通常选择slave-priority最高或数据最新的从节点),并提升其为主节点。
    • 其他从节点会重新配置为新主节点的从节点。
  4. 配置提供者(Configuration Provider)
    • 哨兵模式为客户端提供最新的主节点地址,客户端通过哨兵获取主节点信息(通过SENTINEL get-master-addr-by-name命令)。

哨兵模式的架构
  • 哨兵节点(Sentinel Nodes)
    • 多个哨兵节点组成集群,通过Gossip协议通信,共享主从节点的状态信息。
    • 哨兵节点本身也是Redis实例,但仅用于监控和故障转移,不存储数据。
  • 主从节点(Master-Slave Nodes)
    • 主节点负责写操作,从节点负责读操作(通过replicaof命令配置)。
    • 主从节点之间通过异步复制同步数据。
  • 客户端(Clients)
    • 客户端通过哨兵获取主节点地址,并直接连接主节点进行写操作,连接从节点进行读操作。

哨兵模式的工作流程
  1. 初始化阶段
    • 启动哨兵节点,配置主节点名称(sentinel monitor <master-name> <ip> <port> <quorum>)。
    • 哨兵节点与主节点建立连接,并发现所有从节点。
  2. 监控阶段
    • 哨兵节点定期向主从节点发送PING命令,检查其存活状态。
    • 若主节点未响应,哨兵会标记其为“主观下线”,并询问其他哨兵节点的意见。
  3. 故障转移阶段
    • 若超过quorum个哨兵节点确认主节点“客观下线”,则选举领导者哨兵。
    • 领导者哨兵选择新主节点,并发送SLAVEOF NO ONE命令将其提升为主节点。
    • 其他从节点执行SLAVEOF <new-master-ip> <new-master-port>命令,重新配置为新主节点的从节点。
  4. 通知阶段
    • 哨兵节点通过发布/订阅机制通知客户端主节点地址已变更。

哨兵模式的配置示例
# sentinel.conf 配置示例
sentinel monitor mymaster 127.0.0.1 6379 2 # 监控主节点,quorum=2
sentinel down-after-milliseconds mymaster 30000 # 30秒无响应则标记为主观下线
sentinel failover-timeout mymaster 180000 # 故障转移超时时间
sentinel parallel-syncs mymaster 1 # 故障转移时同步的从节点数量

哨兵模式的优缺点
  • 优点
    • 高可用性:自动故障转移,减少人工干预。
    • 配置简单:通过哨兵配置文件即可管理主从集群。
    • 扩展性强:支持动态添加哨兵节点和从节点。
  • 缺点
    • 脑裂问题:若网络分区导致部分哨兵无法与其他节点通信,可能误判主节点下线。
    • 数据一致性:主从复制是异步的,故障转移时可能丢失少量数据。
    • 性能开销:哨兵节点需要额外的资源(CPU、内存)。

哨兵模式与Redis Cluster的区别
特性哨兵模式Redis Cluster
高可用性通过故障转移实现通过分片和冗余实现
数据分片不支持支持(将数据分散到多个节点)
扩展性仅支持垂直扩展(增加从节点)支持水平扩展(增加节点)
适用场景小规模集群,读写分离大规模集群,需要分片和容错

最佳实践
  1. 哨兵节点数量
    • 建议至少3个哨兵节点,部署在不同物理机上,避免单点故障。
  2. 网络配置
    • 确保哨兵节点与主从节点之间的网络延迟低,避免误判。
  3. 监控与告警
    • 结合监控工具(如Prometheus、Grafana)实时监控哨兵和Redis状态。
  4. 测试故障转移
    • 定期模拟主节点故障,验证哨兵模式的可用性。

Redis主从配置

三台redis配置是一样的,一主两从

关闭防火墙

[root@localhost ~]# systemctl stop firewalld        #防火墙
[root@localhost ~]# setenforce 0                #内核

下载redis所依赖的插件

[root@localhost ~]# dnf -y install gcc

解压redis的安装包

[root@localhost ~]# tar zxf redis-6.2.4.tar.gz

初始化并且指定安装位置

[root@localhost ~]# cd redis-6.2.4
[root@localhost ~]# make                #编译
[root@localhost ~]# make PREFIX=/usr/local/redis install    #指定安装位置

 系统环境

[root@localhost redis-6.2.4]# ln -s /usr/local/redis/bin/* /usr/local/bin/

创建配置文件位置

[root@localhost redis-6.2.4]# mkdir /etc/redis

复制配置文件至/etc/redis

[root@localhost redis-6.2.4]# cp redis.conf /etc/redis/6379.conf

 使systemd可以使用redis命令

[root@localhost redis-6.2.4]# cd /lib/systemd/system
[root@localhost system]# vim redis.service
[Unit]
Description=redis
After=network.target[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /etc/redis/6379.conf[Install]
WantedBy=multi-user.target

修改配置文件

[root@localhost system]# vim /etc/redis/6379.conf
75
101:bind 127.0.0.1 192.168.10.101	#监听本机
102:bind 127.0.0.1 192.168.10.102
103:bind 127.0.0.1 192.168.10.103
257
daemonize yes
302
logfile "/var/log/redis_6379.log"

重载下systemd的配置

[root@localhost system]# systemctl daemon-reloa

启动redis

[root@localhost ]# systemctl start redis

可以通过查看端口查看redis运行起来了没

[root@localhost system]# netstat -anpt |grep redis

两个从节点需要更改以下配置

[root@localhost system]# vim /etc/redis/6379.conf
478行
replicaof 192.168.10.101 6379    将master指向101

验证:

登录主节点 查看状态

[root@localhost system]# redis-cli
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.10.103,port=6379,state=online,offset=337325,lag=0
slave1:ip=192.168.10.102,port=6379,state=online,offset=337325,lag=0
master_failover_state:no-failover
master_replid:4b5a90d4742ac9ebfa4eda62a8274b2b56c21e31
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:337465
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:337465

Redis哨兵

三台哨兵 上面主从就不用更改了

三台哨兵配置一样

关闭防火墙以及系统内核

[root@localhost ~]# systemctl stop firewalld        #防火墙
[root@localhost ~]# setenforce 0                #内核

下载Redis所需要的插件

[root@localhost ~]# dnf -y install gcc

解压

[root@localhost ~]# tar zxf redis-6.2.4.tar.gz

编译

[root@localhost ~]# cd redis-6.2.4
[root@localhost ~]# make
[root@localhost redis-6.2.4]# make install		#这里make指定安装位置不一定生效 我查看过 没有被移动到指定的安装位置 主从可以指定安装位置并且 生效 哨兵不太行

移动到我们所需要的安装位置

[root@localhost ~]# mv redis-6.2.4 /usr/local/redis	#移动至我们所需要的位置

创建配置文件路径

[root@localhost redis-6.2.4]# mkdir /etc/redis

将配置文件复制过来

[root@localhost redis-6.2.4]# cp redis.conf /etc/redis/6379.conf

环境变量

[root@localhost redis-6.2.4]# ln -s /usr/local/redis/bin/* /usr/local/bin/

修改配置文件

[root@localhost redis-6.2.4]# vim /etc/redis/6379.conf
75行
bind 0.0.0.0
257行
daemonize yes
#末尾添加	shift+G查看文件末尾
sentinel monitor master 192.168.10.101 6379 2

支持systemd命令

[root@localhost system]# vim redis.service
[Unit]
Description=redis
After=network.target[Service]
Type=forking
ExecStart=/usr/local/bin/redis-sentinel /etc/redis/6379.conf[Install]
WantedBy=multi-user.target

重载启动

[root@localhost system]# systemctl daemon-reload
[root@localhost bin]# systemctl start redis

查看哨兵运行状态

[root@localhost ~]# netstat -anpt |grep redis
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      6422/redis-sentinel 
tcp        0      0 192.168.10.104:52701    192.168.10.102:6379     ESTABLISHED 6422/redis-sentinel 
tcp        0      0 192.168.10.104:6379     192.168.10.105:50665    ESTABLISHED 6422/redis-sentinel 
tcp        0      0 192.168.10.104:37157    192.168.10.101:6379     ESTABLISHED 6422/redis-sentinel 
tcp        0      0 192.168.10.104:45287    192.168.10.106:6379     ESTABLISHED 6422/redis-sentinel 
tcp        0      0 192.168.10.104:48779    192.168.10.103:6379     ESTABLISHED 6422/redis-sentinel 
tcp        0      0 192.168.10.104:33239    192.168.10.103:6379     ESTABLISHED 6422/redis-sentinel 
tcp        0      0 192.168.10.104:57135    192.168.10.101:6379     ESTABLISHED 6422/redis-sentinel 
tcp        0      0 192.168.10.104:51199    192.168.10.102:6379     ESTABLISHED 6422/redis-sentinel 
tcp        0      0 192.168.10.104:6379     192.168.10.106:51629    ESTABLISHED 6422/redis-sentinel 
tcp        0      0 192.168.10.104:56731    192.168.10.105:6379     ESTABLISHED 6422/redis-sentinel 

登录哨兵查看节点信息

[root@localhost ~]# redis-cli
127.0.0.1:6379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=master,status=ok,address=192.168.10.101:6379,slaves=2,sentinels=3masters=一个主节点
slaves=两个从节点
sentinels=三台哨兵

后续可以登录到主节点给主节点整坏 关闭pc或者停止redis的运行

主从整坏:给主节点redis停止运行

从节点切换主

slaveof on one
info replication    #查看状态

从就是主了,但03从的主还是101,并不是很实用,所以还是给101启动起来将02改回去

slaveof 192.168.10.101 6379

哨兵:给主节点关闭或者停止

查看哨兵状态 哨兵会以投票的方式选出新的主,原来的主修好后并不会抢占新的主 

http://www.xdnf.cn/news/950437.html

相关文章:

  • LLM基础5_从零开始实现 GPT 模型
  • CMIP6气候模式资料概览
  • 免费在线PDF转图片工具
  • gephi绘制网络拓扑图:批量给节点着色
  • nginx安装和部署
  • 免费PDF转图片工具
  • NVIDIA CUDA 技术详解:开启 GPU 并行计算的大门
  • CocosCreator 之 JavaScript/TypeScript和Java的相互交互
  • 创建型模式-单例模式
  • Python网页自动化Selenium中文文档
  • 24.解释器模式:思考与解读
  • 从零手写Java版本的LSM Tree (四):SSTable 磁盘存储
  • 9个数据分析指令为工作赋能
  • 升级背后:CANOPEN转MODBUS TCP技术如何实现精准控制?
  • 精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
  • SFTrack:面向警务无人机的自适应多目标跟踪算法——突破小尺度高速运动目标的追踪瓶颈
  • C# 表达式和运算符(求值顺序)
  • 李沐--动手学深度学习--GRU
  • RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
  • 人工智能与无人机的组合如何撕开俄空天军的 “核心“
  • [docker]镜像操作:关于docker pull、save、load一些疑惑解答
  • ubuntu 22.04搭建SOC开发环境
  • “详规一张图”——新加坡土地利用数据
  • 使用大模型预测巨细胞病毒视网膜炎的技术方案
  • 【AI学习】李广密与阶跃星辰首席科学家张祥雨对谈:多模态发展的历史和未来
  • 【向量库】Weaviate概述与架构解析
  • 如何做好一份技术文档?从规划到实践的完整指南
  • 无人机视觉跟踪模块技术解析!
  • 无人机EN 18031欧盟网络安全认证详细解读
  • EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势