Redis主从复制

简介

主从复制是指将一台Redis服务器的数据,复制到其它的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。
默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。主节点以非阻塞方式同步数据至slave主机;

复制的作用

  • 数据备份
  • 负载均衡
  • 故障恢复(主节点down了,从节点可以提供服务)
  • … …

复制的常用配置项

  • slaveof
    复制选项,slave复制对应的master

  • masterauth
    master设置了口令,则需要这一项配置master的口令。

  • slave-serve-stale-data yes
    当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:1) 如果slave-serve-stale-data设置为yes(默认设置),从库会继续响应客户端的请求。2) 如果slave-serve-stale-data设置为no,除去INFO和SLAVOF命令之外的任何请求都会返回一个错误”SYNC with master in progress”。

  • slave-read-only yes #
    从节点是否只读

  • repl-diskless-sync no
    是否使用socket方式复制数据。目前redis复制提供两种方式,disk和socket。如果新的slave连上来或者重连的slave无法部分同步,就会执行全量同步,master会生成rdb文件。有2种方式:disk方式是master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave。socket是master创建一个新的进程,直接把rdb文件以socket的方式发给slave。disk方式的时候,当一个rdb保存的过程中,多个slave都能共享这个rdb文件。socket的方式就的一个个slave顺序复制。在磁盘速度缓慢,网速快的情况下推荐用socket方式。

  • repl-diskless-sync-delay 5
    diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输。所以最好等待一段时间,等更多的slave连上来。

  • repl-ping-slave-period 10
    slave根据指定的时间间隔向服务器发送ping请求。时间间隔可以通过 repl_ping_slave_period 来设置,默认10秒

  • repl-timeout 60
    复制连接超时时间,master和slave都有超时时间的设置。master检测到slave上次发送的时间超过repl-timeout,即认为slave离线,清除该slave信息。slave检测到上次和master交互的时间超过repl-timeout,则认为master离线。需要注意的是repl-timeout需要设置一个比repl-ping-slave-period更大的值,不然会经常检测到超时。

  • repl-disable-tcp-nodelay no
    表示数据立即传输 不等待

  • repl-backlog-size 1mb
    复制缓冲区大小,这是一个环形复制缓冲区,用来保存最新复制的命令。这样在slave离线的时候,不需要完全复制master的数据,如果可以执行部分同步,只需要把缓冲区的部分数据复制给slave,就能恢复正常复制状态。缓冲区的大小越大,slave离线的时间可以更长,复制缓冲区只有在有slave连接的时候才分配内存。没有slave的一段时间,内存会被释放出来,默认1m。

  • slave-priority 100
    复制集群中,主节点故障时,sentinel应用场景中的主节点选举时使用的优先级;数字越小优先级越高,但0表示不参与选举;

  • min-slaves-to-write 3
    redis提供了可以让master停止写入的方式,如果配置了min-slaves-to-write,健康的slave的个数小于N,mater就禁止写入。master最少得有多少个健康的slave存活才能执行写命令。这个配置虽然不能保证N个slave都一定能接收到master的写操作,但是能避免没有足够健康的slave的时候,master不能写入来避免数据丢失。设置为0是关闭该功能

  • min-slaves-max-lag 10
    延迟小于min-slaves-max-lag秒的slave才认为是健康的slave。

配置主从复制

在这里插入图片描述

第一种方式:修改从节点配置文件

slaveof 192.168.253.128 6379  #表示主库为192.168.253.128,端口为6379
#masterauth <master-password> 这里主节点没有设置口令,所以不需要配置这一项。如果设置了口令,这里需要设置主节点的口令

第二种方式:客户端命令设置

[root@localhost ~]# redis-cli -h 192.168.253.158  #进入客户端
192.168.253.158:6379> slaveof 192.168.253.128 6379   #设置主节点

第三种方式:命令行接口设置

在启动命令后面加入:slaveof <masterip> <masterport>

[root@localhost ~]# redis-server  /etc/redis.conf  slaveof 192.168.253.128 6379

测试

这个是从节点日志信息
在这里插入图片描述

在主节点也可以查看相关信息
在这里插入图片描述

然后我们在主节点创建个键值对
在这里插入图片描述
可以看到成功了

断开复制

断开并不会清空之前同步的数据,只是不再接受主节点新的数据变化。

[root@localhost ~]# redis-cli -h 192.168.253.158
192.168.253.158:6379> slaveof no one

在这里插入图片描述
查看一下日志
在这里插入图片描述
断开复制之后又恢复到了主节点状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值