Redis的主从配置

一、主从配置过程

关于主从配置的过程,我们这里就不做具体详细解释了,看这个文章,还是不错的:

https://www.cnblogs.com/ysocean/p/9143118.html

二、主从复制的原理

这才是我们的主要问题,我们来看一下

  Redis的复制功能分为同步(sync)和命令传播(command propagate)两个操作。

  ①、旧版同步

  当从节点发出 SLAVEOF 命令,要求从服务器复制主服务器时,从服务器通过向主服务器发送 SYNC 命令来完成。该命令执行步骤:

  1、从服务器向主服务器发送 SYNC 命令

  2、收到 SYNC 命令的主服务器执行 BGSAVE 命令,在后台生成一个 RDB 文件,并使用一个缓冲区记录从开始执行的所有写命令

  3、当主服务器的 BGSAVE 命令执行完毕时,主服务器会将 BGSAVE 命令生成的 RDB 文件发送给从服务器,从服务器接收此 RDB 文件,并将服务器状态更新为RDB文件记录的状态。

  4、主服务器将缓冲区的所有写命令也发送给从服务器,从服务器执行相应命令。

  ②、命令传播

  当同步操作完成之后,主服务器会进行相应的修改命令,这时候从服务器和主服务器状态就会不一致。

  为了让主服务器和从服务器保持状态一致,主服务器需要对从服务器执行命令传播操作,主服务器会将自己的写命令发送给从服务器执行。从服务器执行相应的命令之后,主从服务器状态继续保持一致。

  总结:通过同步操作以及命令传播功能,能够很好的保证了主从一致的特性。

  但是我们考虑一个问题,如果从服务器在同步主服务器期间,突然断开了连接,而这时候主服务器进行了一些写操作,这时候从服务器恢复连接,如果我们在进行同步,那么就必须将主服务器从新生成一个RDB文件,然后给从服务器加载,这样虽然能够保证一致性,但是其实断开连接之前主从服务器状态是保持一致的,不一致的是从服务器断开连接,而主服务器执行了一些写命令,那么从服务器恢复连接后能不能只要断开连接的哪些写命令,而不是整个RDB快照呢?

  同步操作其实是一个非常耗时的操作,主服务器需要先通过 BGSAVE 命令来生成一个 RDB 文件,然后需要将该文件发送给从服务器,从服务器接收该文件之后,接着加载该文件,并且加载期间,从服务器是无法处理其他命令的。

  为了解决这个问题,Redis从2.8版本之后,使用了新的同步命令 PSYNC 来代替 SYNC 命令。该命令的部分重同步功能用于处理断线后重复制的效率问题。也就是说当从服务器在断线后重新连接主服务器时,主服务器只将断开连接后执行的写命令发送给从服务器,从服务器只需要接收并执行这些写命令即可保持主从一致。

三、主从复制的缺点

       主从复制虽然解决了主节点的单点故障问题,但是由于所有的写操作都是在 Master 节点上操作,然后同步到 Slave 节点,那么同步就会有一定的延时,当系统很繁忙的时候,延时问题就会更加严重,而且会随着从节点slave的增多而愈加严重。

转载于:https://www.cnblogs.com/lys-lyy/p/11613041.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis 主从配置是一种常见的分布式架构,可以提高 Redis 的可用性和性能。下面是 Redis 主从配置的步骤: 1. 在主服务器上修改配置文件redis.conf,将slaveof选项设置为空,表示该服务器为主服务器。同时,将bind选项设置为主服务器的IP地址,以便从服务器连接主服务器。 2. 在从服务器上修改配置文件redis.conf,将slaveof选项设置为主服务器的IP地址和端口号,表示该服务器为从服务器。同时,将bind选项设置为从服务器的IP地址,以便主服务器连接从服务器。 3. 启动主服务器和从服务器的Redis服务。 4. 在主服务器上执行命令config get *slave*,查看主服务器的slave信息,确认从服务器已经连接到主服务器。 5. 在从服务器上执行命令info replication,查看从服务器的复制信息,确认从服务器已经复制了主服务器的数据。 6. 测试主从配置的可用性和性能。 下面是一个示例,假设主服务器的IP地址为192.168.1.100,从服务器的IP地址为192.168.1.101,端口号都为6379: 1. 在主服务器上修改配置文件redis.conf: ``` # 修改前 slaveof 192.168.1.101 6379 bind 127.0.0.1 # 修改后 slaveof bind 192.168.1.100 ``` 2. 在从服务器上修改配置文件redis.conf: ``` # 修改前 slaveof no one bind 127.0.0.1 # 修改后 slaveof 192.168.1.100 6379 bind 192.168.1.101 ``` 3. 启动主服务器和从服务器的Redis服务: ``` redis-server /path/to/redis.conf ``` 4. 在主服务器上执行命令config get *slave*: ``` 127.0.0.1:6379> config get *slave* 1) "slaveof" 2) "" ``` 5. 在从服务器上执行命令info replication: ``` 127.0.0.1:6379> info replication # Replication role:slave master_host:192.168.1.100 master_port:6379 ... ``` 6. 测试主从配置的可用性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值