Redis 集群-高可用主从复制

互联网追求的三高:

高并发: 支持更多的用户同时访问

高可用: 提供的服务时长更长(宕机时间少)

高性能: 业务处理速度时间更短

服务器可用性的计算公式:

假如某个公司的服务器全年出现总宕机时长为866467秒, 而一年有31536000秒,那么该服务器的可用性为:

业界追求的可用性目标: 99.99%(理论) ,即服务器总宕机时长应少于315秒, 也就是5.25分钟. 

Redis高可用(主从复制)

redis实现高可用的方案: 主从复制

为了避免单点(单台)Redis服务器故障,准备多台服务器,互相连通。将数据复制多个副本保存在不同的服务器上,连接在一起,并保证数据是同步的。即使有其中一台服务器宕机,其他服务器依然可以继续提供服务,实现Redis的高可用,同时实现数据冗余备份。

主从复制特征:一个master可以拥有多个slave,一个slave只对应一个master

提供数据方:master (主服务器,主节点,主库)

  • 写数据
  • 执行写操作时,将出现变化的数据自动同步到slave
  • 禁止读数据

接收数据方:slave (从服务器,从节点,从库)

  • 读数据
  • 禁止写数据

主从复制核心工作: 数据同步,将master中的数据即时、有效的复制到slave中

由于slave的数据都是由master同步过来的,当master宕机,可以让其中一台slave变成master,由它将后续新写入的数据同步到其他slave上

主从复制的作用:

  • 读写分离:master写、slave读,提高服务器的读写负载能力
  • 负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量
  • 故障恢复:当master出现问题时,由slave提供服务,实现快速的故障恢复
  • 数据冗余:实现数据热备份,是持久化之外的一种数据冗余方式
  • 高可用基石:基于主从复制,构建哨兵模式与集群,实现Redis的高可用方案

主从复制工作流程:

⑴.建立连接阶段

建立slave到master的连接,使master能够识别slave,并保存slave端口号

方式一:从slave客户端发送命令

slaveof <masterip> <masterport>

方式二:slave启动服务器参数

redis-server -slaveof <masterip> <masterport>

方式三:slave配置文件连接

slaveof <masterip> <masterport>

⑵.数据同步阶段

在slave初次连接master后,复制master中的所有数据到slave
将slave的数据库状态更新成master当前的数据库状态

同步阶段master注意事项:

1. 如果master数据量巨大,数据同步阶段应避开流量高峰期,避免造成master阻塞,影响业务正常执行
2. 复制缓冲区大小设定不合理,会导致数据溢出。如进行全量复制周期太长,进行部分复制时发现数据已
经存在丢失的情况,必须进行第二次全量复制,会致使slave陷入死循环状态。

3. master单机内存占用主机内存的比例不应过大,建议使用50%-70%的内存,留下30%-50%的内存用于执
行bgsave命令和创建复制缓冲区

master配置文件中修改缓冲区大小:
repl-backlog-size 1mb  # 默认大小1兆

同步阶段slave注意事项:

1. 为避免slave进行全量复制、部分复制时服务器响应阻塞或数据不同步,建议关闭此期间的对外服务

slave配置文件中修改
slave-serve-stale-data yes|no

2. 数据同步阶段,master发送给slave信息可以理解master是slave的一个客户端,主动向slave发送
命令
3. 多个slave同时对master请求数据同步,master发送的RDB文件增多,会对带宽造成巨大冲击,如果master带宽不足,因此数据同步需要根据业务需求,适量错峰
4. slave过多时,建议调整拓扑结构,由一主多从结构变为树状结构,中间的节点既是master,也是slave。注意使用树状结构时,由于层级深度,导致深度越高的slave与最顶层master间数据同步延迟较大,数据一致性变差,应谨慎选择

⑶.命令传播阶段

当master数据库状态被修改后,导致主从服务器数据库状态不一致,此时需要让主从数据同步到一致的
状态,同步的动作称为命令传播
master将接收到的数据变更命令发送给slave,slave接收命令后执行命令

心跳机制

进入命令传播阶段候,master与slave间需要进行信息交换,使用心跳机制进行维护,实现双方连接保持在线

master心跳:

  • 指令:PING
  • 周期:由repl-ping-slave-period决定,默认10秒
  • 作用:判断slave是否在线
  • 查询:INFO replication 获取slave最后一次连接时间间隔,lag项维持在0或1视为正常

slave心跳任务

  • 指令:REPLCONF ACK {offset}
  • 周期:1秒
  • 作用1:汇报slave自己的复制偏移量,获取最新的数据变更指令
  • 作用2:判断master是否在线

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。   本课程主要讲解以下内容:1. Redis的基本使用2. Redis数据库的数据类型3. Redis数据库数据管理4. Redis主从复制5. Redis数据库的持久性6. Redis的高可靠性和集群7. Redis的优化和性能测试8. Redis服务器的维护和管理9. Redis服务器的常见问题排错 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值