首页 > 数据库 >Redis高可用部署

Redis高可用部署

时间:2024-12-23 15:59:21浏览次数:6  
标签:命令 可用 部署 Redis sentinel master Sentinel 节点

Redis常见架构

Redis 实现高可用有三种部署模式:主从模式,哨兵模式,集群模式。

主从模式

主从模式中,Redis部署了多台机器,主节点负责读写操作,从节点只负责读操作。从节点的数据来自主节点,实现原理就是主从复制机制。主从复制包括全量复制,增量复制两种。一般当slave第一次启动连接master,或者认为是第一次连接,就采用全量复制;slave与master全量同步之后,master上的数据,如果再次发生更新,就会触发增量复制。但无法做到故障自动切换,需要人工将从节点晋升为主节点,同时还要通知应用方更新主节点地址。

哨兵模式

由一个或多个Sentinel实例组成的Sentinel系统,它可以监视所有的Redis主节点和从节点,并在被监视的主节点进入下线状态时,自动将下线主服务器属下的某个从节点升级为新的主节点。但是一个哨兵进程对Redis节点进行监控,就可能会出现问题(单点问题),因此,可以使用多个哨兵来进行监控Redis节点,并且各个哨兵之间还会进行通讯。

故障切换过程:假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行 failover 过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象称为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行 failover 操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。

  1. Sentinel 集群通过给定的配置文件发现 master,启动时会监控 master。通过向 master 发送 info 信息获得主节点下面的所有从节点。
  2. Sentinel 集群通过命令连接向被监视的主从服务器发送 hello 信息 (每秒一次),该信息包括 Sentinel 本身的 IP、端口、id 等内容,以此来向其他 Sentinel 宣告自己的存在。
  3. Sentinel 集群通过订阅连接接收其他 Sentinel 发送的 hello 信息,以此来发现监视同一个主服务器的其他 Sentinel;集群之间会互相创建命令连接用于通信,因为已经有主从服务器作为发送和接收 hello 信息的中介,Sentinel 之间不会创建订阅连接。
  4. Sentinel 集群使用 ping 命令来检测实例的状态,如果在指定的时间内(down-after-milliseconds)没有回复或则返回错误的回复,那么该实例被判为下线。
  5. 当 failover 主备切换被触发后,failover 并不会马上进行,还需要 Sentinel 中的大多数 Sentinel 授权后才可以进行 failover,即进行 failover 的 Sentinel 会去获得指定 quorum 个的 Sentinel 的授权,成功后进入 ODOWN 状态。如在 5 个 Sentinel 中配置了 2 个 quorum,等到 2 个 Sentinel 认为 master 死了就执行 failover。
  6. Sentinel 向选为 master 的 slave 发送 SLAVEOF NO ONE 命令,选择 slave 的条件是 Sentinel 首先会根据 slaves 的优先级来进行排序,优先级越小排名越靠前。如果优先级相同,则查看复制的下标,哪个从 master 接收的复制数据多,哪个就靠前。如果优先级和下标都相同,就选择进程 ID 较小的。
  7. Sentinel 被授权后,它将会获得宕掉的 master 的一份最新配置版本号 (config-epoch),当 failover 执行结束以后,这个版本号将会被用于最新的配置,通过广播形式通知其它 Sentinel,其它的 Sentinel 则更新对应 master 的配置。

1 到 3 是自动发现机制:

  • 以 10 秒一次的频率,向被监视的 master 发送 info 命令,根据回复获取 master 当前信息。
  • 以 1 秒一次的频率,向所有 redis 服务器、包含 Sentinel 在内发送 PING 命令,通过回复判断服务器是否在线。
  • 以 2 秒一次的频率,通过向所有被监视的 master,slave 服务器发送当前 Sentinel master 信息的消息。

4 是检测机制,5 和 6 是 failover 机制,7 是更新配置机制。

Cluster集群模式

(待补充)

实际应用

redis哨兵模式部署架构图

数据持久化

RDB(快照)和AOF(追加文件)两种持久化机制。

RDB 是一个压缩的二进制文件,保存的是 Redis 数据库的 key-value 数据。AOF 是保存 Redis 执行的写命令的文本文件。当 Redis 服务器宕机的时候,可以通过这两种文件进行恢复,Redis 启动时会优先加载 AOF 文件,如果 AOF 文件不存在,则加载 RDB 文件。

主从复制

  1. 初始同步
    1. 从节点发送 PSYNC 命令到主节点,主节点接收到后,会开始生成一个 RDB 快照并将其发送到从节点。
    2. 从节点接收到 RDB 文件后,加载数据并初始化自己的数据集。
  2. 增量同步
    1. 主节点命令传播
      1. 命令日志:在 Redis 中,主节点会为每个写操作(如 SETDEL 等)生成一个命令,并将这些命令记录在一个叫做 复制缓冲区(replication buffer)的内存结构中。
      2. 命令传播:主节点会在执行写操作后,将这些命令发送到所有连接的从节点。每个从节点都与主节点保持一个持久的 TCP 连接,主节点会通过这个连接将命令传递给从节点。
    2. 从节点接收命令
      1. 接收命令:从节点在与主节点的连接中会持续监听来自主节点的命令,这些命令是以文本形式发送的。
      2. 执行命令:从节点接收到命令后,会立即执行这些命令,以保持数据与主节点的一致性。例如,当主节点执行 SET key value 时,从节点也会执行相同的命令来更新自己的数据。

配置文件相关

主(从)redis配置文件

##NETWORK
bind 0.0.0.0 #允许所有ip连接
port 6379

##GENERAL
daemonize yes

##SNAPSHOTTING
dir "/redis"
pidfile "redis.pid"
loglevel notice
logfile "redis.log"

##REPLICATION
masterauth "password"
repl-backlog-size 800mb #设置复制缓冲区大小
repl-backlog-ttl 7200 #设置复制缓冲区超时时间
replica-priority 15 #设置从节点优先级
repl-timeout 600 #设置复制超时时间

##SECURITY
requirepass "password"
rename-command FLUSHALL ""
rename-command KEYS ""

##APPEND ONLY MODE
appendonly yes #开启 AOF 持久化
appendfsync everysec # 每秒同步一次

# RDB 快照保存条件
save 900 1   # 900秒内至少有1个key被修改
save 300 100 # 300秒内至少有100个key被修改
save 60 1000 # 60秒内至少有1000个key被修改
##################从节点配置#####################
#设置客户端输出缓冲区大小
client-output-buffer-limit normal 0 0 0 
#设置从节点输出缓冲区大小
client-output-buffer-limit replica 800mb 256mb 600 
no-appendfsync-on-rewrite yes #在AOF重写期间禁用fsync操作
replicaof 1.1.1.1 6379 #建立主从复制

哨兵配置文件

bind 0.0.0.0
port 6378

daemonize yes

dir "/sentinel"
pidfile "./sentinel.pid"
logfile "./sentinel.log"

sentinel myid * #唯一标识,用*代替
sentinel deny-scripts-reconfig yes
requirepass "password"

#监控的主节点,需要至少2个 Sentinel 同意才能进行故障转移
sentinel monitor redismaster 1.1.1.1 6379 2 
sentinel auth-pass redismaster password

#配置纪元,用于在 Sentinel 之间传播配置变更
sentinel config-epoch redismaster 2065140
#领导者纪元,用于在 Sentinel 之间选举领导者
sentinel leader-epoch redismaster 2065141 

maxclients 4064
protected-mode no
supervised systemd

#未配置down-after-milliseconds和failover-timeout
#down-after-milliseconds 默认值为 30000 毫秒(30秒)
#failover-timeout 默认值为 180000 毫秒(3分钟)

#已知从节点信息
sentinel known-replica redismaster 2.2.2.2 6379
sentinel known-replica redismaster 3.3.3.3 6379
sentinel known-replica redismaster 4.4.4.4 6379

#已知其他sentinel信息
sentinel known-sentinel redismaster 11.11.11.11 6378 *
sentinel known-sentinel redismaster 22.22.22.22 6378 *

参考链接:

Redis高可用方案汇总 - 郭慕荣 - 博客园

标签:命令,可用,部署,Redis,sentinel,master,Sentinel,节点
From: https://blog.csdn.net/2301_76171195/article/details/144432730

相关文章

  • 通过云主机调用API,一键训练部署商品问答模型
    本文分享自华为云社区《【开发者空间实践指导】CodeArtsIDE调用API训练商品问答模型》,作者:开发者空间小蜜蜂。一、案例介绍在电子商务领域,售前和售后服务是确保客户满意度和提升品牌忠诚度的重要环节。随着互联网技术的发展和消费者购物习惯的变化,线上购物已成为主流。然而,线上......
  • 《深入剖析Redisson源码》揭秘Redisson分布式锁原理(可重入锁机制、PubSub可重试机制、
    Hiヽ(゜▽゜)-欢迎来到蓝染Aizen的CSDN博客~......
  • 基于SpringBoot+Vue的在大学生实践教学过程中的应用系统的设计与实现(源码+lw+部署+讲
    文章目录1.前言2.详细视频演示3.具体实现截图4.技术可行性分析5.技术简介5.1后端框架SpringBoot5.2前端框架Vue5.3系统开发平台6.系统架构设计7.程序操作流程8.业务流程设计9.为什么选择我们9.1自己的公众号9.2海量实战案例10.代码参考11.数据库参考12.源码及文档获取......
  • node.js基于Web的大学生兼职系统程序+论文 可用于毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于大学生兼职系统的研究,现有研究主要以线下兼职服务平台为主,专门针对基于Web的大学生兼职系统的研究较少。随着互联网的普及,大学生兼职方式逐渐向线上......
  • node.js基于web的精品课程网站程序+论文 可用于毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于精品课程网站的研究,现有研究主要以传统教育模式下的课程资源整合为主,专门针对基于web的精品课程网站的研究较少。在国内外,很多高校和教育机构都在积......
  • ssm基于项目驱动的课程管理系统1u51b程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容项目名称:基于项目驱动的课程管理系统一、项目背景随着教育信息化的不断发展,传统的教学管理模式已难以满足现代教育的需求。课程管理作为教育管理......
  • ssm基于物联网的医疗数据采集传输系统466r4(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景及意义随着物联网技术的飞速发展,其在医疗健康领域的应用日益广泛。传统的医疗数据采集方式多依赖于手工记录和定期体检,耗时耗力且无法......
  • 基于ssm的智能手机实体店管理系统2fnly--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景随着移动互联网技术的快速发展,智能手机实体店面临着日益激烈的市场竞争。为了提高管理效率和服务质量,开发一套基于SSM(Spring、SpringM......
  • Redis 事务处理:保证数据完整性
    一、Redis事务机制概览1.1事务基础命令解析Redis的事务是通过MULTI、EXEC、DISCARD和WATCH这四个原语实现的。MULTI命令用于开启一个事务,它总是返回OK。MULTI执行之后,客户端可以继续向服务器发送任意多条命令,这些命令不会立即被执行,而是被放到一个队列中,当EXEC......
  • Redis 持久化机制详解
    一、Redis持久化机制之基石:引言在当今数据驱动的时代,数据的安全性与可靠性犹如基石之于高楼,其重要性不言而喻。Redis,这款广受欢迎的内存数据库,以其卓越的性能在众多应用场景中大放异彩。然而,内存数据的易失性始终是一把悬于头顶的达摩克利斯之剑,一旦服务器遭遇意外,如宕机、断......