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循环和函数定义,调用
格式不要括号,最后有end for 循环变量 = 表达式1:表 2:表 3 表1:初值 表2:步长 表3:终值 求圆周率:π/4=1 - 1/3 + 1/5 -1/7+...+(-1 ...
- 利用COM组件实现对WORD书签处写入值
using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Wo ...
- 文件夹选择之FolderBrowserDialog控件
应用程序可能只允许用户选择文佳夹而非文件,例如在播放MP3时,用户可能把所有的MP3放在一个文佳夹内,在添加时,只要选择添加这个文佳夹,将会把在这个文件内的所有MP3添加的播放器里.在这里对播放器来说 ...
- AOP切面编程
1.JDK动态代理方式实现 public static UserService createService(){ //目标类 final UserService userService = new U ...
- 随机练习:C#实现维吉尼亚加密与解密(解密前提为已知密匙)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- #include stdio.h(5)
#include <stdio.h> int main() { //1.数组的排序-冒泡排序 /* 1.规则:相邻的两个数据进行比较 2.如果有N个数据,需要选择N-1次参照物来比较, 因 ...
- C++ Knowledge series Inheritance & RTTI & Exception Handling
Inheritance The pointer or reference to base class can address/be assigned with any of the classes d ...
- 使用 Notapad++ 进行 Java 开发
准备工具 1.安装 JDK 以及配置相关环境变量: 2.安装 64 位版的 Notepad++ : 2.一台 64 位 Windows 系统电脑: 一.下载&安装Notepad++ 官网下载地 ...
- u-boot分析(九)----nand flash初始化|nand flash读写分析
u-boot分析(九) 上篇博文我们按照210的启动流程,分析到了初始化串口,由于接下来的取消存储保护不是很重要,所以我们今天按照u-boot的启动流程对nand flash初始化进行分析. 今天我们 ...
- rollback
savepoint test; rollback to savepoint test;