微服务之分布式缓存Redis-第二章-搭建Redis主从架构

目录

  • 一、集群架构
    • 1、集群部署图
    • 2、节点分配
  • 二、准备实例节点和配置
    • 1、修改三台redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态
    • 2、修改持久化文件存储位置
    • 3、修改每个实例的声明IP
    • 4、启动
  • 三、开启主从关系
    • 1、方法一:replicaof
    • 2、方法二:slaveof
    • 3、查看集群状态
  • 四、主从同步原理
    • 1、数据同步原理-全量同步
      • 概念
      • 全量同步流程
    • 2、数据同步原理-增量同步
      • 概念
  • 五、优化Redis主从集群

一、集群架构

1、集群部署图

单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。主节点负责写入,从节点只能读

微服务之分布式缓存Redis-第二章-搭建Redis主从架构_第1张图片

2、节点分配

本次搭建主从同步集群使用了三台Centos系统服务器,共包含三个节点,一个主节点,两个从节点。

角色 IP地址 端口
master 192.168.0.101 6379
slave 192.168.0.102 6379
slave 192.168.0.103 6379

二、准备实例节点和配置

1、修改三台redis.conf文件,将其中的持久化模式改为默认的RDB模式,AOF保持关闭状态

# 开启RDB,注释下面语句
# save ""
# 3600秒内至少有一个改动
save 3600 1
# 300秒内至少有10个改动
save 300 100
# 秒内至少有10000个改动
save 60 10000
...
...
# 关闭AOF
appendonly no

2、修改持久化文件存储位置

如果是在单台机器安装三个redis,需要修改各自端口,各自持久化文件存储位置

# 持久化文件默认存储在redis安装目录下
dir .

3、修改每个实例的声明IP

虚拟机本身有很多个IP,为了避免将来混乱,我们需要在redis.conf文件中指定每一个实例的绑定ip信息,可以加在第一行格式如下:

replica-announce-ip 192.168.0.101

可以通过命令sed来加在第一行

sed -i '1a replica-announce-ip 192.168.0.101' redis.conf

4、启动

分别在三台机器执行如下,启动三个实例

redis-server redis.conf

三、开启主从关系

1、方法一:replicaof

我们分别进入192.168.0.102192.168.0.103两个机器

# 连接
redis-cli -p 6379
# 执行replicaof
replicaof 192.168.0.101 6379

2、方法二:slaveof

我们分别进入192.168.0.102192.168.0.103两个机器

# 连接
redis-cli -p 6379
# 执行slaveof
slaveof 192.168.0.101 6379

3、查看集群状态

进入master192.168.0.101

# 连接
redis-cli -p 6379
# 执行
INFO replication

看到类似如下信息:
微服务之分布式缓存Redis-第二章-搭建Redis主从架构_第2张图片

四、主从同步原理

1、数据同步原理-全量同步

概念

主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。
主从同步第一次同步是全量同步
显示把快照RDB文件发送一次,因为bgsave是异步,所以过程中还会把其他的写入记录融baklog,后面同步baklog。
微服务之分布式缓存Redis-第二章-搭建Redis主从架构_第3张图片

微服务之分布式缓存Redis-第二章-搭建Redis主从架构_第4张图片
微服务之分布式缓存Redis-第二章-搭建Redis主从架构_第5张图片

全量同步流程

  • slave节点连接到master节点,并发送SYNC(请求增量同步)命令
  • master节点判断replid,发现不一致,拒绝增量同步
  • master将完整内存数据生成RDB快照,发送RDB到slave从节点
  • slave清空本地数据,加载master发来的RDB
  • master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave
  • slave执行接收到的命令,保持与master之间的同步

2、数据同步原理-增量同步

概念

主从第一次同步是全量同步,但如果slave重启后同步,则执行增量同步。而且repl_baklog是环形缓存,有大小上限,写满后会覆盖最早的数据。如果slave断开时间太久,导致数据被覆盖,则无法实现增量同步,只能再次全量同步。
微服务之分布式缓存Redis-第二章-搭建Redis主从架构_第6张图片

五、优化Redis主从集群

  • 在master中配置repl-diskless-sync yes启用无磁盘复制,避免全量同步时的磁盘IO
  • Redis单节点上的的内存占用不要太大,减少RDB导致的过多磁盘IO
  • 适当提高repl_backlog的大小,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步
  • 限制一个master节点上的slave的数量,如果实在太多slave,则采用主-从-从链式结构,减少master压力

微服务之分布式缓存Redis-第二章-搭建Redis主从架构_第7张图片

你可能感兴趣的:(开发组件,redis,缓存,分布式)