Redis 之复制-初入江湖
一.前言
在分布式系统中,为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复合负载均衡等需求.Redis也是如此,它为我们提供了复制的功能,实现了相同数据的多个Redis副本.复制功能是Redis高可用的基础,后面的哨兵和集群都是在复制的基础上实现高可用的.
二.复制的配置
1.如何建立配置
参与复制的Redis实例划分为master(主节点)和slave(从节点).在默认情况下,Redis都是master节点,每个节点只能有一个master节点,而master节点是可以同时具有多个slave节点的(如图一所示).复制数据的流是单向的,只能由master节点复制到slave节点.配置复制的方式有三种,如下:
- 在配置文件中加入slaveof {masterHost} {masterPort} 虽Redis启动生效.
- 在redis-server启动命令后加入--slaveof {mastaerHost} {masterPort} 生效.
- 直接使用命令:slaveof {mastaerHost} {masterPort}生效
2.如何断开复制
slaveof命令不但可以建立复制,还可以在从节点执行 slaveof no one 来断开于主机节点的复制关系(如图二所示).从节点在断开复制后并不会抛弃原有的数据,只是无法获取主节点上的数据变化而已.其主要流程如下:
- 断开于主节点的复制关系
- 从节点晋升为主节点
通过slaveof命令还可以实现切主操作,所谓的切主是指把当前的从节点对主节点的复制切换到另一个主节点.执行slaveof {newMastaerIp} {newMasterPort}命令即可,切主其流程如下:
- 断开与旧主节点复制关系
- 与新主节点建立复制关系
- 删除从节点当前所有数据
- 对新主节点进行复制操作
图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 之复制-初入江湖的更多相关文章
- 14、Redis的复制
写在前面的话:读书破万卷,编码如有神 --------------------------------------------------------------------------------- ...
- Redis的复制特性
对于有扩展平台以适应更高负载经验的工程师和管理员来说,复制(replication)是不可或缺的.复制可以让其他服务器拥有一个不断更新的数据副本,从而使得拥有数据副本的服务器可以用于处理客户端发送的读 ...
- Redis(八):Redis的复制(Master/Slave)
Redis的复制(Master/Slave)目录导航: 是什么 能干嘛 怎么玩 复制原理 哨兵模式(sentinel) 复制的缺点 是什么 官网 行话:也就是我们所说的主从复制,主机数据更新后根据配置 ...
- Redis的复制(Master/Slave)、主从复制、读写分离
1.什么是Redis的复制 行话:也就是我们所说的主从复制,主数据更新后根据配置和策略自动同步到备用机的master/slave机制,Mater以写为主,slave以读为主. 2.能干什么 2.1.读 ...
- 8.Redis的复制(Master/Slave)
Redis的复制(Master/Slave) a)是什么 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave ...
- Redis系列(四):Redis的复制机制(主从复制)
本篇博客是Redis系列的第4篇,主要讲解下Redis的主从复制机制. 本系列的前3篇可以点击以下链接查看: Redis系列(一):Redis简介及环境安装 Redis系列(二):Redis的5种数据 ...
- Redis之复制
1.配置 1.1 建立复制 参与复制的Redis实例划分为主节点(master) 和从节点(slave).默认情况下,Redis都是主节点.每个从节点只能有一个主节点,而主节点可以同时具有多个从节点. ...
- Redis的复制(Master/Slave)
是什么 : 也就是我们所说的主从复制,主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 能干嘛: 读写分离,容灾恢复 怎么玩: 1 ...
- Python Redis 数据复制.
1 > 下载Python操作Redis的客户端 https://pypi.python.org/pypi/redis/2.7.6 下载完成后,参考该网站相关命令,执行安装. 2 > 下载 ...
随机推荐
- 瞥了一眼js
JS打开超链接的几种形式1.window.open(''url'') 2.用自定义函数<script>function openWin(tag,obj){obj.target=" ...
- Android数据统计
开发效率可以用这些方式提升: 1 . 构建公用工具类,方便大家使用 2 . 使用开源的一些包,例如ORM思想的数据库等 3 . 可以很快的找到问题.开发中,找bug的时间,往往是很多的.我用的方法有3 ...
- course & time
- Windows API 查找窗体,发送Windows消息
最近项目中需要做Windows消息截获操作,在网上找了一些资料. public class WindowsAPI { /// <summary> /// 回调函数代理 /// </s ...
- 伪数组 arguments
arguments代表的是实参.有个讲究的地方是:arguments只在函数中使用. (1)返回函数实参的个数:arguments.length 例子: fn(2,4); fn(2,4,6); fn( ...
- 如何理解springaop
初看aop,上来就是一大堆术语,而且还有个拉风的名字,面向切面编程,都说是oop的一种有益补充等等,一下子让你不知所措,心想着:怪不得很多人都和我说aop多难多难.当我看进去以后,我才发现:它就是一些 ...
- 使用NPOI 2.1.1读取EXCEL2003/2007返回DataTable
winform中打开excel的筛选器设置为:openFileDialog.Filter = "Excel 文件(*.xls)|*.xls;*.xlsx"; 一,不借助插件读取Ex ...
- ZT android -- 蓝牙 bluetooth (三)搜索蓝牙
android -- 蓝牙 bluetooth (三)搜索蓝牙 分类: Android的原生应用分析 2013-05-31 22:03 2192人阅读 评论(8) 收藏 举报 bluetooth蓝牙s ...
- Pip批量安装/卸载包
pip批量安装package 将需要安装的包保存在requirements.txt中 cd到aa.txt所在目录,运行: pip install -r requirements.txt pip批量卸载 ...
- npm WARN network …… request to https://cnpmjs.…… failed, reason: socket hang up
出现类似问题的原因是由于之前配置了镜像导致的 解决方案:删掉镜像,使用npm本身进行安装 删除镜像的命令: 方法1: npm config delete registry 方法2: npm confi ...