Redis设计与实现知识点总结-主从复制

复制

用户可以通过执行SLAVEOF命令或者设置其选项,让一个服务器去复制另一个服务器。这样形成了简易化集群。

在2.8版本以前主从复制的机制是:

从服务器主动请求复制,主服务器执行BGSAVE命令,将生成的RDB文件,发送给从服务器,并在此时使用一个缓冲区缓冲生成RDB文件以后没有写入的命令。

从服务器接受到RDB文件进行数据的更新。 然后接受主服务器传来的缓冲区的命令,执行进行同步处理。

复制断线问题解决方法:

当从服务器在复制中重启会重新向服务器发送一个指令提示主服务器继续复制,而主服务器会重新生成RDB文件等操作,最后将文件发送给从服务器。

从这种方法中我们可以得出,主服务器做了两次生成RDB操作,而且,两次RDB文件里面相差的数据不是很大(假设在正常使用的情况下,而非这一秒添加大量数据,下一秒删除大量数据这种极端情况下),所以这样及其浪费主服务器的性能。

自2.8以后的版本:

为了解决断线重复生成RDB文件造成的低效问题。Redis使用了新的命令来进行提示主服务器我又连上了。

部分重同步机制,当从服务器在断线重连后,主服务器将主从服务器连接断开期间执行的写命令发送给从服务器,而从服务器只需要执行断开期间丢失的命令即可。

部分重同步机制,原理为主从服务器分别维护一个复制偏移量。

每次主服务器向从服务器传播N个字节时,会将自己的复制偏移量加上N。

从服务器每次收到请求后,会将自己的复制偏移量也加上N

这样,如果主从服务器处于一致的状态,则复制偏移量是相同的。

我们考虑这么一个问题,当主节点向从节点发送一个几个字节的数据,而从服务器断线了,这时候别的从服务器能够接受数据并成功返回收到了。当从服务器上线后数据肯定与主服务器不一致性,那么这时候应该执行全部复制同不,还是部分重同步功能那?

在主服务器发送命令到从服务器的时候,自己会将命令发送到一个自己维护的缓冲区中,缓冲区的大小为1MB使用了FIFO队列的结构。所以我们可以了解到,如果从服务在这个缓冲区中查找自己的复制偏移量,如果找的了就使用部分重同步,如果没有找到就实行完全同步。

服务器ID

从服务器和主服务器都保存着一个ID,当从服务器与主服务器一致时,说命从服务器是这个主服务器上的从节点。

在集群中,从服务器默认每秒一次的频率告知主服务器自己的状态以及复制偏移量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。Redis是一个开源的内存数据结构存储系统,支持多种数据结构,如字符串、哈希、列表等。Redis主从复制是一种数据复制机制,用于将一个Redis服务器的数据复制到其他Redis服务器上。 下面是一个使用Docker Compose配置Redis主从复制的示例: 1. 首先,创建一个名为docker-compose.yml的文件,并在其中定义两个Redis服务,一个作为主服务器,另一个作为从服务器。示例配置如下: ```yaml version: '3' services: redis-master: image: redis ports: - "6379:6379" volumes: - ./redis-master-data:/data command: redis-server --appendonly yes redis-slave: image: redis volumes: - ./redis-slave-data:/data command: redis-server --slaveof redis-master 6379 ``` 2. 在上述配置中,我们定义了两个服务:redis-master和redis-slave。redis-master服务使用Redis官方镜像,并将主服务器的6379端口映射到主机的6379端口。同时,我们将主服务器的数据目录挂载到本地的redis-master-data目录。 3. redis-slave服务也使用Redis官方镜像,并将从服务器的数据目录挂载到本地的redis-slave-data目录。在command字段中,我们使用--slaveof参数指定redis-slave作为redis-master的从服务器,并指定主服务器的地址和端口。 4. 在终端中,进入包含docker-compose.yml文件的目录,并运行以下命令启动Redis主从复制: ```bash docker-compose up -d ``` 5. 等待一段时间,直到两个Redis服务器都成功启动。您可以使用以下命令检查容器的状态: ```bash docker-compose ps ``` 6. 现在,您可以通过连接到主服务器的6379端口来访问Redis主服务器,并将数据复制到从服务器。您可以使用以下命令连接到Redis服务器: ```bash redis-cli -h localhost -p 6379 ``` 7. 在连接到主服务器后,可以执行一些Redis命令来设置和检索数据。这些数据将自动复制到从服务器。 这就是使用Docker Compose配置Redis主从复制的基本步骤。您可以根据需要进行调整和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值