IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis学习笔记--主从复制 -> 正文阅读

[大数据]Redis学习笔记--主从复制

概述

  • 高可用集群基础
  • master复制数据到slave
  • master:读写,写为主;多slave
  • slave:读,写禁止,唯一master
  • 可利用负载均衡提高并发和吞吐量

工作流程

  1. 建立连接
  2. 数据同步
  3. 命令传播(反复同步)

1. 建立连接

目的

建立master和slave的连接

最终态

  • slave:保存master的地址与端口
  • master:保存slave的端口
  • 两者之间:创建了连接的socket

步骤

  1. 设置master的地址和端口,保存master信息②③
  2. 建立socket连接④
  3. 发送ping命令(定时器任务,keep alive)⑤⑥
  4. 身份验证⑦⑧
  5. 发送slave端口信息,主从连接成功!⑨⑩

在这里插入图片描述
Master信息

127.0.0.1:6380> info replication
#Replication
role:master
connected_slaves:1
slave0:ip=192.168.21.11,port=6379,state=online,offset=113722,lag=1
master_replid:ad1130ef440dfbfe532bc230897b27585458d153
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:113722
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:113722

Slave信息

127.0.0.1:6379> info replication
#Replication
role:slave
master_host:192.168.21.12
master_port:6380
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:113862
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:ad1130ef440dfbfe532bc230897b27585458d153
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:113862
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:113862

身份验证

  1. 配置文件方式
  • Master: requirepass < password>
  • Slave: masterauth < password>
  1. 启动后方式
  • Master: config set requirepass < password>
    config get requirepass
  • Slave: auth < password>
  1. slave启动服务器设置密码

redis-server –a < password>

连接配置方式

  1. Slave端命令

slaveof < masterip> < masterport>

  1. Master端启动命令设定参数

redis-server -slaveof < masterip> < masterport>

  1. Slave端使用配置文件

[root@worker-01 redis-6.0.6]# vim redis-6379.conf
daemonize no
dir /root/redis-6.0.6/data
#logfile “6380.log”
slaveof 192.168.21.12 6380

2. 数据同步

目的

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

最终态

  • slave:具有master端全部数据,包含RDB过程中接收的数据
  • master:保存slave当前数据同步的位置
  • 完成了数据克隆

步骤

  1. 请求同步数据①
  2. 创建RDB同步数据②③④
  3. 恢复RDB同步数据⑤
  4. 请求部分同步数据⑥⑦
  5. 恢复部分同步数据,数据同步工作完成!⑧
    在这里插入图片描述

注意:

  • Redis最初用sync命令,2.8以后改为psync,4.0以后升级为psync2
  • 整个同步过程在⑧完成后就结束了
    在这里插入图片描述
    在这里插入图片描述

注意事项

  1. Master
  • 如果数据量巨大,数据同步阶段应避开流量高峰期
  • 复制缓冲区大小设定不合理,会导致数据溢出
  • 全量复制周期太长,进行部分复制时发现数据已存在丢失的情况,必须进行第二次全量复制,致使slave陷入死循环状态
  • 设置命令 repl-backlog-size 1mb
  • master单机内存占用主机内存的比例不应过大,建议使用50%-70%的内存,留下30%-50%的内存用于执行bgsave命令和创建复制缓冲区
  1. Slave
  • 为避免slave进行全量复制、部分复制时服务器响应阻塞或数据不同步,建议关闭此期间的对外服务: slave-serve-stale-data yes|no
  • 数据同步阶段,master发送给slave信息可以理解master是slave的一个客户端,主动向slave发送命令
  • 多slave同时对master请求数据同步,master发送的RDB文件增多,会对带宽造成巨大冲击,如果master带宽不足,因此数据同步需要根据业务需求,适量错峰
  • slave过多时,建议调整拓扑结构,由一主多从结构变为树状结构,中间的节点既是master,也是slave。注意使用树状结构时,由于层级深度,导致深度越高的slave与最顶层master间数据同步延迟较大,数据一致性变差,应谨慎选择

3. 命令传播阶段

目的

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

网络故障时

  1. 闪断:忽略
  2. 长时间中断:全量复制
  3. 短时间中断:部分复制

部分复制的几个概念

  • Runid

redis的运行服务器id,随机40位16进制,识别master身份

  • master的命令复制积压缓冲区
  • FIFO队列
  • 创建:
  1. AOF开启时
  2. 成为master时
  • 所有指令进入复制缓冲区
  • 偏移量offset

复制缓冲区的元素指针

例如:set name cisco
在复制缓冲区转换为

$3\r\n
set\r\n
$4\r\n
name\r\n
$5\r\n
cisco\r\n

存储形式:

1021102210231024102510261027
$3\r\nset

offset[3]就是1022

心跳机制

  • 命令传播阶段,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为保障数据稳定性,将拒绝所有信息同步操作

如:
min-slaves-to-write 2
min-slaves-max-lag 8
表示:slave数量少于2个,或者所有slave的延迟都大于等于10秒时,强制关闭master写功能,停止数据同步

  • slave数量和延迟由slave发送REPLCONF ACK命令做确认

数据同步和命令传播阶段的全过程

在这里插入图片描述
在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:27:52  更:2021-11-20 18:28:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:08:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码