`

Redis 主从复制各种环境下测试

阅读更多
测试环境:
Linux ubuntu 3.11.0-12-generic
2GB Mem
1 core of Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz
Redis 2.6.13
以下 R1 表示master, R2表示slave
配置采用运维组标准配置,默认主从配置一样,在从节点启动后设置为slave

R1: 127.0.0.1 6378
R2: 127.0.0.1 6379
0. 初始情况下各节点info情况(部分有用信息):
MASTER ->
'connected_slaves': 1,            #可判断slave存活状况
SLAVE  ->
'master_host': '127.0.0.1',
'master_last_io_seconds_ago': 5,
'master_link_status': 'up',       #可判断master与slave存活状况
'master_port': 6378
1. 正常读写:
In [32]: r1.set('key', 'value')
Out[32]: True

In [34]: r2.get('key')
Out[34]: 'value'
2. 主备正常连接下, 默认slave(不配置slave-read-only on)
向slave写入后发现报错

In [35]: r2.set('key2', 'value')
ReadOnlyError: You can't write against a read only slave
3. Master闪断:
Crash掉主节点:

'master_host': '127.0.0.1',
'master_last_io_seconds_ago': -1,
'master_link_down_since_seconds': 4,
'master_link_status': 'down',
'master_port': 6378
重启主节点后,slave自动从从新建立连接

'master_host': '127.0.0.1',
'master_last_io_seconds_ago': 9,
'master_link_status': 'up',
'master_port': 6378,
4. Crash掉主节点,slave默认(不配置slave-read-only on 情况)
即使master挂掉,slave写入依然报错

SLAVE ->
    'master_host': '127.0.0.1',
    'master_last_io_seconds_ago': -1,
    'master_link_down_since_seconds': 6,
    'master_link_status': 'down',
    'master_port': 6378
   
In [37]: r2.set('key', 'value')
ReadOnlyError: You can't write against a read only slave.
设置slave为readonly,发现报错

zb@ubuntu:~/codes/test$ redis-cli -h 127.0.0.1 -p 6379 set slave-read-only no
(error) READONLY You can't write against a read only slave.
需要关闭slave的slave特性, 将其升级为主节点

zb@ubuntu:~/codes/test$ redis-cli -h 127.0.0.1 -p 6379 slaveof NO ONE
OK
zb@ubuntu:~/codes/test$ redis-cli -h 127.0.0.1 -p 6379 set slave-read-only no
OK
升级为主节点后,继续向slave写入:

In [38]: r2.set('key', 'value')
Out[38]: True
5. 重启master, 如果将slave升级为master, 此时master与slave已经隔离, 都作为主节点存在(注意此时的主节点是没有数据的)
In [41]: r1.get('key')

In [42]:
6. 拷贝R2的dump数据到R1后重启:
In [43]: r1.get('key')
Out[43]: 'value'
7. 从新将R2设置为R1的slave(slave默认配置):
向slave写入:

In [45]: r2.set('key2', 'value')
ReadOnlyError: You can't write against a read only slave.
8. 如果将slave-read-only 属性写到配置文件中:
可以向slave写入数据,但是不会同步到master

In [50]: r2.set('key2', 'value')
Out[50]: True
9. Crash掉R1,往R2写数据(关掉slave-read-only):
SLAVE ->
    'master_link_status': 'down'

In [75]: r2.set('key2', 'value')
Out[75]: True
重启Master(此时的master无数据):

In [85]: r2.get('key2')

In [86]: r2.get('key3')
可以看到,重启了Master后,slave同步了master状态,由于master没有数据,slave的数据同时被删除

总结(部分测试未写出来):

slave 配置为slave-read-only on需要升级为主节点或者写入配置文件中, 而不能在默认slave情况下直接设置
master与slave断开后会检测心跳, 从新建立连接.
可以直接copy DUMP文件从新重启master
在Master为空以后,slave同步数据会抹掉全部数据.
分享到:
评论

相关推荐

    通过SSRF操作Redis主从复制写Webshell_R3start1

    1.使用 DICT 协议添加一条测试记录 2.设置保存路径 3.设置保存文件名 4.保存 1.连接远程主服务器 2.设置保存路径 3.设置保存文件名 4.保存

    redis主从集群 window 64位

    redis主从,只需要在从机上指定主机的ip和端口就完成了。 可以在从机的conf配置文件中增加如下一行: slaveof 127.0.0.1 6379 格式是 slaveof 主机ip 主机上redis的端口 也可以在从机的客户端手工输入这么一行命令...

    2、redis主从复制以及密码、配置文件启动1

    }}2、测试结果,成功3、添加哨兵sentinel,防止主master挂掉之后不能够实现主从复制, 注意事项: sentinel monitor 有系统默认的,

    Redis 部署安装 常见redis 4中部署详解

    Redis的四种常见使用方式 1. redis单副本 2. 主从复制 3. redis Sentinel(哨兵) 4. redis 集群部署 Redis安装及客户端连接 ...Redis 主从复制 详解 Redis 哨兵模式Sentinel 详解 Redis 集群配置 详解

    主从复制、薪火相传、反客为主博客测试资料

    主从复制、薪火相传、反客为主博客测试资料

    Redis面试专题30道.zip

    19、Redis 集群的主从复制模型是怎样的? 20、Redis 集群会有写操作丢失吗?为什么? 21、Redis 集群之间是如何复制的? 22、Redis 集群最大节点个数是多少? 23、Redis 集群如何选择数据库? 24、怎么测试 Redis 的...

    Redis面试题50道(含答案)_.pdf

    19、Redis 集群的主从复制模型是怎样的? 20、Redis 集群会有写操作丢失吗?为什么? 21、Redis 集群之间是如何复制的? 22、Redis 集群最大节点个数是多少? 23、Redis 集群如何选择数据库? 24、怎么测试 Redis 的...

    golang面试题集合.zip

    Golang 常见面试题目解析 交替打印数字和字母 判断字符串中字符是否全都不同 翻转字符串 判断两个给定的字符串排序后是否一致 ...Redis主从复制原理 MySQL相关 MySQL数据库经典面试题解析 MySQL InnoDB MVC

    Golang 面试题汇编

    Golang 常见面试题目解析 交替打印数字和字母 判断字符串中字符是否全都不同 翻转字符串 判断两个给定的字符串排序后是否一致 ...Redis主从复制原理 MySQL相关 MySQL数据库经典面试题解析 MySQL InnoDB MVC

    redis常用操作

    Jedis常用操作,测试连通性,五大数据类型,事务提交,主从复制,获取Jedis实例需要从JedisPool中获取

    CentoS6.5环境下redis4.0.1(stable)安装和主从复制配置方法

    本文实例讲述了CentoS6.5环境下redis4.0.1(stable)安装和主从复制配置方法。分享给大家供大家参考,具体如下: 依赖环境 Centos 6.5 gcc-4.4.7:编译redis原文件 tcl-8.5.7:运行编译检测 1.编译redis #cd /usr/...

    Redis V3.0 中文文档

    第 1 章Redis 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 第 2 章数据类型初探. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...

    DBA MySQL数据库工程师(2021版)视频教程

    第8章 主从复制基础 第9章 主从复制高级进阶 第10章 MyCAT中间件实战 第11章 MySQL优化 第12章 MySQL附录篇 第13章 NoSQL-MongoDB 第14章 NoSQL-ElasticSearch 第15章 NoSQL-Redis 第16章 服务监控 第17章 Amoeba...

    Redis 3.0 中文版 - v1.1.pdf

    第 1 章Redis 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 第 2 章数据类型初探. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...

    interview-go:golang面试题集合

    Redis主从复制原理 MySQL相关 MySQL数据库经典面试题解析 MySQL InnoDB MVCC 机制的原理及实现 为什么MySQL使用B+树做索引? 面试必备算法 字符串之实现 Sunday 匹配 字符串泄漏之反转字符串(301) 字符串中的第一个...

    NoSQL数据库Ardb.zip

    支持主从复制/主主复制,在线备份 除set/zset/list/hash外, 支持简单的Table数据结构以及类似SQL的查询 优化的bitset实现 性能测试数据参考项目首页 标签:Ardb NoSQL数据库

    分布式软件测试管理系统的设计与实现

    mysql主从复制,读写分离 3技术要点 后端: spring-boot、spring-session、spring-security等全家桶 dubbo + zookeeper分布式rpc服务 redis缓存 mysql数据库 flowable工作流 mybatis、jdbcTemplate、spring jpa持久...

    10. 【实战】部署redis的读写分离主从架构

    目录搭建步骤启用复制,部署slave node强制读写分离集群安全认证读写分离架构的测试 搭建步骤 一主一从,往主节点去写,在从节点去读,可以读到,主从架构就搭建成功了,包含节点间认证口令 启用复制,部署slave ...

    基于SpringBoot+Mybatis开发的主从架构的Steam商城,详情请看README+源代码+文档说明+数据库sql

    * 首页及其他页面因为读多写少,利用Mysql主从复制实现读写分离,写入在主Mysql下进行,读取在从Mysql进行 * 关于数据的不一致性,可以在写入的时候先写入缓存,读取的时候也先在缓存中读取,这样就可以避免数据的不...

Global site tag (gtag.js) - Google Analytics