苏州做网站设计的公司,设计论坛最好的网站,对网站做综合搜索引擎优化分析,头像设计免费目录
前言
一.主从节点介绍
二.配置redis主从结构
二.主从复制
四.拓扑结构
五.数据同步
全量复制#xff08;Full Sync Replication#xff09;
局部复制#xff08;Partial Replication#xff09; Redis的学习专栏#xff1a;http://t.csdnimg.cn/a8cvV 前言 …目录
前言
一.主从节点介绍
二.配置redis主从结构
二.主从复制
四.拓扑结构
五.数据同步
全量复制Full Sync Replication
局部复制Partial Replication Redis的学习专栏http://t.csdnimg.cn/a8cvV 前言 在Redis当中节点node通常指的是一个 Redis 实例也可以称为 Redis 服务器。Redis 是一个内存中的数据结构存储系统每个 Redis 服务器可以独立运行管理自己的数据和客户端连接。
Redis 支持单节点部署、主从复制、哨兵模式和集群部署 单节点模式单个 Redis 服务器独立运行处理所有的读写请求。 主从复制Redis 支持主从复制即一个主节点可以拥有多个从节点。主节点负责写操作和数据同步而从节点负责读操作。 哨兵模式Redis Sentinel 是一种监控和管理 Redis 实例的工具可以用于实现高可用性。通过配置多个 Sentinel 和 Redis 主从节点Sentinel 可以自动检测故障并进行故障转移确保系统在主节点故障时能够自动切换到备用节点保证服务的持续可用性。 集群模式多个 Redis 节点组成一个 Redis 集群。Redis 集群分为主节点master和从节点slave。主节点负责处理客户端请求和写操作从节点则复制主节点的数据负责读操作和故障转移。集群模式通过槽slot分区机制来分布数据每个节点负责处理其中一部分数据的存储和操作。
但单节点往往会出现问题
单节点部署意味着整个 Redis 服务的可用性完全依赖于单个实例。如果这个实例发生故障整个服务将不可用导致系统中断或者数据不可访问。单个 Redis 实例的性能受到硬件资源的限制如CPU、内存和网络带宽。一旦达到硬件资源的极限无法进一步提升系统的性能。单节点部署可能会受到数据容量的限制。Redis 是一个内存数据库其容量受到服务器内存的限制。如果数据量超过了单台服务器的处理能力可能需要分片或者其他技术来处理大数据量。
因此分布式系统中的Redis使用的部署方式主从复制、哨兵模式、集群模式 一.主从节点介绍 在Redis节点上存在主节点和从节点。假设三个redis服务器我们分别部署一个redis-server进程此时此刻我们将一个节点作为主节点另外两个作为从节点从此从节点上的数据需要跟随主节点而改变从节点是主节点的复制品只能接收主节点的复制命令。 主节点Master 主节点是数据的原始来源负责处理客户端的写操作写入数据。主节点会将自己的写操作记录写命令发送给所有从节点使得所有从节点都能保持与主节点的数据同步。 从节点Slave 从节点是主节点的复制品它们通过复制主节点的数据来实现与主节点的数据同步。从节点只能接收来自主节点的复制命令并且不能接收客户端的写请求只读。从节点可以处理客户端的读请求因此可以用来扩展读性能。
优点单点模式如果单个redis服务器挂了整个服务将不可用导致系统中断或者数据不可访问。但是主从节点节点数目多因此除非全世界停电不然不可能数据不可访问
二.配置redis主从结构 配置redis的主从结构我们需要启动多个redis服务器。而分布式的概念即是每一个redis服务器程序在一个单独的主机上
目前我只有一个云服务器但是我可以通过更改redis的端口从而在云服务器主机运行多个redis-server进程。
启动程序时通过命令行直到端口号直接在配置文件中设定端口 前提redis没有密码有密码可以参考第三节知识点 主要步骤
1.配置文件redis.conf的修改
port 6379 # 设置主节点的端口号通常为默认的6379
bind 0.0.0.0 # 绑定所有网络接口或者指定特定IP
protected-mode no # 如果需要从其他机器连接需设置为no2.复制redis.conf配置文件修改名字 例如 A.conf和B.conf,修改复制的配置文件的启动端口号任意端口号。然后添加一条指令slaveof IP地址 端口号 注6版本之后使用 replicaof 3.在linux上创建一个文件夹将两个配置配置放入其中 3种方式配置主从结构
在配置文件当中加入slaveof{masterHost} {masterPort} ,redis启动就有效在redis-server启动命令中加入 slaveof{masterHost}{masterPosrt} 生效直接使用redis命令slaveof {masterHost} {masterPort} 4.重启redis-server但是netstat -anp | grep redis-server;然后使用kill杀死已经启动的进程 绑定查看 可以判断是否连接上从节点info replication 此时此刻我们在主节点里写入数据从节点也能获取到数据 断开主从结构在从节点里发布命令slaveof no one 二.主从复制 结构流程图 从节点复制主节点的数据有以下注意点
安全性 如果主节点设置了密码从节点可以在配置文件中或者使用 replicaof 命令时指定密码。
replicaof master_ip master_port password your_password如果你使用的是6版本前的Redis可以使用 slaveof 命令来配置从节点连接到主节点也可以在Redis命令行中手动指定密码
127.0.0.1:6379 AUTH password
127.0.0.1:6379 slaveof master_ip master_port只读性 默认情况下从节点使用slave -read-only yes 配置为只读节点由于复制只能从主节点到从节点对于从节点的修改主节点一无所知修改会造成主从数据不一致
传输延迟 原因
从节点与主节点之间的网络延迟TCP的nagle算法会导致从节点在接收到主节点更新数据的时间上有所滞后从节点本身处理了大量的读请求或者其他任务可能会延迟从主节点接收新数据的更新。复制缓冲区来临时存储从主节点接收到的数据如果复制缓冲区的大小不足或者由于某些原因如瞬时的高网络负载而导致延迟。
TCP的nagle算法可以手动关闭Redis当中的repl-disable-tcp-nodelay
当关闭时主节点产生的命令数据无论大小都会及时地发送给从节点这样主从之间延迟会变小但增加了网络带亮的消耗适用于主从之间的网络环境良好的场景如同机房部署。当开启时主节点会合并较小的 TCP 数据包从而节省带宽。默认发送时间间隔取决于 Linux 的内核一般默认为 40 毫秒。这种配置节省了带宽但增大主从之间的延迟。适用于主从网络环境复杂的场景如跨机房部署。
四.拓扑结构
第一种结构一主一仆 大量的数据写入时会给主节点造成压力可以通过关闭主节点的AOF在节点上开启AOF但是这种情况下也不安全因为主节点一旦挂了那么自动重启之后由于没有AOF文件无法恢复数据然后从节点拷贝主节点导致从节点给删除了 第二种一主多仆 主节点存储所有的写入数据从节点作为备份一旦主节点发生故障可以快速将一个从节点升级为新的主节点减少系统宕机时间和数据丢失的风险将从节点部署在不同的地理位置或者逻辑集群中可以在地理上分布数据提高数据的局部性和访问速度。
缺点
主节点需要同时向多个从节点传输数据可能会消耗大量的网络带宽。在主从复制中由于主节点和从节点之间存在网络延迟和复制延迟可能会导致从节点数据落后于主节点。虽然Redis保证最终一致性但在数据复制期间可能会出现一段时间内的数据不一致
第三种树形结构 这种情况可以解决主从传输次数多的情况就是从节点挂着从节点缺陷同步延时更长 五.数据同步 redis提供了psync命令完成该命令。且不需要手动执行建立好主从关系之后自动执行从节点复制执行psync从节点从主节点获取数据同步过程分为2种 全量复制和局部复制 指令命令PSYNC replication_ID offset ID:每个Redis主节点在启动时都会生成一个唯一的运行ID。这个ID用于标识主节点当前的状态包括复制进度和已经应用的命令数目。 offest: 表示从节点希望从主节点复制的数据的起始位置。对于部分同步从节点会告诉主节点自己最后一次成功复制的位置偏移量主节点将从这个偏移量之后的数据发送给从节点。为-1 则是全量复制 全量复制Full Sync Replication 全量复制是Redis主从复制Master-Slave Replication的基本模式主要流程包括 初次同步 当一个从节点连接到主节点时如果是第一次复制主节点会将自己的整个数据集发送给从节点。这个过程中从节点会被阻塞直到数据完全同步完成。发送psync ? -1 主节点回应根据命令解析并且返回FULLRESYNC响应 持续同步 在初次同步后从节点会继续监听主节点的命令流通过接收主节点的写命令来更新自己的数据集保持与主节点的数据一致性。 主节点执行 bgsave 进行 RDB 文件的持久化。 从节点发送 RDB 文件给从节点从节点保存 RDB 数据到本地硬盘. 主节点将从生成 RDB 到接收完成期间执行的写命令写入缓冲区中等从节点保存完 RDB 文件后主节点再致传入从节点。 从节点加载 RDB 文件得到与主节点一致的数据。 如果从节点加载 RDB 完成之后并且开启了 AOF 持久化功能它会进行 bgrewrite 操作得到最近的 AOF 文件。 提问RDB文件传输给子节点能不能直接网络传输到从节点呢 答可以但是虽然逐条命令传输可能在某些情况下更快但这种方法会消耗更多的网络带宽和系统资源。如果主节点发生故障或者网络中断从节点可以依赖其本地存储的RDB文件来进行恢复。这种方式可以提高系统的可用性和容错性。 局部复制Partial Replication
局部复制是一种在特定条件下可用的复制模式主要特点包括 选择性复制 局部复制允许从节点只复制部分的主节点数据集。这可以通过配置来指定需要复制的特定键空间而不是复制整个数据集。 应用场景 局部复制适合于需要部分数据的读取操作可以帮助减轻从节点的负载专注于特定的数据集提高性能和效率。 配置灵活性 Redis允许管理员在需要的时候配置和启用局部复制这样可以根据实际业务需求来调整和优化数据复制的效率和成本。 额外补充
实时复制 全局复制用于第一次建立连接部分复制用于因为网络抖动而暂时断开连接而实时复制是从节点和主节点之间同步好数据然后主节点时时刻刻收到新的数据并且同步给从节点
在当中节点和主节点会建立TCP长连接主节点把自己收到的数据修改请求发送给从节点从而一致性 如何保证一致性呢保证连接一直都是可用状态 心跳包机制 主节点默认每隔10s从节点发送一个ping命令从节点收到返回pong 从节点默认每隔1s给主节点发送一个特点的请求就会上报当前从节点复制数据的进度 如果未收到响应则就断了 额外补充从节点升级为主节点通过哨兵方式