Redis相关问题--主从复制

1.主从复制

1.这是一个典型的读写分离的模式,redis支持主从复制的模式。该模式下主要分为两点:主节点和从节点,一个主节点和多种从节点构成。如图
在这里插入图片描述
原则:主节点(Master)会同步子节点(slave),而字节点不会同步到主节点,子节点启动时会连接主节点同步数据
我们可以通过主节点处理写操作,子节点提供读操作,这样就有效的减少了单个及其的并发访问数量
实现方法:

要实现主从复制这种模式非常简单,主节点不用做任何修改,直接启动服务即可。从节点需要修改redis.conf配置文件,加入配置:slaveof <主节点ip地址> <主节点端口号>,例如master的ip地址为192.168.200.129,端口号为6379,那么slave只需要在redis.conf文件中配置slaveof 192.168.200.129 6379即可。
分别连接主节点和从节点,测试发现主节点的写操作,从节点立刻就能看到相同的数据。但是在从节点进行写操作,提示 READONLY You can’t write against a read only slave 不能写数据到从节点。
现在我们就可以通过这种方式配置多个从节点进行读操作,主节点进行写操作,实现读写分离。

2.redis同步原理

当为我们实现读写分离时,主服务器突然挂掉,那么子节点如何拿到主节点的这段时间的命令呢?

首先我们得了解,主从复制将主从服务器的双发的数据库都保存相同的数据,这种现象称为数据库状态一致性,其次,我们得知道,Redis数据库持久化有两种方式:RDB全量持久化和AOP增量持久化

再来讲解数据同步的步骤:

第一种完整同步
1.首先由图来理解过程
在这里插入图片描述
在redis2.8版本之前使用的就是SYNC旧版的复制功能,这是一个耗费资源的操作

2.过程:
PSYNC一般用于初次复制,主服务器执行BGSAVE命令来生成RDB文件,并将缓存区的增量命令同步给从服务器
3.影响

  • 主服务器会执行命令来生成RDB文件,生成操作会耗费主服务器大量的CPU和内存用来读写
  • 主服务器会消耗带宽和流量

第二种部分重同步

参照上图,不同的是,第二种部分重同步一般用于断线后重同步情况
----->1.将断线后的写命令放入缓存区,
----->2.将断线期间的写命令发送给从服务器
具体过程:
在部分重同步涉及三个部分:
1.偏移量
2.积压缓存
3.储存服务器标识的ID

1.偏移量
主服务器和从服务器都维护了一个复制偏移量,对应主服务器来说,是记录主服务器同步了多少数据给从服务器,即主服务器每进行一次写操作,如SET key “helloworld”,都会将该写命令同步给从服务器,而在主服务器中会计算这个命令的字节数,假如为N个,则主服务器的复制偏移量将会递增N。
从服务器的复制偏移量则记录了从服务器从主服务器同步了多少字节的数据,如当接收到主服务器的以上写命令时,从服务器也会将自身复制偏移量递增N。

2.复制积压区缓存
复制积压缓冲区主要用于缓存主服务器发送给从服务器的数据,在从服务器断线重连后,从该缓冲区查找从服务器断线期间,主服务器的写命令数据,从而主服务器可以从该缓冲区获取从服务器落后的数据,发送给从服务器,实现部分同步。

3.服务器ID
主要用于服务器断线重连后,获取重服务器和猪服务器进行ID进行对比
判断是否是原来的主服务器,重而决定执行部分重同步还是完整重同步


参照文章资料总结至:
https://blog.csdn.net/u010013573/article/details/88288941 作者:服务端开发

猜你喜欢

转载自blog.csdn.net/qq_18361601/article/details/106987214