第十七章《redis主从复制》

第十七章《redis主从复制》

redis主从复制:
1.配置:
master:修改:bind 0.0.0.0
想设置密码:requirepass
slave:
(1)修改配置文件:slaveof
(2)启动从节点server的时候:redis-server redis.conf –slaveof masterip masterport
(3)直接在客户端命令执行:slaveof masterip msterport
如果主节点设密码了:masterauth
2.主从复制原理:
主从第一-次连接进行全量复制,从节点发送复制请求给主节点,主节点受到请求进行rdb持久化
然后把rdb文件传送给从节点。从节点接收到rdb文件后清空旧数据,然后将rdb文件加载到内
存中。之后主节点数据的更新会同步到从节点。主从复制是异步的。

psync:当从节点由于故障断开和主节点的连接,如果每次恢复连接后对主节点进行全量复制会给主节点造成性能力和带宽浪费。使用psync可以实现部分复制:从节点在每次完成数据同步后都会保存一个数据的复制偏移量,然后从节点通过psync命令将定期将主节点的运行id和复制偏移量发送给主节点。主节点先验证运行id,根据复制偏移量来判断需要部分复制的数据,然后将这部分数据传送给从节点。
psync [runid] [offset]

runid:主节点每次启动都会生成一个16进制的id,从节点连接主节点后会保存这个runid
offset:当前从节点已复制的数据偏移量;

复制积压缓存区(环形队列)repl-backlog:主节点在内存当中维护的一个环形的队列,每次执行写命令后主节点都会将命令发送给他,从节点发送的offset在复制积压缓存区内,就把缓存区内的数据发送给从节点完成部分复制,复制积压缓存区的大小默认1M,我们通过设置repl-backlog-size可以调整他的大小,如果从节点的offset已经不在缓存区内,那就只能进行全量复制

master重启了,他的runid会发生变化,或发生从节点维护的runid和主节点不一致,所以此时也会进行全量复制

断开主从复制:slaveof命令不但可以建立复制,还可以在从节点执行slaveof no one 断开从节点的复制链接,断开后我们从节点上已经复制的数据不会丢失

slaveof命令还可以实现切换主节点。
slaveof 新主节点的ip 新主节点的port
实现流程:
1.断开与旧主的复制关系
2.与新主建立关系
3.删除从节点的所有数据
4.对新主节点进行复制

只读:建立主从复制关系后,从节点默认设置是只读:slave-read-only=yes,为了保证主从数据的一致性

传输延迟:repl-disable-tcp-nodelay 参数用来控制是否关闭tcp_nodelay,默认关闭;
(1)当关闭时,主节点产生的命令数据无论大小都会及时的发送给从节点,这样主从之间的延时会变小,但是增加了网络带宽的消耗,适用于主从主键的网络环境良好的场景,同机架或同机房
(2)开启时,主节点会合并较小的tcp数据包从而节省带宽,默认发送时间间隔取决于linux的内核,一般默认40毫秒,适用于主从网络环境复杂或带宽紧张的场景。

主从复制的结构:
(1)一主一从
(2)一主多从
(3)树状主从结构

心跳:
主从节点连接后,他们之间维护着长连接并彼此发送心跳命令;
client list:可以查看客户端信息
(1)主节点默认每10 秒给从发送ping命令,判断从节点的存活性和连接状态,可以通过
repl-ping-slave-period 10设置多少秒发送ping命令
(2)从节点在主线程每隔1秒发送replconf ack [offset]给主节点上报自身当前的复制偏移量

1.读写分离:
(1)复制数据延迟
(2)读到过期数据
(3)从节点故障
2.主从配置不一致:
maxmemory,hash-max-ziplist-entries等参数配置不一致
3.避免全量复制:配置自动故障转移方案;
4.避免复制风暴:
(1)大量的从节点连接一个主节点,容易出现复制风暴,对单节点的复制风暴
(2)单主机的复制风暴,多台主节点部署在同一服务器上。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101961.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MySQL中文参考手册

    MySQL中文参考手册

    2021年6月19日
    96
  • android之相机开发

    在android中应用相机功能,一般有两种:一种是直接调用系统相机,一种自己写的相机。我将分别演示两种方式的使用:第一种:是使用Intent跳转到系统相机,action为:android.media.action.STILL_IMAGE_CAMERA关键代码:Intent intent = new Intent(); //调用照相机 intent.setAction(

    2022年3月10日
    45
  • php拼接循环拼接字符串数组,PHP数组拼接

    php拼接循环拼接字符串数组,PHP数组拼接最近的工作中老是要遇到将两个数组进行拼接的操作。下面总结一下数组拼接的几个函数及它们的不同点。PHP中两个数组合并可以使用+或者array_merge,但之间还是有区别的,而且这些区别如果了解不清楚项目中会要命的!主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意。1)键名为数字时,array_merge()后面的值将不会覆盖原来的值,而是附加到后面,但+合并数组则会把…

    2022年5月30日
    43
  • Adobe Dreamweaver 2021下载安装教程

    Adobe Dreamweaver 2021下载安装教程软件介绍AdobeDreamweaver2021是专业的网站设计软件,使用可为处理各种Web文档提供灵活的环境。Dreamweaver2021一款非常受欢迎的网页设计软件,是该系列的全新版本,可以帮助广大学生、程序员制作出精美的网页,在全新的Dreamweaver2021版本中,在其优秀的功能上带来了更多的改进和优化,拥有无缝实时视图编辑功能,在以往用户需要切换到单独的编辑模式来预览网站,现在仅需一键即可预览和更改网页,还支持Windows的多显示器方案,为用户带来了更加整洁主界面,并且修改了十多个

    2022年7月14日
    21
  • tabnine激活码-激活码分享

    (tabnine激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~V…

    2022年3月22日
    86
  • Android studio开发-第一个入门例子(十分详细)

    Android studio开发-第一个入门例子(十分详细)                            举个栗子实现功能:可以通过页面输入改变要显示的字符,然后通过按钮可以实现显示字符的放大功能。最终如下:一共四个控件:一个text输入,一个text显示,一个输入修改确认按钮,一个放大按钮步骤:1、建立项目   file-new-newproject新建一个项目…

    2025年7月4日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号