楔子:某个时间,由于不清不楚的某些原因,导致了一次严重的线上事故。后来,开发不清不楚的配合把项目升级到了 Redis 高可用集群的哨兵模式(Redis-Sentinel),再后来,我们逐渐的又不清不楚的淡忘了这件事。节点化的工作很容易导致一定程度上只知其然而不知其所以然,这是项目开发中的一个众相。回想起来,我还是想记点什么。

该篇可以为以下应用场景提供解决方案:

  • 读写分离场景:其中主节点以写为主(可读可写),从节点只能读不可写
  • Redis 容灾:如果主节点出现故障,数据丢失,则可以通过 salve 进行恢复(其中主节点写入的数据会同步到从节点 salve 上,但不准时,因为数据不是实时同步,所以主节点可能会存在从 salve 恢复数据后有数据丢失问题)

1. Redis 枝繁叶茂

为了使得集群在一部分节点下线或者无法与集群的大多数节点进行通讯的情况下, 仍然可以正常运作, Redis 集群对节点使用了主从复制功能: 集群中的每个节点都有 1 个至 N 个复制品(replica), 其中一个复制品为主节点(master), 而其余的 N-1 个复制品为从节点(slave)。[ 摘自 Redis 集群中的主从复制 ]

简单的来说,就是一个主节点(master)可以拥有一个甚至多个从节点 slave,而一个 slave 也可以拥有多个 slave,就像一棵枝繁叶茂的大树般,树叉生树叉,最终形成织罗密布的强大的多级服务器集群架构。

Redis 主从复制同步的几种方法:

  • 一主二仆:一个 Master 两个 Slave
  • 薪火相传:A - B - C ,B既是C的 Master,又是A的 Slave 从节点,即上一个 Slave 是下一个 Slave 的 Master
  • 反客为主:主节点挂掉后,手动升级从节点为主节点
  • 哨兵模式:主节点挂掉后,自动升级从节点为主节点(反客为主)

这篇主要介绍 一主二仆 和 手动反客为主。哨兵模式后面另开一篇进行介绍。Redis 安装操作如有疑问请参考 Redis进击(一)从0到1,Redis的安装与使用

2. Redis 一主二仆

2.1. 配置操作

2.1.1 准备三份 Redis

解压已经下载好的 Redis 资源,然后再复制两份,都放在同一目录下。我本地修改了复制后的文件夹名称,以端口号区分。如下:

2.1.2 修改 redis.windows.conf

不需要修改 redis.windows.conf 配置文件的 6379:

  • 6379 的文件夹,这里不需要修改 redis.windows.conf 配置文件

需要修改 redis.windows.conf 配置文件的 6380、6381:

  • 该配置文件的第约40行,需要修改端口号
  • 该配置文件的第约200行,需要增加子节点(后面用作 master 的从节点)

6380 的文件夹,修改 redis.windows.conf 如下:

# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 6380......# slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379

6381 的文件夹,修改 redis.windows.conf 如下:

# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
port 6381......# slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379

port 端口的配置分别是 6379、6380、6381,都分别与目录上的端口相对应。故障转移统一配置成指向 6379:slaveof 127.0.0.1 6379

2.2. 启动测试

启动规则:先启动主节点,然后再启动从节点

CMD 进入本地刚刚弄的资源目录 \Redis\demo1\Redis-x64-3.0.504 - 6379,然后分别执行下面的命令:

redis-server.exe redis.windows.conf
redis-cli.exe -p 6379

然后同样的分别启动从节点 6380 和 6381 的服务端

上面运行结果中可以看到,两个从节点 6380 和 6381 已经成功转接上了主节点 master (6379)。

然后,再回到主节点 master 上看一下主从复制信息:

可以看到,master 角色 6379 上已经连接的有两个从节点 savle。分别是 6380、6381。

然后同样的再分别启动从节点 6380 和 6381 的客户端

可以看到,从节点 slave 的端口、只读、已连接的从节点数量为0等 slave 特性信息。

2.3. 数据验证

验证构想:主节点可读可写,从节点只能读不可写

构想成立。

2.4. 容灾验证

验证构想:当主节点 master 宕掉后,从节点可读,且不会自动升级为主节点

当主节点 master 重启恢复之后,从节点依然可以连接主节点:

而且,主节点可读可写,从节点只能读不可写的状态依然正常:

构想成立。

2. Redis 反客为主

线上 Redis 主节点 down 掉后,如果预估短时间内无法恢复的话,可以看情况手动升级从节点为主节点。但风险点是,因为数据可能不是实时同步,所以主节点可能会存在从 salve 恢复数据后有数据丢失问题。

用法:Redis 客户端执行命令 slaveof no one

可以观察到:有了两个 master

  1. 主节点 6379 宕掉之后,从手动操作从节点 6380,执行指令 slaveof no one 使其反客为主变成一个没有从节点的主节点,且可读可写
  2. 主节点 6379 再次重启,原来的从节点 6381 还是会成为其从节点
  3. 主节点 6379 上新加的键值,在 6380 主节点上读取不到;反之亦然

3. Redis 技能问答

问:从节点 slave 在连接 master 之前,master 就已经添加了一些 key,那么 slave 连接进来的时候,这之前 master 上的 key 是否也会复制?
答:全部都会复制,即全量复制。

问:是否可以向从节点 slave 里面写数据?是否可以 set key?
答:不可以,从节点 slave 只可以 read,master 既可以 read 又可以 write。

问:主机 shutdown 后,从机情况如何?从机是上位(反客为主变 master)还是原地待命?
答:原地待命,依旧是从节点 slave,等待 master 恢复。

问:主机恢复后,主机新增记录,从机能否顺利复制?
答:必须能


Redis 进击物语:
Redis进击(一)从0到1,Redis的安装与使用
Redis进击(二)搭建Redis主从复制服务集群(一主两从、反客为主)【Windows环境】
Redis进击(三)搭建Redis高可用集群的哨兵模式(Redis-Sentinel)【Windows环境】
Redis进击(四)Java中配置和使用Redis高可用集群的哨兵模式(Redis-Sentinel)【Spring&SpringBoot环境】
Redis进击(五)redis.conf配置文件说明备注手册
Redis异常:Creating Server TCP listening socket *:26379: bind : No such file or directory
Redis异常:JedisException: Can connect to sentinel, but 127.0.0.1:6379 seems to be not monitored...
Redis异常:JedisConnectionException: All sentinels down, cannot determine where is mymaster master is

Redis进击(二)搭建Redis主从复制服务集群(一主两从、反客为主)【Windows环境】相关推荐

  1. 【云原生-K8s-1】kubeadm搭建k8s集群(一主两从)完整教程及kubernetes简介

  2. Centos 6.4下 MySQL配置主从服务(集群)

    Centos 6.4下 MySQL配置主从服务(集群) 我们前面两篇文章都分别介绍了Mysql的安装及配置.备份及还原,今天我们继续前面的环境介绍一下Centos 6.4下MySQL配置主从实现数据同 ...

  3. 收藏版!手把手教你搭建 Greenplum 6.1 集群

    了解更多Greenplum技术干货,欢迎访问Greenplum中文社区网站 随着Greenplum大数据平台正式进入6时代,Greenplum 新版本在功能和性能上都实现大幅度地提升.Greenplu ...

  4. 为什么有了redis,还要搭建redis 集群 有什么作用

    所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定.高效的状态. 使用redis集群的必要性 问题:我们已经部署好了redis,并且能启动一个redis,实现数据的读写,为 ...

  5. Redis单机模式主从模式哨兵模式集群模式搭建

    文章目录 一.Redis下载及安装 1.1.下载 1.2.环境安装 1.3.编译安装 1.4.修改配置 1.5.启动Redis 1.6.验证Redis是否启动 1.7.进入到Redis客户端 1.8. ...

  6. 尚硅谷Redis尚硅谷学习汇总_事务_持久化_主从复制_集群_穿透_雪崩_击穿

    前言 该文章是我在学习Redis过程中写的学习汇总,包括了基本使用和常用命令.RDB和AOF.配置文件.事务.击穿.穿透.雪崩.集群等,都记录了详细过程,不管是新手学习还是有基础的同学拿来回顾都是可以 ...

  7. 【重难点】【Redis 02】Redis 的持久化、Redis 的主从复制和集群、哨兵

    [重难点][Redis 02]Redis 的持久化.Redis 的主从复制和集群.哨兵 文章目录 [重难点][Redis 02]Redis 的持久化.Redis 的主从复制和集群.哨兵 一.Redis ...

  8. Redis主从复制和集群配置系列之四

    非常感谢  http://blog.csdn.net/dc_726/article/details/48552531 Redis技术学习 https://www.itkc8.com 全面剖析Redis ...

  9. Docker下Redis Cluster分片集群的搭建、基本操作、集群扩容和集群故障转移(非关系型数据库技术课程 第九周)

    文章目录 Docker 下Redis Cluster 分片集群搭建 1. Cluster 分片集群 1.1 Cluster 集群的结构和作用 1.2 Cluster 分片集群 的作用 1.3哈希槽(h ...

  10. Redis学习(二)之 Redis Cluster集群

    redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并 ...

最新文章

  1. Windows 系统版本判断
  2. mysql不同版本会覆盖吗,[mysql不同版本数据库同步]mysql数据库主从同步,master和slave上的mysql必须版本一样吗,如果不一样会有什么结果?...
  3. ad20如何导入库_脱水防锈油如何使用才正确?
  4. hibernate oracle clob 注解,Hibernate3.X实现基于CLOB字段类型的注解方式:
  5. 财务一体化项目,进度与计划8
  6. PAT1018 Public Bike Management【dfs】【最短路】
  7. 内网计算机可以使用键盘,如何在同一个局域网里一套键盘鼠标操作多台电脑?...
  8. 【数据分析】销售案例——用户购买频次
  9. 文件服务器如何设置配额,文件服务器设置配额
  10. CryEngine3 调试Shader方法
  11. OceanBase上云、91道MySQL面试题…… - 墨天轮数据库周刊第17期
  12. 使用css和js实现鼠标拖尾特效(七彩泡泡)
  13. 2021年升降机司机考试试卷及升降机司机考试试题
  14. 掌握VS2010调试 -- 入门指南
  15. 光脚丫学LINQ(014):LINQ to SQL简介
  16. 求AUC 95%置信区间
  17. 高考平行报志愿计算机录取规则,2020年高考平行志愿录取规则大全
  18. python concat ValueError: Shape of passed values is indices imply
  19. 一键摸鱼神器火了!专为 Windows 系统打造,老板在身后也可以很淡定
  20. Python类方法如何调用?

热门文章

  1. cad2010背景怎么调成黑色_3D错觉立体画到底是怎么画出来的?
  2. x570支持Linux系统吗,苹果中国官网调整:Mac Pro正式支持选配AMD W5500X显卡
  3. MapReduce计算PMI
  4. 微信小程序Post方法提交数据
  5. 香港拼音--汉字对照表
  6. 用GoldWave制作合唱的四重奏回音效果
  7. 微店关键词取商品列表API接口(item_search-根据关键词取商品列表API接口),微店API接口
  8. ubuntu离线中文语音识别
  9. Mininet连接真实网络的实现
  10. “AI四小龙”神话破灭?依图终止IPO,云从大裁员,旷视巨亏不止