Rdis主从复制

root
233
文章
0
评论
2021年3月3日11:42:45 评论 1748字阅读5分49秒

Rdis主从复制

多台服务器连接方案

提供数据房:master

  • 主服务器,主节点,主库
  • 主客户端

接收数据方:salve

  • 从服务器,从节点,从库
  • 从客户端

需要解决的问题:

  • 数据同步

主从复制

主从复制即将master中的数据及时,有效的复制到slave中

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

职责:

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

主从复制过程大体可分为3个阶段

  • 建立连接阶段
  • 数据同步阶段
  • 命令传播阶段

阶段一:建立连接阶段工作流程

  • 设置master的地址和端口,保存master信息
  • 建立socket连接
  • 发送ping命令(定时器任务)

方法一:在master节点的配置文件内添加slave的IP与端口 

slaveof 127.0.0.1 6379

方法二:启动服务器参数(命令行)

slaveof ip port

从客户端断开与master连接

slaveof no one

授权访问

master设置密码

方法一:master配置文件设置密码,在配置文件里添加

requirepass  <password>

方法二:master客户端发送命令设置密码(命令行)

config set requirepass <password>

 

master设置了密码,slave要使用master的 密码进行连接

方法一:slave的配置文件中,写上master的密码

masterauth <password>

方法二:slave客户端发送命令设置密码

auth <password>

 

阶段二:数据同步阶段工作流程

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

步骤1:请求同步数据

步骤2:创建RDB同步数据

步骤3:恢复RDB同步数据

步骤4:请求部分同步数据

数据同步master注意事项:

  • 如果master数据量大,数据同步阶段应避开流量高分期,避免造成master阻塞
  • master复制缓存区大小设定不合理,会导致数据溢出。如果进行全量复制,时间过长,进行部分数据复制的时候发现已经存在丢失的情况,必须进行第二次全量复制,致使slave陷入死循环
//同步数据块的大小,默认是1mb
repl-backlog-size 1mb
  • master单机内存占用主机内存的比例不应过大,建议使用50%-70%的内存,留下30%-50%的内存执行bgsave命令和创建复制缓冲区

 

数据同步slave注意事项:

  • 为避免slave进行全量复制,部分复制时服务器响应阻塞或数据不同步,建议关闭此期间的对外服务
slave-serve-stale-data yes|no
  • 数据同步阶段,master发送给slave信息可以理解master是slave的一个客户端,主动向slave发送命令
  • 多个slave同时对master请求数据同步,要错开

复制缓冲区

概念:复制缓冲区,又名复制积压缓存区,是一个先进县出的队列,用于存储服务器执行过的命令,每次传播命令,,master都会将传播的命令记录下来,并存储在复制缓冲区

复制缓冲区默认存储空间是1M,由于存储空间大小是固定的,当入队元素的数量大于队列大小的时候,最先入队的数据会被挤出去

心跳机制

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

master心跳:

  • 指令:PING
  • 周期:由repl-ping-slave-period决定,默认10s
  • 作用:判断slave是否在线

slave心跳任务:

  • 指令:REPLCONF ACK【offset】
  • 周期:1s
  • 作用:请求master的数据,查看master是否在线

心跳阶段注意事项

  • 当slave多数掉线,或延迟过高时,master位保障数据稳定性,将拒绝所有信息同步操作
min-slaves-to-write 2
min-slaves-max-lag 8
  • slave数量小于2个,或所有slave的延迟都大于10s时。强制关闭master写功能,停止数据同步
  • slave数量由slave发送REPLCONF ACK命令确认
  • slave延迟由slave发送REPLCONF ACK命令做确认

 

 

 

 

 

 

 

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年3月3日11:42:45
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
CI/CD-云主机场景-[持续部署|cicd设计] CI/CD实践

CI/CD-云主机场景-[持续部署|cicd设计]

CI/CD-云主机场景的持续部署实践 0. 准备工作项目标准化 公司里面要使用流水线要做持续集成CI/CD的项目越来越多,这对流水线的设计和开发有不同的要求。我们经常听到用户的反馈: 各种不同语言的技...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: