`

Redis高可用简述与同步机制

 
阅读更多

1、什么是高可用?

单机redis支撑的并发量有限(一般QPS在1W-几W不等),如果并发量大可能导致redis挂掉;redis配置不合理,fork子进程同步也可能导致redis挂掉(伪挂);操作系统异常(JVM挂掉、OOM、CPU过载、磁盘满了IOYICHANG)或者网络变更、迁移等也可能导致redis挂掉(暂停对外服务)。等等这些,可能引起业务系统正常运转的,都是非高可用的表现。理想状态,后台redis挂掉不影响(或者较小范围影响)业务系统对缓存系统的访问,即高可用。高可用从体现上就是:故障转移(failover),也叫主备切换。

2、伪高可用

使用redis持久化方案(RDB、AOF)在进程挂掉后,重新启动加载缓存数据。

3、数据同步机制

一般redis读的压力大,为了更好的提供服务,支持主从(一主多从)复制(同步)。根据是否全量复制,分为:全量同步和增量同步。

全量同步

a、Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。

b、配置好主从后,无论slave是初次还是重新连接到master, slave都会发送PSYNC命令到master。 

      如果是重新连接,且满足增量同步的条件,那么redis会将内存缓存队列中的命令发给slave, 完成增量同步。否则进行全量同步。

具体步骤如下: 
  1)从服务器连接主服务器,发送SYNC命令; 
  2)主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令; 
  3)主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令; 
  4)从服务器收到快照文件后丢弃所有旧数据,载入收到的快照(快照文件先接收保存到磁盘,最后加载到内存中); 
  5)主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令; 
  6)从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;

 


增量同步

  Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。 增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。

增量同步的条件:

几个重要概念: 

- 内存缓存队列(in-memory backlog):用于记录连接断开时master收到的写操作 

- 复制偏移量(replication offset):master, slave都有一个偏移,记录当前同步记录的位置 

- master服务器id(master run ID):master唯一标识

现网络连接断开后,slave将尝试重连master。当满足下列条件时,重连后会进行增量同步(断点续传): 

1. slave记录的master服务器id和当前要连接的master服务器id相同 

2. slave的复制偏移量比master的偏移量靠前。比如slave是1000, master是1100 

3. slave的复制偏移量所指定的数据仍然保存在主服务器的内存缓存队列中

Redis主从同步策略

  主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步。

redis replication的核心机制

(1)redis采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量

(2)一个master node是可以配置多个slave node的

(3)slave node也可以连接其他的slave node

(4)slave node做复制的时候,是不会block master node的正常工作的

(5)slave node在做复制的时候,也不会block对自己的查询操作,它会用旧的数据集来提供服务; 但是复制完成的时候,需要删除旧数据集,加载新数据集,这个时候就会暂停对外服务了

(6)slave node主要用来进行横向扩容,做读写分离,扩容的slave node可以提高读的吞吐量,与高可用有关

(1)master和slave都会维护一个offset

master会在自身不断累加offset,slave也会在自身不断累加offset

slave每秒都会上报自己的offset给master,同时master也会保存每个slave的offset

这个倒不是说特定就用在全量复制的,主要是master和slave都要知道各自的数据的offset,才能知道互相之间的数据不一致的情况

(2)backlog

master node有一个backlog,默认是1MB大小

master node给slave node复制数据时,也会将数据在backlog中同步写一份

backlog主要是用来做全量复制中断候的增量复制的

(3)master run id

info server,可以看到master run id

如果根据host+ip定位master node,是不靠谱的,如果master node重启或者数据出现了变化,那么slave node应该根据不同的run id区分,run id不同就做全量复制

如果需要不更改run id重启redis,可以使用redis-cli debug reload命令

  • 大小: 38.5 KB
分享到:
评论

相关推荐

    zookeeper+redis高可用完整实例.zip

    在这个实例中,Redis的复制机制是实现高可用的关键部分。每个Redis节点都可以作为主节点或从节点,主节点负责处理写操作并广播这些变更给从节点,从节点则负责读操作和复制主节点的数据。这样,即使主节点出现故障,...

    docker-compose redis主从哨兵 redis多节点高可用 redis集群高可用

    1. **Redis主从复制**:这是基础的高可用方案,通过将数据实时同步到一个或多个从节点,即使主节点故障,从节点也能无缝接管服务。在Docker Compose文件中,我们需要定义三个服务,一个为主节点,两个为从节点,并...

    Redis 高可用架构最佳实践.ppt

    相比之下,Codis提供了一个图形化的界面,简化了扩容,但因为使用代理仍会影响性能,组件多,需要更多的机器资源,而且它的改动使得与Redis官方同步变得困难。 在选择最佳实践时,应根据具体业务场景来决定。例如,...

    redis 高可用详细文档

    为了更好地管理和使用Redis Sentinel系统,文档还提供了一些实用资源,例如源码包和配置文件,以及相关的参考文章和常见问题解答(FAQ),以便于读者更好地理解和操作Redis Sentinel高可用架构。

    Redis高可用的分布式锁

    本篇主要讨论的是如何基于SpringBoot框架,利用Redis实现高可用的分布式锁,并通过注解的方式简化代码。 首先,分布式锁的核心目的是在多节点环境下保证同一资源在同一时刻只能被一个客户端独占。Redis因其高性能、...

    redis+Keepalived实现Redis高可用性

    在IT行业中,数据库的高可用性是至关重要的,特别是对于像Redis这样的高性能内存数据存储系统。Redis+Keepalived的组合被广泛用于实现高可用性,确保服务在故障发生时能够无缝切换,避免数据丢失和业务中断。下面将...

    Keepalived+redis高可用主从-Keepalived的配置

    Keepalived+redis高可用主从,本技术文档主要是Keepalived的配置,redis主从配置可以看我的文章https://blog.csdn.net/qq_41709494/article/details/116382183

    keepalived 配置redis高可用

    1. **主备模式(Master-Slave)**:在Redis中,可以通过复制机制设置一个或多个从节点(Slaves),主节点负责写操作,从节点进行读操作并实时同步数据。当主节点故障时,可以手动或通过Keepalived自动将从节点提升为...

    03-VIP-Redis缓存高可用集群(预习)1

    【Redis缓存高可用集群】是为了解决单机Redis在面临高并发、大数据量时可能出现的性能瓶颈和单点故障问题。本文将探讨Redis的两种集群方案:哨兵模式和高可用集群模式,以及如何搭建Redis高可用集群。 1. **哨兵...

    一键安装部署redis高可用服务

    该资源是本人在学习redis过程中积累总结的经验以分享给大家:redis-sentinel高可用一键配置工具就是一键帮你从下载->安装->配置 好 redis 高可用的服务环境,省去了很多弯路,节约了更多的时间花在自己项目的主要...

    第三节Redis高可用集群之水平扩展1

    Redis 高可用集群是通过分布式方式提供数据存储和读写服务,确保在系统故障时能够自动切换,保持服务连续性。在 Redis 3.0 及以上版本中,引入了集群(Cluster)功能,它允许数据分片到多个节点,同时提供了故障转移...

    redis高可用笔记,包括RedisCluster集群方式和完全纯手写Redis缓存框架

    **Redis高可用性详解** Redis,全称Remote Dictionary Server,是一种高性能的键值数据库,广泛应用于缓存、消息中间件、计数等多个场景。为了确保服务的稳定性和可靠性,Redis提供了多种高可用解决方案,其中最...

    windows环境下redis高可用之主从复制与哨兵监控.

    ### Windows环境下Redis高可用之主从复制与哨兵监控 #### 一、概述 随着分布式系统和微服务架构的普及,高性能、高可用性的数据库成为众多应用的基础需求之一。Redis作为一款广泛使用的开源键值存储系统,凭借其...

    Redis高可用集群Redis Cluster搭建

    Redis Cluster 与 Redis Sentinel 都可以实现高可用性,但是 Redis Cluster 可以减少冗余,提高内存利用率。同时,Redis Cluster 也可以实现动态扩容或缩容。 Redis Cluster 是一种高可用、高性能的集群解决方案,...

    Redis高可用之哨兵+主从模式总结

    Redis 高可用性是保障 Redis 服务在面临故障时能够持续稳定运行的关键。在这个场景下,主从模式和哨兵模式结合使用,可以构建出一套高效且可靠的 Redis 高可用解决方案。 1. **主从模式**: 主从模式是 Redis 提供...

    keepalived-redis高可用配置脚本

    【标题】"keepalived-redis高可用配置脚本"涉及的是在IT系统中实现高可用性和负载均衡的策略,特别是针对Redis缓存服务。Keepalived是一个开源项目,主要功能是提供网络服务的高可用性,而Redis是一种高性能的键值...

    redis高可用实战使用

    redis高可用实战使用

    Redis高可用集群实践

    Redis高可用集群实践课件,讲述redis集群简介与部署过程。

    Redis高可用管理后台系统

    在这个"Redis高可用管理后台系统"中,Python可能被用来编写后端服务,负责与Redis实例通信,收集状态信息,执行故障检测和处理,以及提供友好的Web界面供运维人员查看和操作。Python有许多库可以支持Redis操作,如`...

    采用Keepalived实现Redis双机高可用

    然而,单一的Redis实例可能存在单点故障的风险,这时就需要通过技术手段来实现高可用。本文将详细介绍如何采用Keepalived来实现Redis的双机高可用配置。 Keepalived是一款开源软件,主要用于网络服务的负载均衡和...

Global site tag (gtag.js) - Google Analytics