返回顶部
首页 > 资讯 > 精选 >redis主从复制的实现方法是什么
  • 945
分享到

redis主从复制的实现方法是什么

2023-06-05 06:06:05 945人浏览 独家记忆
摘要

本篇内容介绍了“redis主从复制的实现方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 简介这篇文章主要讲述Redis的主从复制

本篇内容介绍了“redis主从复制的实现方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1 简介

这篇文章主要讲述Redis的主从复制功能。会依次从环境搭建、功能测试和原理分析几个方面进行介绍。

2 准备工作

服务器架构图如下 
redis主从复制的实现方法是什么

启动主服务器101,使用info replication命令查看状态,可以看到role为master(也就是角色为主主服务器),connected_salaves的值为0(从服务器数量为0) 
redis主从复制的实现方法是什么

接下来用修改配置文件的方式将102机器加入的主从复制当中

然后再用命令的方式同样将103机器加入的主从复制当中。

2.1 用修改配置文件的方式将102机器加入到主从

ip地址为192.168.17.102的机器的Redis配置文件增加slaveof 192.168.17.101 6379 
启动102的redis,状态如下 
redis主从复制的实现方法是什么

可以看到role变为slave(角色为从服务器),master_host(主服务器IP地址)为192.168.17.101,master_port(主服务器端口)为6379。 
此时101主服务器的主从状态如下,可以看到connected_salaves的值变为1,以及增加了一行slave0(从服务器的状态) 
redis主从复制的实现方法是什么

2.2 用命令的方式将103机器加入到主从

未执行slaveof命令的主从状态如下 
redis主从复制的实现方法是什么

开始执行slaveof命令

192.168.17.103:6379> slaveof 192.168.17.101 6379OK

再次查看状态,可以看到角色已经变成从服务器 
redis主从复制的实现方法是什么

现在再来看看主服务器的状态,可以看到从服务器数量变成2,又多了一条从服务器的信息 
redis主从复制的实现方法是什么

到这里主从环境就搭好了,现在来测试一波

2.3 测试

现在主服务器101输入命令

192.168.17.101:6379> set 101 101OK

然后在从服务器102上查看所有的键,发现有键101,接着设置键102

192.168.17.102:6379> keys *1) "101"192.168.17.102:6379> get 101"101"192.168.17.102:6379> set 102 102(error) READONLY You can't write against a read only slave.

发现出现错误(error) READONLY You can't write against a read only slave. 后面在讲述出错原因

现在在从服务器103上查看所有的键,发现也有101

192.168.17.103:6379> keys *1) "101"

再向主服务器101输入命令

192.168.17.101:6379> set ip ipOK

然后到从服务器103上查看所有的键

192.168.17.103:6379> keys *1) "101"2) "ip"

可以看到多了一个键,说明主服务的数据同步到了从服务器上,操作过程看下图 
redis主从复制的实现方法是什么

2.4 其他

2.4.1 (error) READONLY You can't write against a read only slave.

出现错误(error) READONLY You can't write against a read only slave. 是因为
从节点默认是只读的,如需修改可以再配置文件中修改下面这个属性

slave-read-only yes

2.4.2 主服务器设置密码

当主服务设置密码时,配置文件需要增加如需参数

masterauth <master-passWord>

3 实现原理

当我在从服务器103上输入slaveof命令时,出现如下日志 
redis主从复制的实现方法是什么

总的来说主从复制功能的详细步骤可以分为7个步骤:

  1. 设置主服务器的地址和端口

  2. 建立套接字连接

  3. 发送PING命令

  4. 身份验证

  5. 发送端口信息

  6. 同步

  7. 命令传播

接下来分别叙述每个步骤

3.1设置主服务器的地址和端口

主从复制的第一步就是设置主服务器的地址和端口,当输入slaveof命令或者在配置文件中配置信息时,从服务器会将主服务器的ip地址和端口号保存到服务器状态的属性里面。

3.2 建立套接字连接

在slaveof命令执行之后,从服务器会根据设置的ip和端口,向主服务器简历Socket连接。

3.3 发送PING命令

socket连接成功后,从服务器会发送一PING命令给主服务器。

这时候PING命令可以检查socket的读写状态是否正常,还可以检查主服务器能否正常处理命令请求。

从服务器在发送PING命令时可能遇上的情况如下图
redis主从复制的实现方法是什么

3.4 身份验证

从服务器收到主服务器的PONG回复后,会检查从服务器是否设置masterauth,设置则进行身份验证,未设置则跳过该步骤。从服务器在身份验证时可能遇上的情况如下

redis主从复制的实现方法是什么

3.5 发送端口信息

身份验证通过后,从服务器会向主服务器发送自己的监听端口号。主服务器收到之后会将端口号记录到从服务器对应的状态属性中。在主服务器调用info replication可以看到从服务器的port,如下

redis主从复制的实现方法是什么

3.6 同步

发送端口信息之后,从服务器会向主服务器发送PSYNC命令,执行同步操作,并将自己的数据库同步至主服务器数据库当前的状态。

同步这块内容会在后面详细描述

3.7 命令传播

当完成同步操作之后,主从服务器便会进入命令传播阶段。这时候主从服务器的数据是一致的,当主服务器有新的写命令时,会将改命令发送给从服务器,从服务器接收命令并执行便可以保证与主服务器的数据保持一致。 
那么Redis是如何保证主从服务器一致处于连接状态以及命令是否丢失? 
答:命令传播阶段,从服务器会利用心跳检测机制定时的向主服务发送消息。 
从服务器发送的命令如下

REPLCONF ACK <replication_offset>

replication_offset表示从服务器当前的复制偏移量 
接下来看看心跳机制

3.7.1 心跳检测机制

心跳检测机制的作用有三个:

  1. 检查主从服务器的网络连接状态

  2. 辅助实现min-slaves选项

  3. 检测命令丢失

3.7.1.1 检查主从服务器的网络连接状态

主服务器信息中可以看到所属的从服务器的连接信息,state表示从服务器状态,offset表示复制偏移量,lag表示延迟值(几秒之前有过心跳检测机制)

redis主从复制的实现方法是什么

3.7.1.2 辅助实现min-slaves选项

Redis.conf配置文件中有下方两个参数

# 未达到下面两个条件时,写操作就不会被执行# 最少包含的从服务器# min-slaves-to-write 3# 延迟值# min-slaves-max-lag 10

如果将两个参数的注释取消,那么如果从服务器的数量少于3个,或者三个从服务器的延迟(lag)大于等于10秒时,主服务器都会拒绝执行写命令。

3.7.1.3 检测命令丢失

在从服务器的连接信息中可以看到复制偏移量,如果此时主服务器的复制偏移量与从服务器的复制偏移量不一致时,主服务器会补发缺失的数据。

4 同步原理

同步分为全量重同步和部分重同步。那么是什么决定采取全量重同步还是部分重同步操作?

redis主从复制的实现方法是什么

4.1 全量重同步

全量重同步的步骤如下

  1. 主节点收到从服务器的全量重同步请求时,主服务器便开始执行bgsave命令,同时用一个缓冲区记录从现在开始执行的所有写命令。

  2. 当主服务器的bgsave命令执行完毕后,会将生成的RDB文件发送给从服务器。从服务器接收到RDB文件时,会将数据文件保存到硬盘,然后加载到内存中。

  3. 主服务器将缓冲区所有缓存的命令发送到从服务器,从服务器接收并执行这些命令,将从服务器同步至主服务器相同的状态。

4.2 部分重同步

要想了解部分重同步的步骤,需要先了解部分重同步所需要的几个属性

  1. 复制偏移量

  2. 复制缓冲区

  3. 运行ID

4.2.1 复制偏移量

从主服务器的复制信息可以看到从服务器slave0和slave1都有一个参数offset,这个参数就是从服务器的复制偏移量。master_repl_offset这个参数就是主服务器的偏移量。如下图

redis主从复制的实现方法是什么

主服务器的复制偏移量保存向从服务器发送过的字节数据。 
从服务器的复制偏移量保存着从主服务器接收的字节数据。 
通过对比主服务器和从服务器的复制偏移量就可以知道命令是否丢失,丢失则补发复制偏移量相差的字节命令。 
那么这些字节数据是存放在哪里的呢?

4.2.2 复制缓冲区

这些字节数据都是存放在主服务器的复制缓冲区里的。复制缓冲区是一个固定长度(fixed-size)先进先出(FIFO)的队列,默认大小为1MB。默认大小可以对下方的参数进行修改

# repl-backlog-size 1mb

那么复制缓冲区的数据是什么时候加入进去的呢?

答:在命令传播阶段,主节点除了将写命令发送给从节点,还会发送一份给复制积压缓冲区。

redis主从复制的实现方法是什么

复制缓冲区里面会保存着一部分最传播的写命令和每个字节相应的复制偏移量。

由于复制缓冲区的大小是有限制的,所以保存的数据也是有限制的。如果从服务器与主服务器的复制偏移量相差的数据大于复制缓冲去存储的数据时,同样不会执行部分重同步。

举个例子,主服务器的复制偏移量为20000、缓冲区能保存的数据只有5000,从服务器的复制偏移量为10000。这时从服务器与主服务器复制偏移量10000,而缓冲区只有5000,那么还是会执行全量重同步。如果相差的复制偏移量小于5000,才会执行部分重同步。

4.2.3 运行ID

每个Redis服务器启动时,都会有自动生成自己的运行ID。 
当从服务器对主服务器进行初次复制时,主服务器会发送自己的运行ID给从服务器。 
当从服务器断线重连时,会将之前主服务器的运行ID发送给当前连接的主服务器。这时候会出现下面两种情况

  1. 运行ID和主服务器一致,主服务器可以尝试执行部分重同步操作。

  2. 运行ID和主服务器不一致,说明之前连接的主服务器与这次连接不同,开始执行全量重同步操作。

5 相关配置

################################# REPLICATION ################################## slaveof <主服务器ip> <主服务器端口># slaveof <masterip> <masterport># masterauth <主服务器Redis密码># masterauth <master-password># 当slave丢失master或者同步正在进行时,如果发生对slave的服务请求# yes则slave依然正常提供服务# no则slave返回client错误:"SYNC with master in progress"slave-serve-stale-data yes# 指定slave是否只读slave-read-only yes# 无硬盘复制功能repl-diskless-sync no# 无硬盘复制功能间隔时间repl-diskless-sync-delay 5# 从服务器发送PING命令给主服务器的周期# repl-ping-slave-period 10# 超时时间# repl-timeout 60# 是否禁用socket的NO_DELAY选项repl-disable-tcp-nodelay no# 设置主从复制容量大小,这个backlog 是一个用来在 slaves 被断开连接时存放 slave 数据的 buffer# repl-backlog-size 1mb# master 不再连接 slave时backlog的存活时间。# repl-backlog-ttl 3600# slave的优先级slave-priority 100# 未达到下面两个条件时,写操作就不会被执行# 最少包含的从服务器# min-slaves-to-write 3# 延迟值# min-slaves-max-lag 10

“redis主从复制的实现方法是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: redis主从复制的实现方法是什么

本文链接: https://lsjlt.com/news/241643.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redis实现主从复制的方法是什么
    本篇内容介绍了“Redis实现主从复制的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Master&Slave是什么?...
    99+
    2023-07-02
  • redis主从复制的实现方法是什么
    本篇内容介绍了“redis主从复制的实现方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 简介这篇文章主要讲述Redis的主从复制...
    99+
    2023-06-05
  • redis主从复制是什么
    Redis主从复制是一种数据同步机制,其中一个Redis实例(称为主节点)将其数据异步复制到其他一个或多个Redis实例(称为从节点...
    99+
    2023-09-09
    redis
  • Redis的主从复制是什么,主从复制的原理又是什么?
    redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有...
    99+
    2024-04-02
  • Redis中的主从复制是什么
    这篇文章主要为大家展示了“Redis中的主从复制是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Redis中的主从复制是什么”这篇文章吧。Redis支持主从...
    99+
    2024-04-02
  • 怎么实现Redis主从复制
    本篇内容介绍了“怎么实现Redis主从复制”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!架构主 192.1...
    99+
    2024-04-02
  • Redis主从复制的原理是什么
    Redis主从复制是通过将主节点的数据同步复制到从节点来实现数据的备份和高可用性。实现主从复制的原理主要包括以下几个步骤: 从节...
    99+
    2024-03-11
    Redis
  • PHP实现Redis数据库主从复制的方法
    近年来随着Web应用的快速发展,数据库的处理量也越来越大,性能的要求也越来越高,所以分布式数据库的需求也日渐增加。而Redis是一种流行的NoSQL数据库,支持多种分布式方案,其中主从复制是一种常用且实现起来比较简单的分布式方案。本文将介绍...
    99+
    2023-05-15
    PHP redis 主从复制
  • Redis主从复制原理是什么
    Redis主从复制原理是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!一、什么是Redis主从复制?主从复制就是现在有...
    99+
    2024-04-02
  • Redis实现主从复制方式(Master&Slave)
    目录主从复制方式(Master&Slave)一、Master&Slave是什么?二、它能干嘛?三、怎么玩?四、复制原理五、哨兵模式(sentinel)六、复制的缺点R...
    99+
    2024-04-02
  • Redis中怎么实现主从复制
    今天就跟大家聊聊有关Redis中怎么实现主从复制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.首先下去官网下载并安装redis若安装成功点击redis-server 如...
    99+
    2023-06-20
  • PHP实现Redis主从复制自动切换的方法
    Redis是一款非常流行的键值对存储数据库,在现代Web应用中扮演着至关重要的角色。为了保证Redis的高可用性和稳定性,通常需要使用主从复制的技术。同时,由于主节点故障时需要自动切换到备用节点,使得复制集群具有自我修复的能力。下面介绍PH...
    99+
    2023-05-16
    PHP Redis 主从复制
  • Redis中的主从复制是什么意思
    本篇内容介绍了“Redis中的主从复制是什么意思”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • MySQL主从复制的实现方法
    这篇文章给大家分享的是有关MySQL主从复制的实现方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。          &nbs...
    99+
    2024-04-02
  • redis主从复制什么时候复制
    Redis的主从复制机制是指可以让从服务器(slave)能精确复制主服务器(master)的数据,如下图所示: (推荐学习:Redis视频教程) 上面的图表示的是一台master服务器与slave服务器的情况,其实一台master...
    99+
    2020-08-31
    redis
  • redis主从复制如何实现
    redis主从复制是一种实现数据冗余和高可用性的机制,通过以下步骤实现:建立连接、部分复制、增量复制、更新状态和同步完成。它具有数据冗余、高可用性、负载均衡和灾难恢复等优势,但也应注意其...
    99+
    2024-06-12
    redis
  • Redis主从复制与哨兵机制是什么
    这篇文章主要介绍了Redis主从复制与哨兵机制是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Redis主从复制与哨兵机制是什么文章都会有所收获,下面我们一起来看看吧。一、Redis复制是什么?Redis复...
    99+
    2023-07-05
  • redis主从复制失败的原因及解决方法是什么
    Redis主从复制失败的原因和解决方法如下:1. 网络问题:主从之间的网络连接不稳定或出现故障,导致复制失败。- 解决方法:检查网络...
    99+
    2023-08-20
    redis
  • Redis实现主从复制方式(Master&Slave)
    目录主从复制方式(Master&Slave)一、Master&Slave是什么?二、它能干嘛?三、怎么玩?四、复制原理五、哨兵模式(sentinel)六、复制的缺点Redis master, slave节...
    99+
    2022-06-20
    Redis实现主从复制 Redis主从复制 主从复制Master Slave
  • Redis主从复制的底层原理是什么
    Redis主从复制的底层原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。复制原理1.复制过程复制的过程步骤如下:1、从...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作