redis-高可用方案-主从-哨兵

Redis的高可用性通过主从复制和哨兵系统实现。主从复制确保数据冗余,哨兵系统监控主从状态,自动进行故障切换。哨兵是一个分布式系统,监控主从节点,当主节点下线时, Sentinel集群会选举新的主节点并通知其他从节点,保证服务不间断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

redis-高可用方案

“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
CAP的A AP模型
单机的Redis是无法保证高可用性的,当Redis服务器宕机后,即使在有持久化的机制下也无法保证不丢失数据。

所以我们采用Redis多机和集群的方式来保证Redis的高可用性。
单进程+单线程 + 多机 (集群)

主从复制

Redis支持主从复制功能,可以通过执行slaveof(Redis5以后改成replicaof)或者在配置文件中设置slaveof(Redis5以后改成replicaof)来开启复制功能
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 主对外从对内,主可写从不可写
  • 主挂了,从不可为主

主从配置

主Redis配置
无需特殊配置

从Redis配置

修改从服务器上的 redis.conf 文件:

# slaveof <masterip> <masterport>
# 表示当前【从服务器】对应的【主服务器】的IP是192.168.10.135,端口是6379。
replicaof 127.0.0.1 6379
作用

读写分离
一主多从,主从同步
主负责写,从负责读
提升Redis的性能和吞吐量
主从的数据一致性问题

数据容灾

从机是主机的备份
主机宕机,从机可读不可写
默认情况下主机宕机后,从机不可为主机
利用哨兵可以实现主从切换,做到高可用

原理与实现

复制流程

保存主节点信息

当客户端向从服务器发送slaveof(replicaof) 主机地址(127.0.0.1) 端口(6379)时:从服务器将主机ip(127.0.0.1)和端口(6379)保存到redisServer的masterhost和masterport中

Struct redisServer{
   
char *masterhost;//主服务器ip
int masterport;//主服务器端口
} ;

从服务器将向发送SLAVEOF命令的客户端返回OK,表示复制指令已经被接收,而实际上复制工作是在OK返回之后进行。

建立socket连接

slaver与master建立socket连接
slaver关联文件事件处理器
该处理器接收RDB文件(全量复制)、接收Master传播来的写命令(增量复制)
在这里插入图片描述
主服务器accept从服务器Socket连接后,创建相应的客户端状态。相当于从服务器是主服务器的Client端
在这里插入图片描述

发送ping命令

Slaver向Master发送ping命令
1、检测socket的读写状态
2、检测Master能否正常处理

Master的响应:

1、发送“pong” , 说明正常
2、返回错误,说明Master不正常
3、timeout,说明网络超时
在这里插入图片描述
权限验证
主从正常连接后,进行权限验证
主未设置密码(requirepass=“”) ,从也不用设置密码(masterauth=“”)
主设置密码(requirepass!=""),从需要设置密码(masterauth=主的requirepass的值)
或者从通过auth命令向主发送密码
在这里插入图片描述

发送端口信息

在身份验证步骤之后,从服务器将执行命令REPLCONF listening-port ,向主服务器发送从服务器的监听端口号。
在这里插入图片描述

同步数据

Redis 2.8之后分为全量同步和增量同步

命令传播

当同步数据完成后,主从服务器就会进入命令传播阶段,主服务器只要将自己执行的写命令发送给从服务器,而从服务器只要一直执行并接收主服务器发来的写命令

同步数据集

Redis 2.8以前使用SYNC命令同步复制
Redis 2.8之后采用PSYNC命令替代SYNC

旧版本

Redis 2.8以前
实现方式
Redis的同步功能分为同步(sync)和命令传播(command propagate)。

1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值