Redis:主从配置


关键词

  • 哨兵:可以实现主从切换
  • Redis的同步:同步(sync) 和 命令传播(command propagate)
  • 主从流程:1.保存主节点信息,建立socket连接,发送ping命令,权限验证,发送端口信息,同步数据 2.命令传播
  • Redis 2.8之后采用 PSYNC命令 主从同步:全量同步 和 增量同步

一、 主从配置

主Redis配置

无需特殊配置

从Redis配置

修改从服务器上的 redis.conf 文件:

# slaveof <masterip> <masterport>
# 表示当前【从服务器】对应的【主服务器】的IP是192.168.10.135,端口是6379。
replicaof 127.0.0.1 6379

作用

读写分离

  • 一主多从,主从同步
  • 主负责写,从负责读
  • 提升Redis的性能和吞吐量
  • 存在主从的数据一致性问题

数据容灾

  • 从机是主机的备份
  • 主机宕机,从机可读不可写
  • 默认情况下主机宕机后,从机不可为主机
  • 利用哨兵可以实现主从切换,做到高可用

二、 原理与实现

2.1 复制流程

1 保存主节点信息
当客户端向从服务器发送slaveof(replicaof) 主机地址(127.0.0.1) 端口(6379)时:从服务器将主
机ip(127.0.0.1)和端口(6379)保存到redisServer的masterhost和masterport中。

Struct redisServer{char *masterhost;//主服务器ipint  masterport;//主服务器端口
} ;

从服务器将向发送SLAVEOF命令的客户端返回OK,表示复制指令已经被接收,而实际上复制工作是在
OK返回之后进行。

2 建立socket连接
slaver与master建立socket连接

slaver关联文件事件处理器

该处理器接收RDB文件(全量复制)、接收Master传播来的写命令(增量复制:后续命令)

主服务器accept从服务器Socket连接后,创建相应的客户端状态。相当于从服务器是主服务器的Client端。

3 发送ping命令
Slaver向Master发送ping命令

  • 1、检测socket的读写状态
  • 2、检测Master能否正常处理

Master的响应:

  • 1、发送“pong” , 说明正常
  • 2、返回错误,说明Master不正常
  • 3、timeout,说明网络超时

4 权限验证
主从正常连接后,进行权限验证
主未设置密码(requirepass=“”) ,从也不用设置密码(masterauth=“”)
主设置密码(requirepass!=""),从需要设置密码(masterauth=主的requirepass的值) 或者从通过auth命令向主发送密码

5 发送端口信息
在身份验证步骤之后,从服务器将执行命令REPLCONF listening-port ,向主服务器发送从服务器的监听端口号。

6 同步数据(全量)
Redis 2.8之后分为全量同步和增量同步。

7 命令传播(增量)
当同步数据完成后,主从服务器就会进入命令传播阶段,主服务器只要将自己执行的写命令发送给从服务器,而从服务器只要一直执行并接收主服务器发来的写命令。

2.2 同步数据集

Redis 2.8以前使用SYNC命令同步复制
Redis 2.8之后采用PSYNC命令替代SYNC

旧版本
Redis 2.8以前,实现方式

Redis的同步功能分为同步(sync)和命令传播(command propagate)。
1)同步操作:
1. 通过从服务器发送到SYNC命令给主服务器
2. 主服务器生成RDB文件并发送给从服务器,同时发送保存所有写命令给从服务器
3. 从服务器清空之前数据并执行解释RDB文件
4. 保持数据一致(还需要命令传播过程才能保持一致)

2)命令传播操作:
同步操作完成后,主服务器执行写命令,该命令发送给从服务器并执行,使主从保存一致。

缺陷

  • 没有全量同步和增量同步的概念,从服务器在同步时,会清空所有数据。
  • 主从服务器断线后重复制,主服务器会重新生成RDB文件和重新记录缓冲区的所有命令,并全量同步到从服务器上。

新版
Redis 2.8以后,实现方式

在Redis 2.8之后使用PSYNC命令,具备完整重同步和部分重同步模式。

  • Redis 的主从同步,分为全量同步和增量同步。
  • 只有从机第一次连接上主机是全量同步
  • 断线重连有可能触发全量同步也有可能是增量同步( master 判断 runid 是否一致)。
  • 除此之外的情况都是增量同步。

全量同步
Redis 的全量同步过程主要分三个阶段:

  • 同步快照阶段: Master 创建并发送快照RDB给 Slave , Slave 载入并解析快照。 Master 同时将此阶段所产生的新的写命令存储到缓冲区。
  • 同步写缓冲阶段: Master 向 Slave 同步存储在缓冲区的写操作命令。
  • 同步增量阶段: Master 向 Slave 同步写操作命令。

    增量同步
  • Redis增量同步主要指Slave完成初始化后开始正常工作时, Master 发生的写操作同步到 Slave 的过程。
  • 通常情况下, Master 每执行一个写命令就会向 Slave 发送相同的写命令,然后 Slave 接收并执行。

2.3心跳检测

在命令传播阶段,从服务器默认会以每秒一次的频率向主服务器发送命令:

replconf ack <replication_offset>
#ack :应答
#replication_offset:从服务器当前的复制偏移量

主要作用有三个:

  1. 检测主从的连接状态
    检测主从服务器的网络连接状态

通过向主服务器发送INFO replication命令,可以列出从服务器列表,可以看出从最后一次向主发送命令距离现在过了多少秒。lag的值应该在0或1之间跳动,如果超过1则说明主从之间的连接有故障。

  1. 辅助实现min-slaves
    Redis可以通过配置防止主服务器在不安全的情况下执行写命令
    min-slaves-to-write 3 (min-replicas-to-write 3 )
    min-slaves-max-lag 10 (min-replicas-max-lag 10)
    上面的配置表示:从服务器的数量少于3个,或者三个从服务器的延迟(lag)值都大于或等于10秒时,主服务器将拒绝执行写命令。这里的延迟值就是上面INFOreplication命令的lag值。

  2. 检测命令丢失
    如果因为网络故障,主服务器传播给从服务器的写命令在半路丢失,那么当从服务器向主服务器发送REPLCONF ACK命令时,主服务器将发觉从服务器当前的复制偏移量少于自己的复制偏移量,然后主服务器就会根据从服务器提交的复制偏移量,在复制积压缓冲区里面找到从服务器缺少的数据,并将这些数据重新发送给从服务器。(补发) 网络不断

增量同步:网断了,再次连接时

Redis:主从配置相关推荐

  1. Redis主从配置及通过Keepalived实现Redis自动切换高可用

    Redis主从配置及通过Keepalived实现Redis自动切换高可用 [日期:2014-07-23] 来源:Linux社区  作者:fuquanjun [字体:大 中 小] 一:环境介绍: Mas ...

  2. redis 主从配置_应用 | Redis实现 主从,单例,集群,哨兵,配置应用

    小小经过一天的休整 公众号更新规则:每周六将会停更一次,进行短期的休整,其余时间继续每天一更. 思维导图如下 Redis 主从配置 这里配置Redis主从 什么是主从 主从复制,是指把一台Redis服 ...

  3. php redis 主从配置,Redis主从及其PHP扩展安装配置

    1.Redis简介Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序 ...

  4. Redis主从配置和集群配置

    Redis主从配置和集群配置 文章目录 Redis主从配置和集群配置 一.Redis主从配置 1.主从概念 2.主从配置 3.数据操作 二.Redis集群配置 1.简介 2.Redis 集群好处 3. ...

  5. linux redis 主从配置,redis集群(主从配置)

    redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串). list(链表).set(集合)和zset(有序集合).这些数据 ...

  6. redis主从配置完毕为啥在主服务器中检测不到从服务器

    23,redis如何实现主从复制 redis主从复制 和Mysql主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Re ...

  7. Redis 主从配置密码以及哨兵

    目录: Redis 主从介绍 哨兵机制 Redis 主从配置 环境 安装 启动服务 检查主从状态 测试数据同步 默认是读写分离的 Redis Sentinel 配置 主Redis宕机测试 配置多个哨兵 ...

  8. Redis主从配置(一主两从)

    Redis主从配置(一主两从) 1.进入redis目录,打开redis的配置文件redis.conf. 2.修改redis配置文件: Vi redis.conf 在两台从服务器的尾部 添加 slave ...

  9. redis主从配置和redis哨兵配置

    主从配置 redis 主从配置master slave 优点: 防止单点故障(除了单机版,都可以) 读写分离,更好的实现多读写少 克隆两台redis虚拟机作为从机 复制操作文件 cp /usr/red ...

  10. Linux学习——redis主从配置(带密码)

    redis一主二从配置(带密码) 找了很多redis主从配置教程发现大多数都是没密码的配置,而正式服务器中,为了安全redis通常都会设置密码,正好学到这,下面分享我自己学习中对于redis主从配置的 ...

最新文章

  1. php五只猴子分椰子_tubes五只雪茄_phillies雪茄五只装
  2. 编写安全的ASP代码
  3. JDK1.7安装配置环境变量+图文说明Jmeter安装
  4. 【LeetCode从零单排】No21.MergeTwoSortedLists
  5. 程序实现php文件上传,PHP实例:实现文件上传的程序源码_php
  6. mysql如何设置多节点_详细介绍Mysql5.7从节点设置多线程主从复制的办法
  7. 有关链表的小技巧,我都给你总结好了
  8. 微型计算机中 i o接口位于6,北语15秋计算机基础作业1
  9. ffmpeg实现摄像头拉流_干货 | 速看!乐橙K32Famp;K36F摄像头全彩夜视功能的不同点全在这了!...
  10. 微信小程序-跟学笔记
  11. 【火灾检测】基于matlab连通区域+SVM特征融合火灾检测【含Matlab源码 1223期】
  12. 【机器学习基石】感知机模型+PLA(二)
  13. Access入门简单教程
  14. macOS远程管理linux,MacOS远程控制工具
  15. 用Python实现一个简单的加密程序
  16. Vue回炉重造之图片加载性能优化
  17. 深圳超美海边烧烤场 深圳户外烧烤攻略
  18. mermaid制作饼图
  19. SpringSecurity认证案例
  20. node-red安装

热门文章

  1. Impinj增强ItemSense软件功能,简化RFID方案部署
  2. [LeetCode] NO. 8 String to Integer (atoi)
  3. Mysql ERROR 2002 (HY000) Can't connect to local MySQL server through socket
  4. 如何做一名出色的屌丝码农?
  5. ThinkPHP5.1开启调试和错误提示
  6. Zabbix 添加WEB监控(学习笔记十一)
  7. Struts2+Spring+Hibernate step by step 11 ssh拦截验证用户登录到集成
  8. Dapper的语法应用
  9. 菜鸟程序员如何提升自己的潜在价值
  10. 借力信息化工具,助跑精细化管理