Redis详解(五)——主从复制

Redis详解(五)——主从复制

面临问题

  1. 机器故障。咱们部署到一台 Redis 服务器,当发生机器故障时,须要迁移到另一台服务器而且要保证数据是同步的。而数据是最重要的,若是你不在意,基本上也就不会使用 Redis 了。
  2. 容量瓶颈。当咱们有需求须要扩容 Redis 内存时,从 16G 的内存升到 64G,单机确定是知足不了。固然,你能够从新买个 128G 的新机器。

解决办法

要实现分布式数据库的更大的存储容量和承受高并发访问量,咱们会将原来集中式数据库的数据分别存储到其余多个网络节点上。redis

Redis 为了解决这个单一节点的问题,也会把数据复制多个副本部署到其余节点上进行复制,实现 Redis的高可用,实现对数据的冗余备份,从而保证数据和服务的高可用。数据库

主从复制

什么是主从复制

主从复制,是指将一台Redis服务器的数据,复制到其余的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到从节点。服务器

默认状况下,每台Redis服务器都是主节点;且一个主节点能够有多个从节点(或没有从节点),但一个从节点只能有一个主节点。网络

主从复制的做用

  1. 数据冗余:主从复制实现了数据的热备份,是持久化以外的一种数据冗余方式。
  2. 故障恢复:当主节点出现问题时,能够由从节点提供服务,实现快速的故障恢复;其实是一种服务的冗余。
  3. 负载均衡:在主从复制的基础上,配合读写分离,能够由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用链接主节点,读Redis数据时应用链接从节点),分担服务器负载;尤为是在写少读多的场景下,经过多个从节点分担读负载,能够大大提升Redis服务器的并发量。
  4. 读写分离:能够用于实现读写分离,主库写、从库读,读写分离不只能够提升服务器的负载能力,同时可根据需求的变化,改变从库的数量;
  5. 高可用基石:除了上述做用之外,主从复制仍是哨兵和集群可以实施的基础,所以说主从复制是Redis高可用的基础。

主从复制启用

从节点开启主从复制,有3种方式:并发

  1. 配置文件: 在从服务器的配置文件中加入:slaveof <masterip> <masterport>
  2. 启动命令: redis-server启动命令后加入 --slaveof <masterip> <masterport>
  3. 客户端命令: Redis服务器启动后,直接经过客户端执行命令:slaveof <masterip> <masterport>,则该Redis实例成为从节点。

主从复制原理

主从复制过程大致能够分为3个阶段:链接创建阶段(即准备阶段)、数据同步阶段、命令传播阶段。负载均衡

创建链接阶段

数据同步阶段

注意:分布式

master高并发

  1. 若是master数据量巨大,数据同步阶段应避开流量高峰期,避免形成master阻塞,影响业务正常进行。
  2. 复制缓冲区大小设定不合理,会致使数据益处。如进行全量复制周期太长,进行部分复制时发现数据已经存在丢失状况,必须进行第二次全量复制,知识slave陷入死循环。
  3. master单机内存占用主机内存的比例不该过大,建议使用50%-70%,留下30%-50%的内存用于执行bgsave命令和建立复制缓冲区

slaveserver

  1. 为了不slave进行全量复制、部分复制时服务器响应阻塞或数据不一样步,建议关闭此期间对外服务
  2. 多个slave同时对master请求数据同步,master发送的RDB文件会增多,会对带宽形成巨大冲击,若是master带宽不足,所以数据同步须要根据业务需求,适量错峰
  3. slave过多时,建议调整拓扑结构,由一主多从结构变为树状结构,中间的节点即时master,也是slave。注意使用树状结构时,因为层级深度,致使深度越高的slave与最顶层master间数据同步延迟较大,数据一致性变差,应谨慎选择
命令传播阶段

服务器运行ID(runid)blog

  • 概念:服务器运行ID是每一台服务器每次运行的身份识别码,一台服务器屡次运行能够生成多个运行ID
  • 组成:运行ID由40位字符组成,是一个随机的16进制字符
  • 做用:运行ID被用于在服务器间进行传输,识别身份。若是想两次操做均对同一台服务器进行,必须每次操做携带对应的运行ID,用于对方识别
  • 实现方式:运行ID在每台服务器启动时自动生成,master首次链接slave时,会将本身的运行id发送给slave,slave保存 此ID。

设置复制缓冲区的大小

  • 测算从master到slave的重连平均时长second
  • 获取master平均每秒产生写命令数据总量write_size_per_second
  • 最优复制缓冲区大小 = 2 * write_size_per_second

心跳机制

相关文章
相关标签/搜索