Redis-主从复制(一)

什么是主从复制?

    将一台redis服务器的数据,复制到其他的redis服务器,前者称为主节点,后者称为从节点,数据的复制是单向的,只能由主节点复制到从节点。
    默认情况下,每台redis服务器都是主节点,一个主节点可以有多个从节点(或者没有),但一个从节点只能有一个主节点。

主从复制的作用?

    数据冗余 : 主从复制实现了数据的热备份(热备份是系统处于正常运转状态下的备份。),是持久化之外的一种数据冗余方式。
    故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复,实际上是一种服务的冗余。
    负载均衡:在主从复制的基础上,配合读写分离,主节点提供写服务,从节点提供读服务,(写redis数据时应用连接主节点,读redis数据时应用连接从节点),分担服务器负载,尤其是在写少读多的情况下,通过多个从节点担读负载,可以大大提高redis服务器的并发量。
    高可用基石: 主从复制还是哨兵和集群能够实施的基础,因此说主从复制是redis 高可用的基础。
冷备份是指 数据库关闭之后备份所有关键性文件。

如何使用主从复制?

     1、主节点保持原样无需配置
    2、从节点三种配置方案

 从节点开启主从复制有三种方式
→ 配置文件  
在从服务器的配置文件中加入 :slaveof<masterip><masterport>
→启动命令
redis-server启动命令后加入 --slaveof<masterip><masterport>
→客户端命令
redis 服务器启动后,直接通过客户端执行命令 slaveof<masterip><masterport>,则该redis实例成为从节点。

    3、两个节点开始启动
    4、从节点主动连接主节点

 slaveof 127.0.0.1 6379

输入info 查看结果
这里写图片描述
    5、断开连接,结束复制

slaveof no one

主从复制实现的原理

    大致分为3个阶段 :连接建立→数据同步→命令传播
     连接建立阶段(准备阶段)
    1、保存主节点信息
    主从节点之间建立连接,为数据同步做好准备
     从节点服务器内部维护了masterhost 和masterport 字段,用于存储主节点的ip和port 信息,从节点完成主节点ip和port的保存后,向发送slaveof命令的客户端直接返回OK,实际的复制操作在这之后才开始进行。
    2、建立socket连接
    从节点每秒1次调用复制定时函数replicationCron() ,如果发现了有主节点可以连接,便会根据主节点的ip和port ,创建socket连接,如果连接成功,则:
    从节点: 为该socket 建立一个专门处理复制工作的文件事件处理器,负责后续的复制工作,如接收rdb文件、接收命令传播等。
    主节点: 接收到从节点的socket连接后(accept),为该socket创建相应的客户端状态,并将从节点看作是连接到主节点的一个客户端,后面的步骤会以从节点向主节点发送命令请求的形式来进行。
    3、发送ping命令
    从节点成为主节点的客户端之后,发送ping命令进行首次请求,目的是: 检查socket 连接是否可用,以及主节点当前是否能够处理请求。
    从节点发送ping命令后,可能会出现3种情况:
    1、返回pong :说明socket连接正常,且主节点当前可以处理请求,复制过程继续。
    2、超时:一定时间后从节点仍未收到主节点的回复,说明socket连接不可用,则从节点断开socket连接,并重连。
    3、返回pong 以外的结果:如果主节点返回其他结果,如正在处理超时运行的脚本,说明主节点当前无法处理命令,则从节点断开socket连接,并重连。
    4、身份验证
    如果从节点设置了masterauth选项,则从节点需要向主节点进行身份验证;没有设置该选项,则不需要验证,从节点进行身份验证是通过向主节点发送auth命令进行的,auth命令的参数为配置文件的masterauth的值。
如果主节点设置密码的状态,与从节点masterauth的状态一致(一致是指都存在,且密码相同,或者都不存在),则身份验证通过,复制过程继续;如果不一致,则从节点断开socket连接,并重连!
    5、发送从节点端口信息
    身份验证之后,从节点会向主节点发送其监听的端口号,主节点将该信息保存到该从节点对应的客户端slave_listening_port中,该端口信息除了在主节点中执行info replication时显示以外,没有其他作用。
数据同步阶段
     从节点向主节点发送psync命令(redis2.8以前时sync命令),开始同步。
    根据主从节点当前状态的不同,分为全量复制和部分复制。
    在数据同步阶段以前,从节点是主节点的客户端,主节点不是从节点的客户端;到这这一阶段及以后,主从节点互为客户端。 在此之前,主节点只需要响应从节点的请求即可,不需要主动发请求,而在后面阶段,主节点需要主动向从节点发送请求,才能完成复制。
命令传播阶段
    主节点将自己执行的写命令发送给从节点,从节点接收命令并执行,从而保证主从节点数据的一致性.
    主从节点还维持着心跳机制:PING和 REPLCONFACK

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

奔跑的大白啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值