Redis笔记(5)

八、主从复制
1.多台服务连接方案
  • 提供数据方:master
    • 主服务器、主节点、主库、主客户端
  • 接受数据方:slave
    • 从服务器、从节点、从库、从客户端
2.主从复制简介

主从复制是将master中的数据即时、有效的复制到slave中。

  • 特征:一个master可以拥有多个slave,一个slave只对应一个master
  • 职责:
    • master:
      • 写数据
      • 执行写操作时,将出现变化的数据自动同步到slave
      • 读数据(可忽略)
    • slave:
      • 读数据
      • 写数据(禁止)
2.主从复制作用
  • 读写分离:master写、slave读,提高服务器的读写负载能力
  • 负载均衡:基于主从结构,配合读写分离,由slave分担master负载,并根据需求的变化,改变slave的数量,通过多个从节点分担数据读取负载,大大提高Redis服务器并发量与数据吞吐量
  • 故障恢复:当master出现问题时,由slace提供服务,实现快速的故障恢复
  • 数据冗余:实现数据热备份,是持久化之外的一种数据冗余方式
2.主从复制工作流程
  • 建立连接阶段(即准备阶段)
  • 数据同步阶段
  • 命令传播阶段
2.1 阶段一:建立连接阶段
  • 建立slave到master的连接,使master能识别到slave,并保存slave端口号
masterslave
-1⃣️:发送指令
2⃣️:接收到指令,响应对方3⃣️:保存master的(masterhost)IP与端口(masterport)
-4⃣️:根据保存的信息创建连接master的socket
-5⃣️:周期性发送命令:ping
6⃣️:响应pong-
-7⃣️:发送指令:auth password
8⃣️:验证授权-
-9⃣️:发送指令:replconflistenning-port
1⃣️0⃣️:保存slave的端口号-

主从连接(slave连接master)

  • 方式一:客户端发送命令
slaveof <masterip> <masterport>
  • 方式二:启动服务器参数
redis-server -slaveof <masterip><masterport>
  • 方式三:服务器配置
slave <masterip><masterport>
  • slave系统信息
    • master_link_down_since_seconds
    • masterhost
    • masterport
  • master系统信息
    • slave_listenting_port(多个)

断开连接(slave端使用)

slave no one

授权访问

  • master通过配置文件设置密码
requirepass <password>
  • master客户端运行时,通过发送指令设置密码
config set requirepass <password>
config get requirepass
  • slave客户端通过发送命令输入密码打开
auth <password>
  • slave通过配置文件输入密码打开
masterauth <password>
  • slave启动客户端时输入密码打开
redis-cli -a <password>

2.2 阶段二:数据同步阶段
  • 在slave连接master后,复制master中的所有数据到slave中
  • 将slave的数据库状态更新成master当前的数据库状态

1⃣️~5⃣️:全量复制

6⃣️~8⃣️:部分复制

masterslave
-1⃣️:发送指令:pasync2(pro synchronize 2)
2⃣️:执行bgsave-
3⃣️:第一个slave连接时,创建命令缓冲区-
4⃣️:生成RDB文件,通过socket发送给slave-
-5⃣️:接受RDB,清空数据,执行RDB文件恢复过程
-6⃣️:发送命令告知RDB恢复已经完成
7⃣️:发送复制缓冲区的命令信息
-8⃣️:接受命令信息,执行bgwriteaof(aof命令重写),恢复余下的数据
-9⃣️:发送指令:???
1⃣️0⃣️接受到指令响应应对方-
  • 最终状态:

    • slave:具有master端全部数据,包含RDB过程接受的数据
    • master:保存slave当前数据同步的位置
  • master端的注意事项:

(1) 如果master数据量巨大,数据同步阶段应避开流量高峰期,避免造成master阻塞,影响业务正常执行

(2) 复制缓冲区大小设置不合理,会导致数据溢出。全量复制周期长的话,缓冲区命令丢失,随后必须要进行第二次全量复制,使salve陷入死循环。

repl-backlog-size 1mb  //设置复制缓冲区的大小

(3) master内存占用不应过大,建议使用50%~70%的内存,留下30%~50%的内存用于basave和创建复制缓冲区

  • slave端的注意事项:

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

slave-server-stale-data yes|no

(2) salve过多,master要发送的RDB文件会增多,对带宽影响较大,适量错峰


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

部分复制的核心三要素

  • 服务器的运行id(run id,用于认证master和slave之间的关系,master开了后,给slave一份,下次slave连接时,拿这个保证一样)
  • 主服务器的复制积压缓冲区(复制缓冲区,装操作命令的,由偏移量和字节值组成,栈,先进先出)
  • 主服务器的复制偏移量(slave记录,用于区分不同slave当前数据传播进度的差异,mater记录,用于断网恢复后,和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是否在线
  • slave多数都掉线了,或者延迟过高,master为保证数据稳定性,将拒绝所有的信息同步操作(用REPLCONF ACK{offset}确认slave的数量和延迟)
/*
slave数量少于2个,或所有slave的延迟都大于等于8秒,强制关闭master写功能,并且停止数据同步
*/
min-slaves-to-write 2 
min-slaves-max-lag 8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值