redis主从设置


redis主从设置


redis主从复制

Redis读取写入的速度都特别快,但是也会产生读压力特别大的场景。

Redis支持主从复制,主从结构可以采用一主多从或者级联结构。为数据提供多个副本,实现高可用.

Redis可以根据是否是全量分为全量同步和增量同步。


全量同步和增量同步

redis主从设置

全量同步

Redis全量复制一般发生在Slave初始化阶段:

  • 从服务器连接主服务器,发送SYNC命令;
  • 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;
  • 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
  • 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
  • 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
  • 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;

完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求。


增量同步

Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。
增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。


同步策略

主从刚刚连接的时候,进行全量同步;

全同步结束后,进行增量同步。

slave 在任何时候都可以发起全量同步。


Redis大概主从同步是怎么实现的?

全量同步

master服务器会开启一个后台进程用于将redis中的数据生成一个rdb文件,同时,服务器会缓存所有接收到的来自客户端的写命令(包含增、删、改)当后台保存进程处理完毕后,会将该rdb文件传递给slave服务器。slave服务器会将rdb文件保存在磁盘并通过读取该文件将数据加载到内存,在此之后master服务器会将在此期间缓存的命令通过redis传输协议发送给slave服务器,然后slave服务器将这些命令依次作用于自己本地的数据集上最终达到数据的一致性。

部分同步

redis 2.8版本以前

不支持部分同步,当主从服务器之间的连接断掉之后,master服务器和slave服务器之间都是进行全量数据同步。

redis 2.8开始

支持部分同步,当主从服务器之间的连接断掉之后,也不需要进行全量同步,这个版本开始融入了部分同步的概念。部分同步的实现依赖于在master服务器内存中给每个slave服务器维护了一份同步日志和同步标识,每个slave服务器在跟master服务器进行同步时都会携带自己的同步标识和上次同步的最后位置。当主从连接断掉之后,slave服务器隔断时间(默认1s)主动尝试和master服务器进行连接,如果从服务器携带的偏移量标识还在master服务器上的同步备份日志中,那么就从slave发送的偏移量开始继续上次的同步操作,如果slave发送的偏移量已经不再master的同步备份日志中(可能由于主从之间断掉的时间比较长或者在断掉的短暂时间内master服务器接收到大量的写操作),则必须进行一次全量更新。在部分同步过程中,master会将本地记录的同步备份日志中记录的指令依次发送给slave服务器从而达到数据一致。


无磁盘复制

全量同步需要在磁盘上创建一个RDB文件,如果使用比较低速的磁盘,这种操作会给主服务器带来较大的压力。

Redis从2.8.18版本开始尝试支持无磁盘的复制。使用这种设置时,子进程直接将RDB通过网络发送给从服务器,不使用磁盘作为中间存储。


配置

从服务器配置

slaveof [ip] [port]

其他参数

从节点日志/rdb文件名/log文件名/复制内存缓冲区的优化参数等 。

无磁盘复制参数

启动无磁盘复制
repl-diskless-sync
传输开始的延迟时间
repl-diskless-sync-delay

从服务器只读

从Redis 2.6开始,从服务器支持只读模式,并且是默认模式。只读的从服务器会拒绝所有写命令,所以对从服务器不会有误写操作。但这不表示可以把从服务器实例暴露在危险的网络环境下,像DEBUG或者CONFIG这样的管理命令还是可以运行的。不过你可以通过使用rename-command命令来为这些命令改名来增加安全性。

由Redis.conf文件中的slave-read-only 参数控制的,可以在运行中通过CONFIG SET来启用或者禁用。

安全配置在前面文章我们已经写过了。


主从设置

这里的环境是接前面redis安装和配置的文章,有疑惑可以看前文。这里配置一主两从。

当前目录

<code>cd /usr/local/redis/<code>

主节点配置文件

master-6400.conf,端口6400


redis主从设置

从节点配置文件

slave-6401.conf 端口6401
slave-6402.conf 端口6402


redis主从设置


redis主从设置


启动reids服务


redis主从设置

启动状态


redis主从设置

测试

主节点master

redis主从设置


从节点 6401

redis主从设置


从节点 6402

redis主从设置


注意事项

  • 如果多个Slave断线重启的时候,就会发送sync请求和主机全量同步,可能会导致Master IO剧增宕机。
  • 主节点是可读可写的,而从节点是只读的,不能修改数据。
  • 主节点应该开启持久化,防止主节点故障,导致重启后整个主从节点数据丢失。
  • 如果数据比较重要,并且使用主从复制时关闭了主服务器持久化功能,应该禁止实例自动重启。


分享到:


相關文章: