redis与etcd的对比

1.redis是一种高级的key:value存储系统,其中value支持五种数据类型:

    1.1 字符串(strings)

    1.2 字符串列表(lists)

    1.3 字符串集合(sets)

    1.4 有序字符串集合(sorted  sets)

    1.5 哈希(hashes)

2.redis的持久化:RDB(Redis Database)和AOF(Append Only File)

    RDB:在不同的时间点,将redis存储的数据生成快照,并且存储到磁盘等介质上

    AOF:将redis执行过的所有指令记录下来,下次redis重新自动的时候,会把这些指令从前到后执行一遍即可,redis重启后,优先使用AOF方式来进行数据恢复,这种方式数据恢复完整度较高

3.redis的主从:主从结构一个是为了冗余备份,另一个是为了提升读性能例如消耗性能的sort就可以由从服务器来承担

                        主从架构中,关闭主服务器的数据持久化功能,只打开从服务器的数据持久化功能,可以提高主服务器的处理性能

                        主从架构中,从服务器一般只设置为只读模式,可以避免从服务器的数据被修改

    

主从架构:

4.redis的哨兵模式:哨兵是一个独立的进程,其原理是哨兵通过发送命令,等待redis服务器响应,从而监控运行的多个redis实例

    redis sentinel集群是由若干个sentinel节点组成的分布式集群,可以实现故障发现,故障自动转移,配置中心和客户端通知。

    redis sentinel节点数量要满足2n+1(n>=1)的奇数个。

    集群监控:负责监控redis master和slave进程是否正常工作

    消息通知:如果某个redis有故障,哨兵负责发送消息作为报警通知给管理员

    故障转移:如果master node发生故障后,服务会自动转移到slave node上

    配置中心:如果故障转移发生后,通知client客户端新的master node地址

    原理:每隔1s每隔哨兵会向整个集群:mster+slave+sentinel进程,发送一次ping命令作为一次心跳检测

5.redis的集群:redis-master节点一般用于接收读写,而redis-slave节点则一般只用于备份, 其与对应的master拥有相同的slot集合,若某个redis-master意外失效,则再将其对应的slave进行升级为临时redis-master,数量最好使用3主3从

mysql和redis复制区别_Mysql主从复制和Redis主从复制的区别:

复制时机:mysql的主从复制是从数据库接入后开始复制,而redis的主从复制是从头开始,主机之前的数据,从机也会获得

复制原理:

    mysql:1.master将记录提交到二进制日志binary log2.slave将master的binary log读取后写到中继日志relay log3.slave读取中级日志的事件,将改变应用到自己的数据库中

     redis: 1.slave启动成功会给master发送一个SYNC的命令2.master接受到命令后开始在后台保存快照(即RDB持久化过程)并将保存快照期间接受到的修改命令缓存起来,当快照完成后3.并将保存快照期间接受到的修改命令缓存起来,当快照完成后

    全量复制:slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。(刚开始从机连接主机,主机一次给,是全量复制的过程)。

    增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步 (主机修改了数据会给予从机修改的数据同步,叫做增量复制)。

etcd:是coreos基于raft协议开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障性。

    核心就是raft协议,只要分为三个部分:选主,日志复制,安全性

    1.选主:

        raft协议是用于维护一组服务节点数据一致性的协议。这一组服务节点构成一个集群,并且有一个主节点来对外提供服务。当集群初始化或者主节点挂掉后,面临一个选主问题。集群中的每个节点,在任意时刻都处于Leader,Follower,Candidate这三个角色。特点如下:

  • 当集群初始化时候,每个节点都是Follower角色

  • 当集群存在至多1个有效的主节点,通过心跳与其他节点同步数据

  • 当Follower在一定时间内没有收到来自主节点的心跳,会将自己角色变为Candiadate,并发起一次选主投票;当收到包括自己在内超过半数节点赞成后,选举成功,成为主节点,当收到票数不足半数选举失败,或者选举超市,若本轮未选出主节点,将进行下一轮选举(一般出现这种情况都是由于多个节点同时选举,所有节点均未获得过半选票)

  • Candidate节点收到来自主节点的信息后,会立即终止选举过程,进入Follower角色。为了避免陷入选举失败循环,每个节点未收到心跳发起选举的时间是一定范围内的随机值,这样能够避免2个节点同时发起选主

2.日志复制:是指主节点每次操作形成的日志条目,并持久化到本地磁盘,然后通过网络IO发送到其他节点上去。其他节点通过日志的逻辑时钟(TERM)和日志编号(INDEX)来判断是否将该日志记录持久化到本地,当主节点收到包括自己在内超过半数的节点成功返回, 那么认为该日志是可提交的(committed),并将日志输入到状态机,将结果返回给客户端。

3.安全性:

        截止此刻,选主以及日志复制并不能保证节点间数据一致。试想,当一个某个节点挂掉了,一段时间后再次重启,并当选为主节点。而在其挂掉这段时间内,集群若有超过半数节点存活,集群会正常工作,那么会有日志提交。这些提交的日志无法传递给挂掉的节点。当挂掉的节点再次当选主节点,它将缺失部分已提交的日志。在这样场景下,按Raft协议,它将自己日志复制给其他节点,会将集群已经提交的日志给覆盖掉。

        这显然是不可接受的。

        其他协议解决这个问题的办法是,新当选的主节点会询问其他节点,和自己数据对比,确定出集群已提交数据,然后将缺失的数据同步过来。这个方案有明显缺陷,增加了集群恢复服务的时间(集群在选举阶段不可服务),并且增加了协议的复杂度。

        Raft解决的办法是,在选主逻辑中,对能够成为主的节点加以限制,确保选出的节点已定包含了集群已经提交的所有日志。如果新选出的主节点已经包含了集群所有提交的日志,那就不需要从和其他节点比对数据了。简化了流程,缩短了集群恢复服务的时间。

        这里存在一个问题,加以这样限制之后,还能否选出主呢?答案是:只要仍然有超过半数节点存活,这样的主一定能够选出。因为已经提交的日志必然被集群中超过半数节点持久化,显然前一个主节点提交的最后一条日志也被集群中大部分节点持久化。当主节点挂掉后,集群中仍有大部分节点存活,那这存活的节点中一定存在一个节点包含了已经提交的日志了。

        至此,关于Raft协议的简介就全部结束了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/824357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 HAL库F103系列之ADC实验(1)

ADC工作原理: 1、输入通道: 2、转换序列: A/D转换被组织为两组:规则组(常规转换组)和注入组(注入转换组) 规则组最多可以有16个转换,注入组最多有4个转换 规则组和注入…

Hudi-IDEA编程

项目 一、HudiSparkKafka(Scala) 配置详见【1.Scala配置】 依赖详见【1.HudiSparkKafka依赖】 1-1 构建SparkSession对象 def main(args: Array[String]): Unit {//1.构建SparkSession对象val spark: SparkSession SparkUtils.createSparkSession(…

中科亿海微-CL1656功能验证开发板

I. 引言 A. 研究背景与意义 CL1656是一款精度高、功耗低、成本低的5V单片低功耗运放,由核心互联公司研发制造,CL1656 是一个 16-bit、快速、低功耗逐次逼近型 ADC,吞吐速率高达 250 kSPS,并且内置低噪声、宽 带宽采样保持放大器。…

基于双向长短期神经网络bilstm的径流量预测,基于gru神经网络的径流量预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 BILSTM神经网络 基于双向长短期神经网络bilstm的径流量预测,基于gru神经网络的径流量预测 完整代码:基于双向长短期神经网络bilstm的径流量预测,基于gru神经网络的径流量预测(代码完整,数据齐全)资源-CSDN文库 https://dow…

HarmonyOS开发实例:【分布式新闻客户端】

介绍 本篇Codelab基于栅格布局、设备管理和多端协同,实现一次开发,多端部署的分布式新闻客户端页面。主要包含以下功能: 展示新闻列表以及左右滑动切换新闻Tab。点击新闻展示新闻详情页。点击新闻详情页底部的分享按钮,发现周边…

Elasticsearch:如何将 MongoDB 数据引入 Elastic Cloud

作者:Hemendra Singh Lodhi Elastic Cloud 是由 Elastic 提供的基于云的托管服务。Elastic Cloud 允许客户在亚马逊网络服务 (AWS)、谷歌云平台 (GCP) 和微软 Azure 上部署、管理和扩展他们的 Elasticsearch 集群。 MongoDB 是一种流行的 NoSQL 文档导向数据库&am…

web安全学习笔记(10)

记一下第十四节课的内容。 一、MySQL学习 数据库基本结构:库——表——列——值 在本地打开navicat,连接数据库,新建一个liuyan库、liuyan库下新建一个member表: 在表里随意添加一些数据: 下面我们学习MySQL查询。新…

36-5 Python 编写poc基础

一、相关概念介绍 在漏洞研究和网络安全领域,常常会遇到一些特定术语和概念,例如PoC、Exploit和Payload。下面是它们的概念介绍: PoC(Proof of Concept): PoC是“Proof of Concept”的缩写,意为“概念验证”或“概念证明”。在网络安全领域,PoC通常指的是一种演示性质…

【微服务】Gateway的基本配置详解

目录 什么是gateway 基本配置详解 1. 路由配置 2. 过滤器配置 3. 路由断言 4. 过滤器工厂 什么是gateway Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个全新的微服务网关,它基于 Spring 5、Project Reactor 和 Spring Boot 2 技术栈,提供…

【Web】NewStarCTF 2022 题解(全)

目录 Week1 HTTP Head?Header! 我真的会谢 NotPHP Word-For-You Week2 Word-For-You(2 Gen) IncludeOne UnserializeOne ezAPI Week3 BabySSTI_One multiSQL IncludeTwo Maybe You Have To think More Week4 So Baby RCE BabySSTI_Two UnserializeT…

iOS知识点 --- Runtime

Objective-C (OC) 中的 Runtime 原理: Objective-C Runtime 是一套用于支持 Objective-C 动态特性的底层 C 语言 API。它为 Objective-C 提供了以下核心功能: 动态类型:在运行时确定对象的确切类型,允许在程序执行过程中进行类型…

C++修炼之路之STL_stack,queue和容器适配器

目录 前言 一:SLT中stack和queue的基本使用 1.在官网中对stack和queue的简单介绍 2.数据结构中栈和队列的基本知识和操作 3. STL中stack的接口函数及使用 4.STL中queue的接口函数及使用 二:容器适配器Container 三:使用容器适配器…

springboot Logback 不同环境,配置不同的日志输出路径

1.背景: mac 笔记本开发,日志文件写到/data/logs/下,控制台报出:Failed to create parent directories for [/data/logs/........... 再去手动在命令窗口创建文件夹data,报Read-only file system 2.修改logback-spri…

milvus querynode启动源码分析

querynode启动源码分析 结构体 // QueryNode implements QueryNode grpc server // cmd\components\query_node.go type QueryNode struct {ctx context.Contextsvr *grpcquerynode.Server }// Server is the grpc server of QueryNode. type Server struct {querynode typ…

Android笔记: mkdirs不生效失败

Manifest已经配置权限,代码中也动态获取权限,mkdirs一直返回false File.mkdirs()方法创建文件夹失败 1、动态申请读写权限 <!--SDCard写权限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--SDCard读权…

Linux安装和使用Android Debug Bridge(ADB)

目录 1、开发环境和工具 2、ADB是什么&#xff1f; 3、安装ADB 3.1、使用包管理器安装 ADB 3.2、手动安装 ADB 4、使用ADB 4.1、连接设备 4.2、执行shell命令 4.3、安装应用程序 4.4、截取屏幕截图 4.5、模拟按键和手势 4.6、上传文件到Android设备 4.7、从Android设备下载文件…

常见的并发编程问题,如死锁、竞态条件、线程不安全、内存可见性问题等,如何在Java中避免这些问题?

死锁&#xff1a;发生在两个或更多线程互相等待对方持有的资源&#xff0c;导致所有的线程都无法进行下去。避免死锁的一个常见方法是遵循资源顺序访问&#xff0c;将系统中的资源排序&#xff0c;并约定每个线程都按序请求资源。 竞态条件&#xff1a;两个或更多线程同时访问…

BGP边界网关路由实验(华为)

一&#xff0c;技术简介 BGP&#xff08;边界网关路由协议&#xff09;是一种自治系统&#xff08;AS&#xff09;间的协议&#xff0c;主要用于在不同的AS之间交换路由信息。AS是一个由一组网络设备和路由器组成的网络集合&#xff0c;这些设备可以在一个共同的管理域中协同工…

IaC:实现持续交付和 DevOps 自动化的关键

基础架构即代码&#xff08;IaC&#xff09;和 CI/CD 流水线最初似乎并不匹配。因为它们代表了两种不同的流程。IaC 主要关注基础设施的配置和开发&#xff0c;而 CI/CD 则围绕软件开发、测试和部署。 然而&#xff0c;将 IaC 集成到 CI/CD 流水线中具有多种优势。首先&#xf…

C++从入门到精通——static成员

static成员 前言一、static成员概念例题 二、 static成员的特性特性例题静态成员函数可以调用非静态成员函数吗非静态成员函数可以调用类的静态成员函数吗 前言 一、static成员 概念 声明为static的类成员称为类的静态成员&#xff0c;用static修饰的成员变量&#xff0c;称之…