Redis手记之主从复制(七)

什么是主从复制

持久化保证了即使 redis 服务重启也会丢失数据,因为 redis 服务重启后会将硬盘上持久化的数据恢复到内存中,但是当 redis 服务器的硬盘损坏了可能会导致数据丢失,如果通过 redis 的主从复制机制就可以避免这种单点故障,如下图:
在这里插入图片描述
说明:

  • 主 redis 中的数据有两个副本(replication)即从 redis1 和从 redis2,即使一台 redis 服务器宕机其它两台 redis 服务也可以继续提供服务。

  • 主 redis 中的数据和从 redis 上的数据保持实时同步,当主 redis 写入数据时通过主从复制机制会复制到两个从 redis 服务上。

  • 只有一个主 redis,可以有多个从 redis。

  • 主从复制不会阻塞 master,在同步数据时,master 可以继续处理 client 请求。

  • 一个 redis 可以即是主又是从,如下图:
    -在这里插入图片描述

主从配置

主 redis 配置
  • 无需特殊配置。
从 redis 配置

修改从 redis 服务器上的 redis.conf 文件,添加 slaveof 主 redisip 主 redis 端口。

	# slaveof    <master ip> <port>

主从复制过程

1、完整复制过程

在 redis2.8 版本之前主从复制过程如下图:


复制过程说明:

  • slave 服务启动,slave 会建立和 master 的连接,发送 sync 命令。

  • master 启动一个后台进程将数据库快照保存到 RDB 文件中。

注意:此时如果生成 RDB 文件过程中存在写数据操作会导致 RDB 文件和当前主 redis 数据不一致,所以此时 master 主进程会开始收集写命令并缓存起来。

  • master 就发送 RDB 文件给 slave

  • slave 将文件保存到磁盘上,然后加载到内存恢复

  • master 把缓存的命令转发给 slave

注意:后续 master 收到的写命令都会通过开始建立的连接发送给 slave。

当 master 和 slave 的连接断开时 slave 可以自动重新建立连接。如果 master 同时收到多个 slave 发来的同步连接命令,只会启动一个进程来写数据库镜像,然后发送给所有 slave。

完整复制的问题:

在 redis2.8 之前从 redis 每次同步都会从主 redis 中复制全部的数据,如果从 redis 是新创建的从主 redis 中复制全部的数据这是没有问题的,但是,如果当从 redis 停止运行,再启动时可能只有少部分数据和主 redis 不同步,此时启动 redis 仍然会从主 redis 复制全部数据,这样的性能肯定没有只复制那一小部分不同步的数据高。

2、部分复制

在这里插入图片描述
部分复制说明:

从机连接主机后,会主动发起 PSYNC 命令,从机会提供 master 的 runid(机器标识,随机生成的一个串) 和 offset(数据偏移量,如果offset主从不一致则说明数据不同步),主机验证 runid 和 offset 是否有效,runid 相当于主机身份验证码,用来验证从机上一次连接的主机,如果 runid 验证未通过则,则进行全同步,如果验证通过则说明曾经同步过,根据 offset 同步部分数据。

参考:http://blog.itpub.net/31545684/viewspace-2213629/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:主从自动切换是指在Redis中,通过配置哨兵(sentinel)来实现主从复制的自动切换。当主节点出现故障或不可用时,哨兵会监控主节点的状态,并根据配置的规则自动将一个从节点升级为新的主节点,以保证系统的高可用性。引用\[2\]:在从服务器上配置哨兵时,需要将哨兵配置文件拷贝到Redis安装目录的bin目录下,并进行相应的配置。配置文件中需要指定要监控的主节点的IP和端口,以及从节点的投票数,用于决定切换的条件。如果主节点配置了密码,还需要在配置文件中进行认证配置。最后,通过运行redis-sentinel命令启动哨兵模式。引用\[3\]:在安装Redis多实例和主从同步时,首先需要下载并安装Redis。然后创建Redis的数据目录和日志目录。接下来,可以通过编译和安装Redis来完成安装过程。在安装完成后,可以配置主从复制和哨兵来实现高可用性。 #### 引用[.reference_title] - *1* *3* [redis5.0的主从跟哨兵](https://blog.csdn.net/fengge55/article/details/122574880)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [CentOS7 Redis5.0的主从复制和哨兵模式](https://blog.csdn.net/php12345679/article/details/103807389)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值