Redis 4.0 从节点写入不同步问题
redis4.0出现了很多新的特性,删除键值unlink,slowlog记录来源ip。内存统计信息等。其中一个重要的同步祭祀是Psync2。psync2主要让redis在从实例重启和主实例故障切换场景下,也能使用部分重新同步。在redis故障切换,新增从库,网络波动。都可以有效的避免网络风暴。但也存在一个问题。从节点的写入是不会同步给下一级从节点的。如 A>B>C 在B执行set test xxxx 。C是接收不到key test的。同步信息必须是来源于最根据的master节点。
这与psync2的实现有关:
master_replid :长度为41个字节的字符串。每个实例都有。如果是主节点,则标志这个节点的自身id。如果是从节点。则master_replid 是起最终主节点的master_replid 。
master_replid2:用于存在该节点上一次连接主实例的实例master_replid。
有复制链A(100.100)>B(100.88)>C (1.37):
A echo "info Replication" | redis-cli -h 192.168.100.100 -p 6013
B
C
此时 B C 的master_replid 都来源于 A 的master_replid:28ab33a841d0b1db7d0586b120e213970bed2261 。在C 只接收来自于A的写入。 B的写入不能同步到C 。如下:
如果B slaveof no one 提升B 为主。复制链变成了B>C B是根节点。此时B写入C可以正常接收。注意看master_replid
B
C
B生成了新的master_replid:1014ea08c4c84cd51cccaa7c9c723c067dcd7b06。并且其从节点的master_replid 变为B 的master_replid 1014ea08c4c84cd51cccaa7c9c723c067dcd7b06 。原来的 A的master_replid 归档进了master_replid2。
4.0在整个复制集群中通过master_replid 和master_repl_offset 使得每个从节点的偏移量都是相对于最原始的主节点(无论串型还是星型)。这样复制从节点的切换主节点,不需要再进行全同步。只需部分同步。A>B>C 变为 A>B A>C 。或者B>A B>A>C
或者 B>A (B slave no one后 。A 根据自身master_replid向B 请求部分同步 。B 的master_replid2存放了Amaster_replid 。所以可以部分同步 )
逻辑是。每次slaveof 本节点会拿自身的master_replid master_repl_offset 去寻找目标节点的 master_replid master_replid2 和offset。如果匹配到则可增量同步。
重启从节点的时候。一定要把slaveof写入到配置文件中再重启。这样才可以部分同步。如果启动完节点再自行slaveof则需要全同步。
同样的,在扩展从节点的时候也可以先在主节点dump一份数据。然后rsync到别的机器。在配置文件配置好slaveof。启动redis这样可以部分同步,避免网络风暴。
但主节点A重启会导致 master_replid 变动。最终导致从节点重新全同步。是否有办法保持master_replid不变???
除了本身是master节点。slave节点执行slave one 导致master_replid 更新。且 master_replid2 不会保留自身生成的master_replid 。如slaveof no one之后再slave xx xx 。master_replid2 会是空的。
A>B>C 。B执行slave no one 不会导致C全同步,此时B是master。但是B 再slaveof xx xx (那么是slaveof A ) 都会导致C重新全同步。因为B master_replid2 保留自身slave no one后生成的master_replid 。C在同步的时候在B中找不到replid
Redis 4.0 从节点写入不同步问题的更多相关文章
- linux 下Redis 5.0主从复制(一主二从)哨兵模式的搭建
文档结构如下: 一.环境说明: 作用 IP地址 端口 操作系统版本 安装目录 哨兵文件 主库 172.16.10.80 6379 Redhat 6.7 /redis5.0/redis-5.0.0 Se ...
- Redis Cluster 集群节点维护 (三)
Redis Cluster 集群节点维护: 集群运行很久之后,难免由于硬件故障,网络规划,业务增长,等原因对已有集群进行相应的调整,比如增加redis nodes 节点,减少节点,节点迁移,更换服务器 ...
- Redis集群研究和实践(基于redis 3.0.5)
前言 redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用.现在的2.x的稳定版本是2.8.19,也是我们项目中普遍用到的版本. redis在年初发布了3.0. ...
- Redis 4.0新功能介绍
Redis 的作者 antirez 在三天之前通过博客文章<The first release candidate of Redis 4.0 is out>发布了 Redis 4.0 的第 ...
- dis集群研究和实践(基于redis 3.0.5) 《转载》
https://www.cnblogs.com/wxd0108/p/5798498.html 前言 redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用.现在的 ...
- Linux 安装Redis 5.0
结构如下: Redis 官方不建议Redis安装在WINDOWS 服务器上(尤其是生产中分布式事物缓存). linux 下Redis 5.0主从复制(一主二从)哨兵模式的搭建:https://www. ...
- Linux下安装redis 3.0及C语言中客户端实现demo
1.获取安装文件 wget http://download.redis.io/redis-stable.tar.gz 2.解压文件 tar xzvf redis-stable.tar.gz 3.进入目 ...
- Redis 5.0.7 讲解,单机、集群模式搭建
Redis 5.0.7 讲解,单机.集群模式搭建 一.Redis 介绍 不管你是从事 Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业 ...
- redis 6.0下redis-cluster-proxy代理尝试
伴随着Redis6.0的发布,作为最令人怦然心动的特性之一,Redis官方同时推出Redis集群的proxy了:redis-cluster-proxy,https://github.com/Redis ...
随机推荐
- MATLAB矩阵操作和算术运算符
矩阵的表示 矩阵之间用空格或者是逗号间隔 矩阵可以拼接(可以用矩阵拼接) 实部矩阵和虚部矩阵构成复数矩阵,一一对应. 冒号表达式: 格式: e1:e2:e3 e1表示初始值 e2表示步长 e ...
- C面向对象编程
C语言面向对象编程 1. 定义一个SuperObject结构体, 里面包含最少的元素, 但是确实每一个对象都含有的, 这样可以实现多态 2. 每一个对象都是基于类的, 我们知道类都是单例对象, 所以我 ...
- 高精度运算——java
java大法 java的框架. import java.io.*; import java.util.*; import java.math.*; public class Main{ public ...
- javascript 数组方法拼接html标签
var htmls = new Array(); htmls.push("<tr class='otherinfotr'>");htmls.push("< ...
- 翻String.Format源码发现的新东西:StringBuilderCache
起因: 记不清楚今天是为毛点想F12看String.Format的实现源码了,反正就看到了下图的鸟东西: 瞬间石化有没有,StringBuilder还能这么获取? 研究StringBuilderCac ...
- Java基础入门 - 关键字及其分类和说明
类别 关键字 说明 访问控制 private 私有的 protected 受保护的 public 公共的 类.方法和变量修饰符 abstract 声明抽象 class 类 extends 扩充,继承 ...
- Android 使用xml实现边框阴影,背景渐变效果(附有RGB颜色查询对照表)
上图是显示效果,下面是代码实现: 个人理解就是使用layer-list实现两层view的叠加,其中top,left,bottom,left控制阴影 <?xml version="1.0 ...
- git 获取领先落后的命令
git --git-dir=/data/usr/local/gerrit-site/git/aixuexi-admin.git rev-list --left-right --count master ...
- C盘空间太大,分区助手减小分区大小教程
首先看一个需要缩小C盘或需要减少分区空间的一个例子:“我的电脑里C盘剩余空间为530GB,除了C盘外还有一个D盘,但D盘的空间不到30GB,另外还有两个隐藏分区,一个200MB,一个15GB.我想把C ...
- April 30 2017 Week 18 Sunday
Our lives stretched out ahead of us, like a perpetual sunrise. 生命如永恒的日出,生生不息. Please respect yoursel ...