目录
主从基本配置
主Redis配置
从Redis配置
1、复制一份redis.conf文件
2、相关配置修改
3、配置主从复制
4、启动从节点
5、连接从节点
6、测试在6379实例上写数据,6380实例是否能及时同步新修改数据
主从配置的作用
读写分离
数据容灾
Redis主从工作原理
主从复制之全量复制
1、与主Redis建立Socker长连接
2、主Redis接收到PSYNC命令
3、主Redis把rdb快照发送给从Redis
4、从节点接收到rdb快照
5、主Redis发送buffer缓存文件到从Redis
6、从节点接收buffer缓存文件
7、主Redis通过Socker长连接连续把命令发送到从节点
总述
主从复制之部分复制
简述
主从复制之增量同步
主从复制之心跳检测
1.检测主从的连接状态
2.辅助实现min-slaves
3.检测命令丢失
如何判断全量复制还是部分复制
首页 数据库 Redis 详细了解Redis中的主从复制

详细了解Redis中的主从复制

Dec 27, 2021 am 10:17 AM
redis 主从复制

本篇文章给大家了解一下Redis中的主从复制,介绍一下主从基本配置、主从配置的作用和原理,希望对大家有所帮助!

详细了解Redis中的主从复制

Redis支持主从复制功能,可以通过执行slaveof(Redis5版本以后改成replicaof)或者在配置文件中设置slaveof(Redis5版本以后改成replicaof)来开启复制功能。【相关推荐:Redis视频教程

  • 一主两丛

详细了解Redis中的主从复制

  • 一主多从

详细了解Redis中的主从复制

主从基本配置

主Redis配置

主Redis配置基本不用修改,重点部分在从Redis配置

从Redis配置

1、复制一份redis.conf文件

2、相关配置修改

# salve的端口号
port 6380 

#把pid进程号写入pidfile配置的文件
pidfile /var/run/redis_6380.pid 

logfile "6380.log"  

#指定数据存放目录
dir /usr/local/redis‐5.0.3/data/6380 

#需要注释掉bind
#bind127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
登录后复制

3、配置主从复制

#从本机master6379的redis实例复制数据,Redis5.0之前使用slaveof
replicaof 192.168.0.60 6379

#配置从节点只读
replica‐read‐only yes
登录后复制

4、启动从节点

redis‐server redis.conf
登录后复制

5、连接从节点

redis‐cli ‐p 6380
登录后复制

6、测试在6379实例上写数据,6380实例是否能及时同步新修改数据

docker run  --name redis-6381 -v /Users/yujiale/docker/redis/conf/redis6381.conf:/etc/redis/redis.conf -v /Users/yujiale/docker/redis/conf/sentinel6381.conf:/etc/redis/sentine.conf -v /Users/yujiale/docker/redis/data6381:/data --network localNetwork --ip 172.172.0.14 -p 16381:6379 -d redis:6.2.6 redis-server /etc/redis/redis.conf --appendonly yes
登录后复制

主从配置的作用

读写分离

  • 一主多从,主从同步
  • 主负责写,从负责读
  • 提升Redis的性能和吞吐量
  • 主从的数据一致性问题

数据容灾

  • 从机是主机的备份
  • 主机宕机,从机可读不可写
  • 默认情况下主机宕机后,从机不可为主机利用
  • 哨兵可以实现主从切换,做到高可用

Redis主从工作原理

主从复制之全量复制

只有第一次从Redis连接主Redis时发生的是全量复制,如果是短点续传可能是全量复制,也可能是部分复制。

  • 流程图

详细了解Redis中的主从复制

详细了解Redis中的主从复制

1、与主Redis建立Socker长连接

slaver与master建立socket连接

slaver关联文件事件处理器

  • 该处理器接收RDB文件(全量复制)、接收Master传播来的写命令(增量复制)

详细了解Redis中的主从复制

  • 主服务器accept从服务器Socket连接后,创建相应的客户端状态。相当于从服务器是主服务器的Client端。

详细了解Redis中的主从复制

  • 发送ping命令

    • Slaver向Master发送ping命令

      • 1、检测socket的读写状态

      • 2、检测Master能否正常处理

    • Master的响应:

      • 1、发送“pong” ,说明正常

      • 2、返回错误,说明Master不正常

      • 3、timeout,说明网络超时

详细了解Redis中的主从复制

  • 权限验证

主从正常连接后,进行权限验证

主未设置密码(requirepass=“”),从也不用设置密码(masterauth=“”)

主设置密码(requirepass!=""),从需要设置密码(masterauth=主的requirepass的值)

或者从通过auth命令向主发送密码

详细了解Redis中的主从复制

2、主Redis接收到PSYNC命令

主Redis接收到PSYNC命令后执行bgsave命令会生成最新的rdb快照,

3、主Redis把rdb快照发送给从Redis

主Redis发送rdb快照给从Redis时,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中存储到relp buffer缓存中

  • 同步快照阶段:Master创建并发送快照RDB给Slave,Slave载入并解析快照。Master同时将此阶段所产生的新的写命令存储到缓冲区。

4、从节点接收到rdb快照

从节点接收到rdb快照后清空老数据,并加载rdb文件

5、主Redis发送buffer缓存文件到从Redis

同步写缓冲阶段:Master向Slave同步存储在缓冲区的写操作命令。

6、从节点接收buffer缓存文件

从节点接收buffer缓存文件,并加载buffer缓存文件到内存中

7、主Redis通过Socker长连接连续把命令发送到从节点

从Redis接收到主Redis发送过来的命令,执行当前命令

总述

如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据。master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完毕以后,master会把这份rdb文件数据集发送给slave,slave会把接收到的数据进行持久化生成rdb,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave。当master与slave之间的连接由于某些原因而断开时,slave能够自动重连Master,如果master收到了多个slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave。

主从复制之部分复制

详细了解Redis中的主从复制

大体流程跟全量复制差不多,就不过多讲解

简述

当master和slave断开重连后,一般都会对整份数据进行复制。但从redis2.8版本开始,redis改用可以支持部分数据复制的命令PSYNC去master同步数据,slave与master能够在网络连接断开重连后只进行部分数据复制(断点续传)。master会在其内存中创建一个复制数据用的缓存队列,缓存最近一段时间的数据,master和它所有的slave都维护了复制的数据下标offset和master的进程id,因此,当网络连接断开后,slave会请求master继续进行未完成的复制,从所记录的数据下标开始。如果master进程id变化了,或者从节点数据下标offset太旧,已经不在master的缓存队列里了,那么将会进行一次全量数据的复制。主从复制(部分复制,断点续传)流程图:

主从复制之增量同步

  • Redis增量同步主要指Slave完成初始化后开始正常工作时,Master发生的写操作同步到Slave的过程。

  • 通常情况下,Master每执行一个写命令就会向Slave发送相同的写命令,然后Slave接收并执行。

主从复制之心跳检测

1.检测主从的连接状态

检测主从服务器的网络连接状态通过向主服务器发送INFO replication命令,可以列出从服务器列表,可以看出从最后一次向主发送命令距离现在过了多少秒。lag的值应该在0或1之间跳动,如果超过1则说明主从之间的连接有故障。

2.辅助实现min-slaves

Redis可以通过配置防止主服务器在不安全的情况下执行写命令min-slaves-to-write 3(min-replicas-to-write 3)min-slaves-max-lag 10(min-replicas-max-lag 10)上面的配置表示:从服务器的数量少于3个,或者三个从服务器的延迟(lag)值都大于或等于10秒时,主服务器将拒绝执行写命令。这里的延迟值就是上面INFOreplication命令的lag值。

3.检测命令丢失

如果因为网络故障,主服务器传播给从服务器的写命令在半路丢失,那么当从服务器向主服务器发送REPLCONF ACK命令时,主服务器将发觉从服务器当前的复制偏移量少于自己的复制偏移量,然后主服务器就会根据从服务器提交的复制偏移量,在复制积压缓冲区里面找到从服务器缺少的数据,并将这些数据重新发送给从服务器。(补发)网络不断增量同步:网断了,再次连接时

如何判断全量复制还是部分复制

详细了解Redis中的主从复制

客户端发送saveof后主节点会判断是否第一次复制,如果是则进行全量复制,如果不是通过runid offset偏移量进行判断是否一致,如果一致则进行部分复制,否则进行全量复制。

更多编程相关知识,请访问:编程视频!!

以上是详细了解Redis中的主从复制的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

redis集群模式怎么搭建 redis集群模式怎么搭建 Apr 10, 2025 pm 10:15 PM

Redis集群模式通过分片将Redis实例部署到多个服务器,提高可扩展性和可用性。搭建步骤如下:创建奇数个Redis实例,端口不同;创建3个sentinel实例,监控Redis实例并进行故障转移;配置sentinel配置文件,添加监控Redis实例信息和故障转移设置;配置Redis实例配置文件,启用集群模式并指定集群信息文件路径;创建nodes.conf文件,包含各Redis实例的信息;启动集群,执行create命令创建集群并指定副本数量;登录集群执行CLUSTER INFO命令验证集群状态;使

redis怎么读取队列 redis怎么读取队列 Apr 10, 2025 pm 10:12 PM

要从 Redis 读取队列,需要获取队列名称、使用 LPOP 命令读取元素,并处理空队列。具体步骤如下:获取队列名称:以 "queue:" 前缀命名,如 "queue:my-queue"。使用 LPOP 命令:从队列头部弹出元素并返回其值,如 LPOP queue:my-queue。处理空队列:如果队列为空,LPOP 返回 nil,可先检查队列是否存在再读取元素。

redis数据怎么清空 redis数据怎么清空 Apr 10, 2025 pm 10:06 PM

如何清空 Redis 数据:使用 FLUSHALL 命令清除所有键值。使用 FLUSHDB 命令清除当前选定数据库的键值。使用 SELECT 切换数据库,再使用 FLUSHDB 清除多个数据库。使用 DEL 命令删除特定键。使用 redis-cli 工具清空数据。

centos redis如何配置Lua脚本执行时间 centos redis如何配置Lua脚本执行时间 Apr 14, 2025 pm 02:12 PM

在CentOS系统上,您可以通过修改Redis配置文件或使用Redis命令来限制Lua脚本的执行时间,从而防止恶意脚本占用过多资源。方法一:修改Redis配置文件定位Redis配置文件:Redis配置文件通常位于/etc/redis/redis.conf。编辑配置文件:使用文本编辑器(例如vi或nano)打开配置文件:sudovi/etc/redis/redis.conf设置Lua脚本执行时间限制:在配置文件中添加或修改以下行,设置Lua脚本的最大执行时间(单位:毫秒)

redis过期策略怎么设置 redis过期策略怎么设置 Apr 10, 2025 pm 10:03 PM

Redis数据过期策略有两种:定期删除:定期扫描删除过期键,可通过 expired-time-cap-remove-count、expired-time-cap-remove-delay 参数设置。惰性删除:仅在读取或写入键时检查删除过期键,可通过 lazyfree-lazy-eviction、lazyfree-lazy-expire、lazyfree-lazy-user-del 参数设置。

redis命令行怎么用 redis命令行怎么用 Apr 10, 2025 pm 10:18 PM

使用 Redis 命令行工具 (redis-cli) 可通过以下步骤管理和操作 Redis:连接到服务器,指定地址和端口。使用命令名称和参数向服务器发送命令。使用 HELP 命令查看特定命令的帮助信息。使用 QUIT 命令退出命令行工具。

redis计数器怎么实现 redis计数器怎么实现 Apr 10, 2025 pm 10:21 PM

Redis计数器是一种使用Redis键值对存储来实现计数操作的机制,包含以下步骤:创建计数器键、增加计数、减少计数、重置计数和获取计数。Redis计数器的优势包括速度快、高并发、持久性和简单易用。它可用于用户访问计数、实时指标跟踪、游戏分数和排名以及订单处理计数等场景。

如何优化debian readdir的性能 如何优化debian readdir的性能 Apr 13, 2025 am 08:48 AM

在Debian系统中,readdir系统调用用于读取目录内容。如果其性能表现不佳,可尝试以下优化策略:精简目录文件数量:尽可能将大型目录拆分成多个小型目录,降低每次readdir调用处理的项目数量。启用目录内容缓存:构建缓存机制,定期或在目录内容变更时更新缓存,减少对readdir的频繁调用。内存缓存(如Memcached或Redis)或本地缓存(如文件或数据库)均可考虑。采用高效数据结构:如果自行实现目录遍历,选择更高效的数据结构(例如哈希表而非线性搜索)存储和访问目录信

See all articles