redis进阶:redis主从架构原理及搭建

0.引言

单节点redis可用性始终无法保障,用一句话来讲:说挂就挂。于是乎搭建高可用的redis服务的第一步,从节点诞生了,也就是redis的主从架构。

1. 概念

redis主从架构的原理是从节点(slave)从主节点(master)同步数据,主从节点保持数据的一致性。写操作只允许主节点执行,从节点专用于读操作,以此做到读写分离,查询效率的提升。

同时redis的主从架构还是redis集群的基础,具体我们会在后续演示,所以redis主从架构是高可用的第一步。

每个从节点只允许有一个主节点,一个主节点下可以有多个从节点。

1.1 redis主从同步类型

redis中主从同步分为全量同步和增量同步,从节点开启AOF就会进行全量同步,如果从节点宕机,再次启动时就会讲本机的数据清除,然后重新从主节点全量同步一遍。

从节点如果只开启了RDB,是会记录主节点的主机ID的。我们可以在rdb文件中看到这个ID,这样如果中间宕机了,再重启时,从节点只会同步宕机期间的增量数据

主从刚刚连接的时候,会进行全量同步;全量同步结束后,进行增量同步。如果增量同步失败,会再尝试全量同步

1.2 redis主从同步过程

在描述同步过程之前先要带大家理解一下思路,我们在传输数据时,因为数据本身还在不停的产生,所以我们肯定是从一个时间节点开始,传这个节点之前的所有数据,同时记录这个节点之后产生的增量数据,待全量数据传输完成后,再补上增量的数据,以此完成数据同步

redis的思路也如此:

1、从节点向主节点发送同步指令sync

2、主节点收到sync指令后,执行bgsave,生成rdb文件,并在一个缓冲区中记录从现在开始执行的写命令

3、主节点将生成的rdb发送给从节点,从节点收到后用它来同步数据历史的全量数据

4、之后主节点再将缓冲区内的写命令发送给从节点,从节点收到这些指令并执行,增量的数据写入完成

5、至此数据同步完成

在这里插入图片描述

2.搭建主从架构

1、首先需要安装redis,如果不知道如何安装的可以参考我之前的博文。这里我演示使用的是redis6.2.7。这里我准备了两个节点,一主一从

mac for m1(arm):安装redis的四种方式

2、创建日志文件夹

mkdir -p /var/local/redis/logs

3、修改主节点redis配置文件,redis配置文件默认在redis安装目录下,这里我已经复制到/etc/redis/6379.conf

vim /etc/redis/6379.conf

修改内容:

# 开启守护进程
daemonize yes
# 设置日志目录
logfile /var/local/redis/logs/6379.log
# 开启AOF持久化功能
appendonly yes

注:vim指令中,/加关键字可搜索指定内容

在这里插入图片描述

4、启动主节点,这里我已经将redis_init_script脚本复制到/etc/init.d文件夹下并命令为redis了,所以可以直接使用server redis的形式启动。具体配置参照上述安装redis的文章

service redis start

如果没有配置的,请使用redis-server /etc/redis/6379.conf命令启动

5、修改从节点redis配置文件

# 开启守护进程
daemonize yes			
# 指定日志		
logfile /var/local/redis/logs/6379.log
# 开启AOF持久化功能
appendonly yes
# 指定主节点
replicaof 192.168.244.27 6379

6、启动从节点

7、查看主节点日志

tail -n 100 -f /var/local/redis/logs/6379.log

在这里插入图片描述

可以看到日志中已经显示了从节点的连接信息

我们通过日志也可以佐证主从同步步骤:

# 1. 从节点发起sync指令
2060:M 31 Oct 2022 04:53:50.282 * Replica 192.168.244.28:6379 asks for synchronization
2060:M 31 Oct 2022 04:53:50.282 * Full resync requested by replica 192.168.244.28:6379
2060:M 31 Oct 2022 04:53:50.282 * Replication backlog created, my new replication IDs are '9f8bdcdd700a79fa84442284b3ad7e4fff9209ab' and '0000000000000000000000000000000000000000'
# 2. 主节点执行BGSAVE指令
2060:M 31 Oct 2022 04:53:50.282 * Starting BGSAVE for SYNC with target: disk
2060:M 31 Oct 2022 04:53:50.282 * Background saving started by pid 2072
# 数据保存到磁盘
2072:C 31 Oct 2022 04:53:50.283 * DB saved on disk
2072:C 31 Oct 2022 04:53:50.283 * RDB: 0 MB of memory used by copy-on-write
2060:M 31 Oct 2022 04:53:50.327 * Background saving terminated with success
# 同步成功
2060:M 31 Oct 2022 04:53:50.327 * Synchronization with replica 192.168.244.28:6379 succeeded

测试

1、我们连接主节点,并且写入一个key

在这里插入图片描述

2、再连接从节点,查看key

在这里插入图片描述

如此可证明主从数据同步成功

3、我们尝试在从节点写入一个key

在这里插入图片描述

会发现报错了,这是因为从节点不允许写入数据

总结

至此,我们的主从架构就搭建完成了,实际上我们只需要一个replicaof 主节点IP 端口就能实现主从同步,非常简单。

需要注意的是,实际操作过程中注意开启对应的redis端口或者关闭防火墙(生产环境不建议关闭)

下期继续带大家实操redis哨兵模式

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wu@55555

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值