一.前言

  在分布式系统中,为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复合负载均衡等需求.Redis也是如此,它为我们提供了复制的功能,实现了相同数据的多个Redis副本.复制功能是Redis高可用的基础,后面的哨兵和集群都是在复制的基础上实现高可用的.

二.复制的配置

1.如何建立配置

  参与复制的Redis实例划分为master(主节点)和slave(从节点).在默认情况下,Redis都是master节点,每个节点只能有一个master节点,而master节点是可以同时具有多个slave节点的(如图一所示).复制数据的流是单向的,只能由master节点复制到slave节点.配置复制的方式有三种,如下:

  1. 在配置文件中加入slaveof {masterHost} {masterPort} 虽Redis启动生效.
  2. 在redis-server启动命令后加入--slaveof {mastaerHost} {masterPort} 生效.
  3. 直接使用命令:slaveof {mastaerHost} {masterPort}生效

2.如何断开复制

  slaveof命令不但可以建立复制,还可以在从节点执行 slaveof no one 来断开于主机节点的复制关系(如图二所示).从节点在断开复制后并不会抛弃原有的数据,只是无法获取主节点上的数据变化而已.其主要流程如下:

  1. 断开于主节点的复制关系
  2. 从节点晋升为主节点

  通过slaveof命令还可以实现切主操作,所谓的切主是指把当前的从节点对主节点的复制切换到另一个主节点.执行slaveof {newMastaerIp} {newMasterPort}命令即可,切主其流程如下:

  1. 断开与旧主节点复制关系
  2. 与新主节点建立复制关系
  3. 删除从节点当前所有数据
  4. 对新主节点进行复制操作

  

  图1:                                        

  图2:

注意:切主后从节点会清空之前所有的数据,线上人工操作时小心slaveof在错误的节点上之行或者指向错误的主节点

3.关于链接的安全性

  对于比较重要的节点,主节点会通过设置requeirepass参数进行密码验证,这时所有的客户端访问必须使用auth命令进行校验.从节点与主节点的复制连接是通过一个特殊的客户端来完成的,因此需要配置从节点的masterauth参数与主节点密码保持一致,这样从节点才可以正确的连接到主节点并发起复制流程.

4.只读

  默认情况下,从节点使用 alave-read-only=yes 配置为只读模式.由于复制只能从主节点到从节点,对于从节点的任何修改,主节点都是无法感知的,修改从节点会造成数据不一致.因此,建议不要修改这个配置.

5.传输延迟

  从节点一般部署到不同机器上,复制时的网络延迟就成为需要考虑的问题,Redis为我们提供了 repl-disable-tcp-nodelay 参数用于控制是否关闭TCP_NODELAY,默认关闭.

三.复制拓扑

  Redis的复制拓扑结构可以支持单层或多层复制关系,根据拓扑复杂性可以分为三种:一主一从、一主多从、树形主从结构.

1.一主一从

  一主一从是最简单的复制拓扑结构,用于主节点出现宕机时,从节点提供故障转移支持(如下图所示)。当应用写命令并发量较高且需要持久化时,可一只在从节点上开启AOF,这样既能保证数据安全性,也避免了持久化对主节点性能的影响.

注意:当主节点因为提高性能关闭了 AOF 持久化功能,如果主节点脱机要避免自动重启的操作,因为主节点之前并没有开启持久化功能,自动重启后数据集是为空的,如果从节点继续复制主节点的话,从节点的数据也会被清空!这样也就丧失了持久化的意义了.所以,如果想保留数据,正确的做法是先执行slaveof no one断开从节点和主节点的复制连接,然后再重启主节点来避免这一问题.

2.一主多从

  一主多从,又称星形拓扑结构,使得应用端可以利用多个从节点实现读写分离(如下图所示),对于读占比较大的场景,可以通过多个读节点分担主节点压力.同时,在日常开发中,一些耗时命,如:keys、sort等,可以在其中一台上执行,防止慢查询对主节点造成阻塞从而影响线上服务的稳定性.但是如果写并发量较高的话,多个从节点会导致主节点写命令的多次发送从而过度消耗网络带宽,同时也加重了主节点负载影响服务稳定性.

3.树形主从

  树形主从,又称:树状拓扑结构(如下图所示),使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制.通过引入复制中间层,可以有效的降低主节点负载均衡和需要传送给从节点的数据量但是当主节点需要挂载多个从节点时,为了对主节点的性能干扰,可以采用树状主从结构降低主节点压力.这样一主多从的缺点(多个从节点导致的消耗过多网络带宽)就解决了.

  但是,这样还会有新的问题出现,如果图中某个slave节点故障,那么后面的slave节点便将无法收到主节点的信息,因此对于运维来讲,增添了许多复杂度,需要手动将节点启动.

参考:《Redis开发与运维》

版权声明:尊重博主原创文章,转载请注明出处 https://www.cnblogs.com/hsdy

Redis 之复制-初入江湖的更多相关文章

  1. 14、Redis的复制

    写在前面的话:读书破万卷,编码如有神 --------------------------------------------------------------------------------- ...

  2. Redis的复制特性

    对于有扩展平台以适应更高负载经验的工程师和管理员来说,复制(replication)是不可或缺的.复制可以让其他服务器拥有一个不断更新的数据副本,从而使得拥有数据副本的服务器可以用于处理客户端发送的读 ...

  3. Redis(八):Redis的复制(Master/Slave)

    Redis的复制(Master/Slave)目录导航: 是什么 能干嘛 怎么玩 复制原理 哨兵模式(sentinel) 复制的缺点 是什么 官网 行话:也就是我们所说的主从复制,主机数据更新后根据配置 ...

  4. Redis的复制(Master/Slave)、主从复制、读写分离

    1.什么是Redis的复制 行话:也就是我们所说的主从复制,主数据更新后根据配置和策略自动同步到备用机的master/slave机制,Mater以写为主,slave以读为主. 2.能干什么 2.1.读 ...

  5. 8.Redis的复制(Master/Slave)

    Redis的复制(Master/Slave) a)是什么 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave ...

  6. Redis系列(四):Redis的复制机制(主从复制)

    本篇博客是Redis系列的第4篇,主要讲解下Redis的主从复制机制. 本系列的前3篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系列(二):Redis的5种数据 ...

  7. Redis之复制

    1.配置 1.1 建立复制 参与复制的Redis实例划分为主节点(master) 和从节点(slave).默认情况下,Redis都是主节点.每个从节点只能有一个主节点,而主节点可以同时具有多个从节点. ...

  8. Redis的复制(Master/Slave)

    是什么 : 也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 能干嘛: 读写分离,容灾恢复 怎么玩: 1 ...

  9. Python Redis 数据复制.

    1 > 下载Python操作Redis的客户端 https://pypi.python.org/pypi/redis/2.7.6 下载完成后,参考该网站相关命令,执行安装. 2 > 下载 ...

随机推荐

  1. 结合java的反射和泛型性质简化JDBC和相应的同步等服务器数据库操作代码

    github地址:https://github.com/hzphzp/HeartTrace_Server 我们的服务器端数据库并没有用sqllite, 而是直接用mysql,并且用JDBC直接进行操作 ...

  2. hibernate简单入门教程(一)---------基本配置

    应用级别所以很粗浅 首先介绍一下hibernate框架: 1.优秀的持久化(通俗讲把内存上的短时间运行信息存储在持久化硬盘上)框架. 2.作用于持久层,因为没什么侵入性,所以同样适用于其他层面上的存储 ...

  3. Linux下调节CPU使用的几种方法

    一,使用taskset充分利用多核cpu,让cpu的使用率均衡到每个cpu上 #taskset-p,    设定一个已存在的pid,而不是重新开启一个新任务-c,    指定一个处理,可以指定多个,以 ...

  4. linux 无法安装gcc, 可以试试换用 阿里的yum

    1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.下载新的CentOS-Base ...

  5. 乘风破浪:LeetCode真题_015_3Sum

    乘风破浪:LeetCode真题_015_3Sum 一.前言 关于集合的操作,也是编程最容易考试的问题,比如求集和中的3个元素使得它们的和为0,并且要求不重复出现,这样的问题该怎么样解决呢? 二.3Su ...

  6. Kinaba 简单画图

    此片文章简单介绍如何在kinaba 上画图. 如果你,还没有搭建ELK 请参考:ELK日志分析平台搭建全过程 本文参考:http://www.cnblogs.com/hanyifeng/p/58607 ...

  7. Genymotion安卓模拟器和VirtualBox虚拟机安装、配置、测试(win7_64bit)

    1.概述 VirtualBox是一个优秀的虚拟机软件,它可以在电脑上提供另一个操作系统的运行环境,使多个系统同时运行.VirtualBox支持的操作系统包括Windows.Mac OS X.Linux ...

  8. oracle-记录

    同時查新多个条件的数量 select sum(DECODE(trim(t.ASSESSED_RESULT),'维持',1,0)) maintainNum, sum(DECODE(trim(t.ASSE ...

  9. 020.1.1 collections集合工具类

    内容:常见需求以及使用—逆转比较器顺序,最值和同步方法 collections类的方法都是静态方法 强行逆转比较器的顺序例子: //##主函数.java List<String> list ...

  10. JS数据模板分离(告别字符串拼接)-template

    刚开始在写第一个动态网页的demo时,由于html不多,便使用字符串拼接的方法添加到dom来渲染,可是在后来写某外卖app时也需要如此添加,打开代码一看几千行,突然感觉累觉不爱 一行行的拼接有这功夫别 ...