redis主从复制,连接两台电脑

什么是redis主从复制

主从复制,是指将一台Redis 服务器的数据,复制到其他的Redis 服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。
主节点 (Master): 主节点是数据源,负责处理所有写操作和客户端连接。它将自己的数据更新发送给所有连接的从节点。
从节点 (Slave): 从节点是主节点的复制品,只能进行读操作(默认情况下),并接收主节点的数据副本。从节点可以通过复制机制保持与主节点数据的一致性。
在这里插入图片描述

redis主从复制的实现方式

全量复制(Full Resynchronization)

全量复制指的是在从节点初次连接到主节点时进行的一次完整数据复制过程。具体流程如下:
在这里插入图片描述
第一阶段是主从库间建立连接、协商同步的过程,主要是为全量复制做准备。在这一步,从库和主库建立起连接,并告诉主库即将进行同步,主库确认回复后,主从库间就可以开始同步了。具体来说,从库给主库发送 psync 命令,表示要进行数据同步,主库根据这个命令的参数来启动复制。psync 命令包含了主库的 runID 和复制进度 offset 两个参数。runID,是每个 Redis 实例启动时都会自动生成的一个随机 ID,用来唯一标记这个实例。当从库和主库第一次复制时,因为不知道主库的 runID,所以将 runID 设为“?”。offset,此时设为 -1,表示第一次复制。主库收到 psync 命令后,会用 FULLRESYNC 响应命令带上两个参数:主库 runID 和主库目前的复制进度 offset,返回给从库。从库收到响应后,会记录下这两个参数。这里有个地方需要注意,FULLRESYNC 响应表示第一次复制采用的全量复制,也就是说,主库会把当前所有的数据都复制给从库。

第二阶段,主库将所有数据同步给从库。从库收到数据后,在本地完成数据加载。这个过程依赖于内存快照生成的 RDB 文件。具体来说,主库执行 bgsave 命令,生成 RDB 文件,接着将文件发给从库。从库接收到 RDB 文件后,会先清空当前 数据库,然后加载 RDB 文件。这是因为从库在通过 replicaof 命令开始和主库同步前,可能保存了其他数据。为了避免之前数据的影响,从库需要先把当前 数据库清空。在主库将数据同步给从库的过程中,主库不会被阻塞,仍然可以正常接收请求。否则, Redis 的服务就被中断了。但是,这些请求中的写操作并没有记录到刚刚生成的 RDB 文件中。为了保证主从库的数据一致性,主库会在内存中用专门的 replication buffer,记录 RDB 文件生成后收到的所有写操作。

第三个阶段,主库会把第二阶段执行过程中新收到的写命令,再发送给从库。具体的操作是,当主库完成 RDB 文件发送后,就会把此时 replication buffer 中的修改操作发给从库,从库再重新执行这些操作。这样一来,主从库就实现同步了。

初始化同步:
当一个从节点初次连接到主节点时,它会发送一个同步请求。
主节点在收到同步请求后,会启动一个后台进程,将当前数据集的完整副本发送给从节点。
这个过程中,主节点会将自己的整个数据集以数据流的形式发送给从节点。
应用场景:
初次建立主从复制关系时会执行全量复制。
当从节点重新连接到主节点或者数据出现严重不一致时,可能需要进行重新的全量复制。
优点:
简单直观,确保从节点能够快速获得完整的数据副本。
适用于初始同步或者数据严重不一致时的重建。
缺点:
数据量大时,可能会消耗较多网络带宽和主从节点的计算资源。
长时间的全量复制可能会对系统性能产生影响。

增量复制(Incremental Replication)

增量复制是指在完成初始同步后,主节点将新的写操作或数据变更实时地传输给从节点的过程。具体流程如下:
在这里插入图片描述

增量传输
当主节点接收到客户端的写操作时,会先将操作命令记录在自己的AOF(Append Only File)或者内存中的复制缓冲区中。
主节点会将这些写操作的命令以数据流的形式发送给所有连接的从节点。
从节点接收到命令后,会执行相同的操作,确保自己的数据集与主节点保持一致。
应用场景:
主从复制建立后的日常运行过程中持续执行。
适用于保持主从节点之间数据实时性和一致性的需求。
优点:
实时性好,从节点能够快速获取主节点的最新数据变更。
对系统性能的影响较小,因为只传输变更的部分数据。
缺点:
如果从节点离线时间过长或者复制缓冲区溢出,可能会需要重新进行全量复制来恢复数据一致性。

举例

局域网两台电脑使用Redis通信
PC:使用两台PC部署redis
masterip:192.168.64.110
slaveip:192.168.64.100
步骤
1.修改配置文件
master:
redis.windows.conf

bind:127.0.0.1

修改为:

bind 192.168.64.110

slave:
复制一个redis.windows.conf,重命名为slave.conf,修改slave.conf

bind 192.168.64.100
port 6378

添加:

# slaveof <masterip> <masterport>
slaveof 192.168.64.110 6379

2.分别启动redis
master:

redis-server.exe redis.windows.conf

在这里插入图片描述

slave:

redis-server.exe slave.conf

在这里插入图片描述
3.检查一下主从关系
在这里插入图片描述
4.redis连接

master:

redis-cli.exe -h 192.168.64.110 -p 6379

在这里插入图片描述

slave:

redis-cli.exe -h 192.168.64.100 -p 6378

在这里插入图片描述

5.redis通信

master:
在这里插入图片描述

slave:
在这里插入图片描述

参考链接:https://pdai.tech/md/db/nosql-redis/db-redis-x-copy.html

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值