redis.conf中replication配置项说明

redis.conf中replication配置项说明

注意:在master-slave部署模式下,只需slave实例配置Replication相关项,各项含义说明如下。
        1) slaveof <masterip> <masterport>
        slave实例需要配置该项,指向master的(ip, port)。
        2) masterauth <master-password>
        如果master实例启用了密码保护,则该配置项需填master的启动密码;若master未启用密码,该配置项需要注释掉
        3) slave-serve-stale-data
        指定slave与master连接中断时的动作。默认为yes,表明slave会继续应答来自client的请求,但这些数据可能已经过期(因为连接中断导致无法从master同步)。若配置为no,则slave除正常应答”INFO”和”SLAVEOF”命令外,其余来自客户端的请求命令均会得到”SYNC with master in progress”的应答,直到该slave与master的连接重建成功或该slave被提升为master。
        4) slave-read-only
        指定slave是否只读,默认为yes。若配置为no,这表示slave是可写的,但写的内容在主从同步完成后会被删掉。
        5) repl-ping-slave-period
        Redis部署为Replication模式后,slave会以预定周期(默认10s)发PING包给master,该配置可以更改这个默认周期。
        6) repl-timeout
        有2种情况的超时均由该配置指定:1) Bulk transfer I/O timeout; 2) master data or ping response timeout。
        需要特别注意的是:若修改默认值,则用户输入的值必须大于repl-ping-slave-period的配置值,否则在主从链路延时较高时,会频繁timeout。
        7) repl-disable-tcp-nodelay
        指定向slave同步数据时,是否禁用socket的NO_DELAY选项。若配置为yes,则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,这样可以减少主从节点间的包数量并节省带宽,但会增加数据同步到slave的时间。若配置为no,表明启用NO_DELAY,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。通常情况下,应该配置为no以降低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes。
        备注:socket的NO_DELAY选项涉及到TCP协议栈的拥塞控制算法—Nagle‘s Algorithm。
        8) slave-priority
        指定slave的优先级。在不只1个slave存在的部署环境下,当master宕机时,Redis Sentinel会将priority值最小的slave提升为master。需要注意的是,若该配置项为0,则对应的slave永远不会被Redis Sentinel自动提升为master。

        关于Replication,需要明确的几点
        a. Redis的Replication跟cluster的概念不同。假如S是M的slave,则M不能把自己设置成为S的slave。若S挂掉,则M正常工作;相反,若M挂掉,则S可能会停止正常工作,这里用”可能”,是因为S的具体行为由其配置文件中的slave-serve-stale-data来决定。
        b 假设共2个节点,M为master,S为slave,若M挂掉,则合理的处理方式是将S提升为master(通过SLAVE NO ONE命令)。当原来的master M恢复后,将M设置为S的slave。当然,实际处理方式并不限于这里的建议。
        c. 假设共3个节点,M为master,S1和S2均为slave,若M挂掉,合理的处理方式是将其中1个slave提升为master,同时,需将另一个slave的master重新设置为新的master实例。

        现在,新问题来了:如何得知M已经挂掉了?
        这就涉及到Redis的监控,所幸的是,我们可以借助Redis官方发布的工具Redis Sentinel完成监控任务。

其它配置项

使用磁盘支持的复制,在生成RDB文件的同时,只要生成RDB文件的当前子进程完成它的工作,更多的从进程就可以排队并与RDB文件一起服务。而对于无磁盘复制,一旦传输开始,新的从机将进入队列,当当前传输终止时将开始新的传输。

当使用无磁盘复制时,主服务器在开始传输之前等待一段可配置的时间(以秒为单位),希望多个从服务器能够到达,并将传输并行化。

对于慢速磁盘和快速(大带宽)网络,无磁盘复制工作得更好。

repl-diskless-sync no

当启用无磁盘复制时,可以配置延迟

服务器等待,以便生成通过套接字将RDB传输给从服务器的子进程。

这是很重要的,因为一旦传输开始,就不可能为新的从服务器服务,这些新从服务器将排队等待下一个RDB传输,所以服务器等待延迟,以便让更多的从服务器到达。

延迟时间以秒为单位设置,缺省值为5秒。要完全禁用它,只需将其设置为0秒,传输将尽快开始。

repl-diskless-sync-delay 5

设置复制积压大小。积压是一个缓冲区,当从机断开连接一段时间后,它会积累从机数据,所以当从机想重新连接时,通常不需要完全重新同步,但部分重新同步就足够了,只需要传递从机断开连接时错过的那部分数据。

复制积压越大,从服务器断开连接的时间就越长,稍后就能够执行部分重新同步。

只有在至少有一个从属连接的情况下,才会分配积压。

# repl-backlog-size 1mb

当主服务器不再连接从服务器一段时间后,积压的事务将被释放。下面的选项配置从最后一个从属服务器断开连接开始所需的秒数,以便释放积压缓冲区。值为0意味着永远不发布积压。

# repl-backlog-ttl 3600

如果连接的从服务器少于N,且延迟小于或等于M秒,则主服务器可能停止接受写操作。N个slave需要处于“在线”状态。延迟以秒为单位,必须<=指定的值,从从从接收到的最后一个ping计算,通常是每秒发送一次。

这个选项不保证N个副本将接受写,但是在没有足够的slave可用的情况下,将限制丢失的写的暴露窗口到指定的秒数。例如,需要至少3个奴隶,延迟<= 10秒使用:

# min-slaves-to-write 3
# min-slaves-max-lag 10

原创文章,作者:三酷猫,如若转载,请注明出处:https://www.sankumao.com/2829.html

(0)
上一篇 2022年9月12日 下午10:30
下一篇 2022年9月13日 上午10:47

相关推荐

  • Mysql 视图

    一、什么是视图 视图是从一个或多个表中导出来的表,是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样用户可以不看整个数据库表中的数据,而只关心对自己…

    2022年8月8日
  • mysql在Linux上的安装教程,超详细!

    方式一、无密码登录 如果你系统有安装,那可以选择进行卸载: Yum 资源包下载地址:https://dev.mysql.com/downloads/repo/yum/ 权限设置: …

    2022年8月4日
  • Redis学习教程三:数据类型

    Redis支持五种基本数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。三大特殊数据类型:geo(地…

    2022年9月9日
  • Mysql数据库的基础操作

    数据库操作 1.查看所有数据库 2.使用数据库 3.查看当前使用的数据库 4.创建数据库 5.删除数据库 数据表操作 1.查看当前数据库所有表 2.查看表结构 3.查看表的创建语句…

    2022年8月8日
  • Redis学习教程二:常用命令

    redis默认有16个数据库(配置文件中内容),默认使用的是第0个 redis是单线程的redis是基于内存操作,CPU不是redis性能瓶颈,redis的瓶颈是根据机器的内存和网…

    2022年9月9日
  • Mysql复制表

    需求:现在有一张旧表tb2,要复制一张新表tb1。 当然我们可以使用:show create table 旧表; 查看旧表的创建语句,然后把语句copy一下,改个表名就可以了。同时…

    2022年8月13日
  • Redis学习小故事:mysql数据库和redis缓存数据一致性

    一天,老板说「最近公司的用户越来越多了,但是服务器的访问速度越来越差的,阿旺帮我优化下,做好了给你画个饼!」。 程序员阿旺听到老板口中的「画饼」后就非常期待,没有任何犹豫就接下了老…

    2022年9月11日
  • Mysql窗口函数快速入门

    MySQL从8.0版本开始支持窗口函数。窗口函数的作用类似于在查询中对数据进行分组,不同的是,Group By分组操作会把分组的结果聚合成一条记录,而窗口函数是将分组的结果置于每一…

    2022年8月11日
  • Procedure execution failed1292 – Incorrect date value: ‘0000-00-00’ for column ‘birthday’ at row 1

    问题背景 使用navicat添加过程存储函数时,代码如下: 报错: 原因分析 这是因为当前的MySQL不支持datetime为0的情况。 解决方法 方法一:修改sql_mode S…

    2022年11月2日
  • mysql查询获得两个时间的时间差方式

    其中starttime为时间小的那个时间,endtime为时间大的时间。 unit单位取值: FRAC_SECOND   表示间隔是毫秒 SECOND   秒 MINUTE   分…

    2022年10月8日