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
。这里我准备了两个节点,一主一从
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哨兵模式
转载:https://blog.csdn.net/qq_24950043/article/details/127524421