首页 > 数据库 >Redis的高可用性

Redis的高可用性

时间:2024-11-23 17:30:04浏览次数:9  
标签:这个 Redis 那么 高可用性 复制 服务器 节点 就是

前言

    对于Redis的知识的话我在前两篇文章当中已经说明了,那么这篇文章的话我们就会在前两篇的基础之上进行一个知识的提高,让我们的思考的高度更升一层楼,加油加油

Redis的高可用性:

  我们在前面说的知识其实都是在一台机器上实现的,可是我们就要想一个问题那么就是在我们真实的环境中,如果只有一台机器的话那么假如这个机器发生故障了那么就会导致我们整个的系统无法正常使用了,这个肯定是不行的所以我们肯定是增强系统的高可用性那么肯定是要进行集群部署

集群:

  进行主从复制其实也就是将主机器的数据同步到其他的从服务器当中,这样的话即使主机器出现故障的话那么其他的机器也会进行保障

 但是这个就是也会产生一个问题,就是要保证这些服务的的数据保持一致性这个就是一个让人十分头疼的问题,所以Redis就给我们提供了主从复制模式来保证数据一致性

主从复制:

  其实这个和Mysql的读写分离是源自同一个思想的,也就是说主机器负责客户端的写请求然后其他的机器共同分担客户端的所有的读请求,这样的话就让主服务器的压力比较小

同步的过程:

 第一次同步:主要就是由三个步骤完成的

   第一步:主服务器和从服务器之间建立连接,这个主要就是从机器发送psync命令,这个里面就是包括的就是主服务器的ID以及复制的进度offset,那么主服务器接收到之后就会发送fullresync给从服务器,这个就是告诉从服务器将进行全量复制(就是将所有的数据都会同步给从服务器)

   第二步: 主服务器将数据同步给从服务器,这个肯定是生成RDB文件(通过创建子线程),然后将这个文件发送给从服务器但是这个时候又可能由新的写操作命令执行完成那么这个时候将这个命令写入到缓冲区(replicationbuffer)进行保存

   第三步: 主服务器将写命令的数据传输给从服务器,这个时候就是会将写入到缓冲区中的写操作命令同步到从服务器中保证数据的一致性,前提: 就是说从服务器接收到主服务器的RDB文件之后将自己所有的数据进行删除然后发送确认消息给主服务器

 增量复制(这个就是已经同步过一次): 主从同步过一次之后如果再写命令同步的时候网络出现了问题,那么这个时候命令肯定时不能进行命令传播,那么客户端就会读取旧的数据如果网络恢复正常的话那么如果进行一次全量复制的话那么成本就会太大所以就有了增量复制

具体的实现的话也就是三步走战略:

第一步: 依然是从服务器向主服务器发送psync命令(这个里面就会包括复制offset偏移量)重新建立连接

第二步: 主服务器接收到从服务器的命令请求之后还会发送Continue的命令告诉从服务器进行增量复制进行数据的同步

第三步: 这个时候主服务器就会将断线区间的新的已经执行完成的命令发送给从服务器 这个就是会产生一个问题就是 主服务器怎么知道将哪些命令发送给从服务器 答案: 就是说通过偏移量获得上次复制的位置是在哪里然后就会从缓存区中获得新的写的命令,除此以外主服务器还会记录自己的偏移量(这个也是会在一个缓存区中), 这个就是重新建立连接之后如果发现二者偏移量差距太大的话那么就会进行全量复制的方式

     哨兵集群:

         先不说专业的知识这个就是说为每一个节点添加一个哨兵,这个哨兵肯定第一个想到的是监控的作用,如果能这么想的话那么就对了,这个就是其中一个作用 它的其他的作用就是选主以及通知因为如果我们的主节点出现故障的话那么肯定会启动其他的从节点这个时候这个从节点就是会升级为主节点,那么其他的从节点的配置的信息肯定是要进行修改

监控:  这个就要就是说每隔一段的时间然后就是看节点是否会进行回应,如果过一段时间不正常的话那么就会对这个主节点判定为主观下线但是这个肯定是不行的会出现误判因为其他哨兵没有进行判断所以这个肯定是其他哨兵也会发送请求然后进行判断(客观判断), 如果超过一半判断这个节点下线的话那么这个节点就是下线

选主:  如果判断的是主节点下线的话那么就会从其他的节点选择一个新的主节点,这个肯定就是由全部的哨兵进行决定的,但是肯定是其中一个的哨兵进行,所以哨兵节点之间就是会进行Raft算法进行投票选出那个领头的,然后这个领头的就会从其他的节点根据 优先级 复制进度 等选择出一个新的主节点

通知: 选择一个新的主节点之后那么肯定是通知其他的节点以及服务主节点已经发生变化要对原来的信息进行一次更新 但是这个就是会产生一个问题:如果旧的主节点重新建立连接之后应该怎么办解决方案:就是将这个旧的主节点变为新的主节点的从节点也就是进行全量复制以及配置信息更新

标签:这个,Redis,那么,高可用性,复制,服务器,节点,就是
From: https://blog.csdn.net/2201_75397629/article/details/143827565

相关文章

  • Redis最终篇分布式锁以及数据一致性
     在前三篇我们几乎说完了Redis的所有的基础知识以及Redis怎么实现高可用性,那么在这一篇文章中的话我们主要就是说明如果我们使用Redis出现什么问题以及解决方案是什么,这个如果在未来的工作中也有可能会遇到,希望对看这篇博客的人有帮助,话不多说直接开干一.Hotkey以及BigK......
  • Redis集群
    文章目录集群1.槽分配2.集群中执行命令3.重新分片4.ASK错误5.复制和故障转移5.1故障转移集群Redis集群是redis提供的分布式数据库方案,集群通过分片来进行数据共享。//连接集群中各个节点,将指定ip和port的节点添加到当前集群clustermeetipportclust......
  • 查找redis数据库的路径
    Redis数据库的路径通常由配置文件中的dir参数指定查找Redis配置文件:Redis配置文件通常命名为redis.conf。您可以在以下位置查找它:/etc/redis/redis.conf(Linux系统上的常见位置)/usr/local/etc/redis/redis.conf(源码安装时的常见位置)如果您不确定配置文件的位置,......
  • 宝塔错误信息 php未安装redis扩展
    当宝塔面板提示“php未安装redis扩展”时,说明你的PHP环境中缺少Redis扩展。你可以按照以下步骤来安装和启用Redis扩展:1.安装Redis扩展通过宝塔面板安装登录宝塔面板:打开浏览器,输入宝塔面板的地址和端口,登录宝塔面板。进入软件商店:点击左侧菜单栏的“软件商店”。......
  • 2024年最新互联网大厂精选 Java 面试真题集锦(JVM、多线程、MQ、MyBatis、MySQL、Redis
    前言春招,秋招,社招,我们Java程序员的面试之路,是挺难的,过了HR,还得被技术面,在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能够入职一个独角兽公司,安稳从事喜欢的工作至今...近期也算是抽取出大部分休息的时间,为大家准备了一份通往大厂面试的小捷径,准备......
  • redis高级篇之IO多路复用select方法简介 第174节答疑
    1、bitmap最大1024位,一个进程最多只能处理1024个客户端2、&rset不可重用,每次socket有数据就相应的位会被置位3、文件描述符数组拷贝到了内核态(只不过无系统调用切换上下文的开销。(内核层可优化为异步事件通知)),仍然有开销。select调用需要传入fd数组,需要拷贝一份到内核,高......
  • Redis & 事务 & 总结
    前言 相关系列《Redis&目录》(持续更新)《Redis&事务&源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis&事务&总结》(学习总结/最新最准/持续更新)《Redis&事务&问题》(学习解答/持续更新)  参考文献《Redis事务详解》  概述    Redis事务并......
  • Redis学习:十大数据类型、RDB持久化
    Redis学习文章目录Redis学习1.Redis-10大数据类型2.Redis持久化1.Redis-10大数据类型数据类型是value的类型,key的类型都是String数据类型是value的类型,key的类型都是String数据类型是value的类型,key的类型都是String命令不区分大小写,但key是区分大小写的命......
  • 如何使用Java设计一个AOF格式的Redis
    AOF的使用场景高数据安全性需求:适用于对数据一致性要求高的应用场景,如金融交易系统、订单处理系统等。频繁写入操作:AOF适合频繁进行写操作的场景,因为它记录每个写命令,可以有效恢复最新数据。实时数据恢复:当系统崩溃或发生故障时,AOF能快速恢复数据,适合需要高可用性......
  • 一文彻底搞定Redis与MySQL的数据同步
    Redis和MySQL一致性问题是企业级应用中常见的挑战之一,特别是在高并发、高可用的场景下。由于Redis是内存型数据库,具备极高的读写速度,而MySQL作为持久化数据库,通常用于数据的可靠存储,如何保证两者数据的一致性需要具体业务场景的设计与优化。下面我们将结合几个典型的业务......