Redis的主从复制原理以及实现
前言: 上一个博客讲到Redis的数据持久化,如果说Redis节点宕机了,那么我们的系统就无法对数据在redis进行缓存处理,这个可以通过Redis的哨兵模式或者集群模式解决,本篇博客先从Redis的主从复制说起,后续会发布哨兵模式和集群模式的实现。
主从结构图:
主从的特点:
- 一个主数据库(master)下面可以有多个从数据库(slave);
- 从数据库(slave)也可以拓展多个从数据库(slave),形成了强大的多级服务器集群架构即master->slave->slave模式;
- 一主多从实现了读写分离,master用于写,slave用于读操作,因为实际生产的环境读操作是远远高于写操作的;
- master以非阻塞的方式同步数据至slave,同时master会继续处理client的读写请求。
主从复制的原理:
全量同步(init):
当slave从数据库在启动成功之后会向主数据库发送一个ping包,通知主数据库,然后主数据库把rdb文件发送到从数据库,当从数据库接收完毕之后会把该rdb文件下载到硬盘上,然后再把rdb的数据加载到内存中。
增量同步:
当从数据库启动完成并完成第一次的全量同步之后,之后的同步都是增量形式进行同步,也就是说,当主数据库有写的操作后,从数据库也会执行对应写的命令。
注意:使用主从复制一定要开启数据库的持久化机制。
搭建redis的主从复制其实只用修改从节点的redis配置,下面为大家罗列出需要修改的地方以及参数说明。
本人搭建的一主一从,电脑容量有限
我们把192.168.181.129作为从节点,现在对129的数据库redis.conf配置进行修改
################################# REPLICATION #################################
#
# +------------------+ +---------------+
# | Master | ---> | Replica |
# | (receive writes) | | (exact copy) |
# +------------------+ +---------------+
# 从数据的配置 主节点IP 端口
# replicaof <masterip> <masterport>
replicaof 192.168.181.129 6379
# 如果主数据库定义了密码,这里配置,我没有设置密码所以这个不配
# masterauth <master-password>
#当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:1) 如果slave-serve-stale-data设置为
#yes(默认设置),从库会继续响应客户端的请求。2) 如果slave-serve-stale-data设置为no,
#INFO,replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG,SUBSCRIBE, UNSUBSCRIBE,
#PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,COMMAND, POST, HOST: and LATENCY命令之外的任何请求
#都会返回一个错误”SYNC with master in progress”。
replica-serve-stale-data yes
#从数据库只读模式开启
replica-read-only yes
# 是否使用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 no
#diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输。所以最好等待一段时间,等更多的slave连上来
repl-diskless-sync-delay 5
设置好之后保存并退出然后重启从数据库的服务。
/etc/init.d/redis_init_script stop
/etc/init.d/redis_init_script start
查看进程是否启动成功:
主数据库查看主从信息如下:
从数据库查看的信息如下:
下面进行主从复制测试:
主从数据库没数据
主数据库插入成功:
这里从数据库复制成功:
主从复制搭建完成!
【Redis-Series】:
一、Linux生产环境安装部署Redis
二、Redis的两种持久化机制RDB/AOF
四、Redis哨兵模式讲解及SpringBoot配置(图文详解)
五、Redis-Cluster集群模式讲解及SpringBoot配置(图文详解)
六、Redis击穿、穿透、雪崩讲解以及解决方案