Centos下Redis 主从复制、哨兵模式的详解与部署

Centos下Redis 主从复制、哨兵模式的详解与部署

本文会先后介绍 Redis 主从复制与哨兵模式,之后会借助单台主机不同的端口搭建主从复制和哨兵模式

实际生产环境则需要不同的主机来部署,方式一样,只需要修改配置文件中的 IP 地址即可

附录为自动化代码

前言

主从复制:主从复制主要是实现数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复
缺点:无法保证主节点的高可用,没有解决master写的负载均衡

哨兵 (sentinel) 模式:基于主从复制的基础,是一个分布式系统,用于监控主从复制;实现自动故障转移(Automatic failover)
缺点:

  1. 主从模式切换需要时间会丢失数据,没有解决master写的负载均衡
  2. 无法对从节点进行自动故障转移,如果在读写分离的场景下,从节点故障会导致不可读,从节点需要额外的监控切换操作

主从复制

1、概念

Redis 的复制 (replication) 功能允许用户将一个 Redis 服务器的数据,复制到其他 Redis 服务器中。前者为主节点 (master),后者为从节点 (slave)

数据的复制是单向的,只能主节点到从节点;数据的复制分为全量同步和增量同步

主节点与从节点是一对多的关系,主节点可以有多个从节点或没有从节点,但从节点只能有一个主节点,Redis 的主从结构可以采用一主多从或级联结构
在这里插入图片描述

2、复制过程

Redis 默认使用的是异步复制,其特点是低延迟和高性能。主从复制依靠三个主要的机制:

  • 当一个 master 和一个 slave 连接正常时,master 会发送一连串的命令流来保持对 slave 的更新,以便于将自身数据集的改变复制给 slave,包括客户端写入、key 的过期或被逐出等等
  • 当 master 和 slave 之间的连接断开之后,因为网络问题、或者是主从意识到连接超时, slave 重新连接上 master 并会尝试进行部分重同步:这意味着它会尝试只获取在断开连接期间内丢失的命令流
  • 当无法进行部分重同步时, slave 会请求进行全量重同步。这会涉及到一个更复杂的过程,例如 master 需要创建所有数据的快照,将之发送给 slave ,之后在数据集更改时持续发送命令流到 slave

Redis 通过一对给定的 Replication ID,offset 来标识一个 master 数据集的确切版本。

  • Replication ID:一个较大的伪随机字符串,标记一个给定的数据集
  • offset (偏移量):master 将复制流发送给 slave 时,发送多少哥字节的数据,自身的偏移量就会增加多少;换句话说,偏移量记录了 master 数据的修改

当 slave 连接 master 时,使用 PSYNC 命令发送它们记录的旧 master replication ID 和处理的偏移量;通过此方式,master 仅发送 slave 所需的增量数据。但如果 master 缓冲区中没有足够的命令积压缓冲记录,或者 slave 引用了不存在或过期的 Replication ID,将会进行全量重同步

全量复制
在这里插入图片描述

增量复制
在这里插入图片描述

哨兵模式

Redis sentinel 主要是用于管理多个 Redis 服务器,是一个分布式监控 Redis 主从服务器系统,能够自动的应付各种各样的失败事件进行故障切换,无需人为干预。其四个功能如下:

  • 监控(Monitoring):Sentinel不断的去检查主从实例是否按照预期在工作
  • 通知(Notification):Sentinel可以通过一个api来通知系统管理员或者另外的应用程序,被监控的Redis实例有一些问题
  • 自动故障转移(Automatic failover):如果一个主节点没有按照预期工作,Sentinel会开始故障转移过程,把一个从节点提升为主节点,并重新配置其他的从节点使用新的主节点,使用Redis服务的应用程序在连接的时候也被通知新的地址
  • 配置提供者(Configuration provider):Sentinel给客户端的服务发现提供来源:对于一个给定的服务,客户端连接到Sentinels来寻找当前主节点的地址。当故障转移发生的时候,Sentinels将报告新的地址

Redis Sentinel 分布式的优势:

  1. 当多个Sentinel同意一个master不再可用的时候,就执行故障检测。这明显降低了错误概率
  2. 即使并非全部的Sentinel都在工作,Sentinel也可以正常工作,这种特性,让系统非常的健康

Redis 多哨兵模式
在这里插入图片描述

1) 主观下线
由哨兵节点定时监测节点状态,在规定的时间内 (down-after-milliseconds),Sentinel 节点向 redis服务器 发送一次 ping 命令做一次心跳检查。如果回复错误,则会被 Sentinel 节点判断服务器为 “主观下线”。当超过半数Sentinel节点判断 Master 主观下线,就是 “客观下线”

2) 客观下线
只适用 Master 服务器,Sentinel1 发现主服务器出现了故障,它会通过相应的命令,询问其它 Sentinel 节点对主服务器的状态判断。如果超过半数以上的 Sentinel 节点认为主服务器 down 掉,则 Sentinel1 节点判定主服务为 “客观下线”
3) 投票选举
master 服务器出现故障,Sentinel 节点会通过 Raft 算法 (选举算法) 来共同选举出一个故障转移和通知。主节点选举:

  • 过滤掉不健康的(已下线的),没有回复哨兵ping响应的从节点。
  • 选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)
  • 选择复制偏移量最大,也就是复制最完整的从节点。

整个流程总结:

Sentinel 负责监控主从节点的“健康”状态。当主节点挂掉时,自动选择一个最优的从节点切换为主节点。客户端来连接 Redis 集群时,会首先连接 Sentinel,通过 Sentinel 来查询主节点的地址,然后再去连接主节点进行数据交互。当主节点发生故障时,客户端会重新向 Sentinel 要地址,Sentinel 会将最新的主节点地址告诉客户端。因此应用程序无需重启即可自动完成主从节点切换。

配置过程(单机多端口)

后面的部署过程以单机多端口模式部署,如果是多机器部署,只需要修改 /etc/redis.conf/etc/redis-sentinel.con 这两个文件中的配置项后,通过 service redis restartservice redis-sentinel restart 重启服务即可

Redis-server 主从

  1. 安装
     yum install redis -y
     # 软连接
     ln -s /usr/local/redis/bin/* /usr/bin/
    
  2. 修改 redis.conf 文件
     # 备份
     cp /etc/redis.conf /etc/redis.conf.backup
     # 修改 /etc/redis.conf 文件中的 IP 绑定,因为同一台机器,所以一致 
     bind 127.0.0.1 172.16.30.16
     # 复制文件
     cp /etc/redis.conf /etc/redis_6379.conf
     cp /etc/redis.conf /etc/redis_6380.conf
     cp /etc/redis.conf /etc/redis_6381.conf
     # 差异化修改,主 redis_6379.conf
     port 6379 
     dbfilename dump-6379.rdb 
     requirepass new2020 # 密码
     pidfile /var/run/redis_6379.pid
     logfile  /var/log/redis/redis_6379.log
     # 从 redis_6380.conf redis_6381.conf
     port 6380 # 6381
     dbfilename dump-6380.rdb # 6381
     requirepass new2020 # 密码
     pidfile /var/run/redis_6380.pid # 6381
     logfile  /var/log/redis/redis_6380.log  # 6381
    
     masterauth new2020
     replicaof 172.16.30.16 6379
    
  3. 启动
     redis-server /etc/redis-6379.conf & # 6380 6381
    

Redis-sentinel 哨兵

  1. 修改 redis-sentinel.conf
     # 备份
     cp /etc/redis-sentinel.conf /etc/redis-sentinel.conf.backup
     # 配置监控主节点和密码 /etc/redis-sentinel.conf
     sentinel monitor mymaster 172.16.30.16 6379 2
     sentinel auth-pass mymaster new2020
     # 复制,哨兵模式是选举的方式,所以最少三个哨兵
     cp /etc/redis-sentinel.conf /etc/redis-sentinel_26379.conf 
     cp /etc/redis-sentinel.conf /etc/redis-sentinel_26380.conf 
     cp /etc/redis-sentinel.conf /etc/redis-sentinel_26381.conf 
     # 修改 /etc/redis-sentinel_(26379 26380 26381).conf  端口,pid
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以看出安装Redis主从和哨兵集群可以通过以下步骤完成: 1. 下载Redis源码包并解压到任意目录,例如/usr/local/redis-1.2.6。 2. 进入解压后的Redis目录,执行make命令进行编译。 3. 执行make install命令进行安装,可以指定安装目录,例如/usr/local/redis。 4. 安装完成后,可以通过/usr/local/redis/bin/redis-server命令启动Redis服务器。 关于SaltStack安装Redis主从和哨兵集群的具体步骤,可以参考提供的引用\[2\]中的文章《Redis-3.2.8的简易安装和主从配置》和《键值存储之外,Redis还有这些用法》。这些文章提供了详细的步骤和配置说明,可以帮助你完成安装和配置工作。 #### 引用[.reference_title] - *1* *2* [centos7 安装 Redis(资源)](https://blog.csdn.net/weixin_34235371/article/details/92412486)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Redis](https://blog.csdn.net/W_LTCY/article/details/121547924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值