• [技术干货] Raft原理及应用实践
    1、引言在华为分布式数据库的工程实践过程中,我们实现了一个计算存储分离、 底层存储基于Raft协议进行复制的分布式数据库系统原型。下面是它的架构图。计算节点生成日志经过封装后通过网络下发到存储节点,在Raft层达成一致后日志被应用到状态机wal Engine,完成日志的回放和数据的存储管理。下面简单介绍一下Raft的原理、以及存储节点(Pinetree)如何应用 Raft实现复制的一些工程实践经验。2、Raft的原理2.1 Raft的基本原理      Raft 算法一切以领导者为准,实现一系列值的共识和各节点日志的一致。下面重点介绍一下Raft协议的Leader选举、log复制 和 成员变更。Raft的选举机制:协议为每个节点定义了三个状态:Leader、Candidate、Follower,将时间定义为Term,每个Term有一个ID。Term类似逻辑时钟,在每个Term都会有Leader被选举出来。Leader负责处理所有的写请求、发起日志复制、定时心跳,每个Term期间最多只能有一个Leader,可能会存在选举失败的场景,那么这个Term内是没有Leader。Follower 处于被动状态,负责处理Leader发过来的RPC请求,并且做出回应。Candidate 是用来选举一个新的Leader,当Follower超时,就会进入Candidate状态。 初始状态,所有的节点都处于Follower状态,节点超时后,递增current Term进入Candidate,该节点发送广播消息RequestVote RPC给其他Follower请求投票。当收到多数节点的投票后,该节点从Candidate进入Leader。Follower在收到投票请求后,会首先比较Term,然后再比较日志index,如果都满足则更新本地Current Term然后回应RequestVote  RPC为其投票。每个Term期间,follower只能投一次票。Raft的日志同步机制:当Leader被选举出来后,就可以接受写请求。每个写请求即代表了用户需要复制的指令或Command。Raft协议会给写请求包装上Term和Index,由此组成了Raft的Log entry. Leader把Log entry append到日志中,然后给其它的节点发AppendEntries RPC请求。当Leader确定一个Log entry被大多数节点已经写入日志当中,就apply这条Log entry到状态机中然后返回结果给客户端。Raft成员变更机制: 成员变更就意味着集群节点数的增加或减少以及替换。Raft协议定义时考虑了成员变更的场景,从而避免由于集群变化引起的系统不可用。Raft是利用上面的Log Entry和一致性协议来实现该功能。成员的变更也是由Leader发起的,Leader会在本地生成一个新的Log entry,同时将Log entry推送到其他的Follower节点。Follower节点收到Log entry后更新本地日志,并且应用该log中的配置关系。多数节点应用后,Leader就会提交这条变更log entry。还要考虑新就配置的更替所带来的问题。更详细的不再赘述。2.2 Raft的开源实现Raft的实现有coreos的etcd/raft、kudu、consul、logcabin、cockroach等。Etcd 、LogCabin 、Consul 实现的是单个Raft环,无法做到弹性伸缩。而kudu和cockroach实现了多个raft环。kudu的consensus 模块实现了副本的数据复制一致性,kudu将数据分片称之为Tablet, 是kudu table的水平分表,TabletPeer就是在Raft环里面的一个节点. 一个Tablet相当于一个Raft环,一个Tablet对应一个Raft Consensus,这些对应Raft里面的一个环,Consensus Round相当于同步的消息,一个环之间会有多个Consensus Round做同步。而cockroach则是基于etcd/raft实现的多Raft环,它维护了多个Raft实例,被称之为multiraft。 因为Etcd的Raft是目前功能较全的Raft实现之一,最早应用于生产环境,并且做到了很好的模块化。其中Raft内核部分实现了Raft大部分协议,而对外则提供了storage和transport所用的interface,对于使用者可以单独实现灵活性较高,用户还可以自主实现 snapshot、wal ,Raft非常便于移植和应用,因此存储节点Pinetree采用了开源的Etcd中的Raft实现来构建我们的原型系统,也便于后期向Multiraft演进。。3、工程实践3.1  实现Raft的存储接口和网络传输Raft存储部分指的是raft- log的存储,是对日志条目进行持久化的存储,通过benchmark测试发现,raft-log引擎性能是影响整体ops的主要瓶颈,为了更灵活的支持底层存储引擎的快速替换,增加可插拔的存储引擎框架,我们对底层存储引擎进行解耦。Pinetree封装了第三方独立存储接口来适配etcd raft的log存储接口;通讯部分即Raft Transport、snapShot传输等,采用GRPC+Protobuf来实现,心跳、日志传输AppendEntries RPC、选举RequestVote RPC等应用场景将GRPC设置为简单式,snapShot设置为流式的形式。3.2  选举问题Raft可以实现自我选举。但是在实践中发现缺点也很明显,Raft自主选主可能存在如下的问题:1、不可控:可能随意选择一个满足Raft条件的节点2、网络闪断导致Leader变动3、节点忙导致的Leader变动4、破坏性的节点为了防止存储节点Leader在不同的AZ或者节点间进行切换,Pinetree采用的方案是由集群管理模块来指定 Leader。Pinetree中将electionTimeout设置为无穷大,关闭Follower可能触发的自动选举过程,一切选举过程由集群管理的建议选主模块来控制。3.3  读一致性模型在 Raft 集群中,一般会有 default、consistent、stale 三种一致性模型,如何实现读操作关乎一致性的实现。一般的做法是将一致性的选择权交给用户,让用户根据实际业务特点,按需选择,灵活使用。Consistent具有最高的读一致性,但是实现上要求所有的读请求都要走一遍Raft 内核并且将会与写操作串行,会给集群造成一定的压力。stale具有很好的性能优势,但是读操作可能会落到数据有延迟的节点上。在Pinetree的设计中,集群管理负责维护存储节点的信息,管理所有节点的Raft主副本的状态,一方面可以对读请求进行负载均衡,另一方面可以根据AZ亲和性、副本上的数据是否有最新的log 来路由读请求。这样在性能和一致性之间进行了最大的tradeoff。3.4  日志问题Raft以Leader为中心进行复制需要考虑几个问题:1、性能问题,如果leader为慢节点会导致长尾2、日志的同步必须是有序提交3、切换leader时有一段时间的不可用问题3我们通过集群管理来最大程度的防止Leader的切换。对于问题2,因为Pinetree的日志类似innodb的redo log ,采用LSN来编号的,所以应用到Pinetree存储层的的日志必须要保序,不能出现跳过日志段或日志空洞的情况。这就要求发给Raft的日志要做保序处理。计算层产生的wal log都对应一个LSN,LSN代表的是日志在文件中的偏移量,具有单调递增且不连续的特点。因此要求Wal log产生的顺序和apply到pinetree storage的顺序要保证一致。为了满足这一需求,我们在计算层和Raft层中间增加一个适配层,维护一个队列负责进行排序,同时为了应对计算层主备的切换,对消息增加Term以保证日志不会乱序。Raft指令还可能会被重复提交和执行,所以存储层要考虑幂等性的问题。因为Pinetree storage的日志用LSN进行编号,所以可以进行重复apply。3.5  如何解决假主问题计算节点需要获取某些元数据信息,每次都必须从Leader中读取数据防止出现备机延迟。在网络隔离的情况下,老的leader不会主动退出,会出现双主的情况,这个假主可能永远不知道自己其实已经不是真正的Raft主节点,导致真Leader和假Leader同时存在并提供读服务,这在无延迟系统是不允许的。如果每次读请求都走一遍Raft协议可以识别出假主,但是将会严重的影响系统的性能。Pinetree是通过租约(lease)的方式,让一个Pinetree主节点在提供服务之前,保守地检查自身在这一时刻是否拥有lease,再决定自身能不能提供读服务。因此,就算访问了一个Pinetree假主,假主也因为没有lease而不能提供服务。3.6  性能问题   涉及到性能Pinetree考虑和优化的地方:1  如果使用 Raft 算法 保证强一致性,那么读写操作都应该在领导者节点上进行。这样的话,读的性能相当于单机,不是很理想, 优化实现了基于leader+lease的方式来提供读服务即能保证一致性又不影响性能。2 优化raft参数 :in-flight的数目;transport queue的数量3  最大限度的异步化,例如:指令在raft达成一致完成持久化后传递给状态机存入消息队列立即返回,后续对消息进行异步并行解析。4  最大限度的进行Batch和Cache。例如:把一个事务内的写操作缓存到客户端,在事务提交时,再把所有的写打包成一个batch与事务commit请求一起发送给服务端
  • [技术干货] 什么是云数据库RDS?云数据库RDS有什么用?
    下面以华为云数据库RDS为例,来了解一下云数据库RDS是什么,云数据库RDS有什么用?云数据库RDS(ApsaraDB for RDS,简称RDS)是一种稳定可靠、可弹性伸缩的在线数据库服务。基于飞天分布式系统和全SSD盘高性能存储,支持MySQL、SQL Server、PostgreSQL和PPAS(高度兼容Oracle)引擎,默认部署主备架构且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼!云数据库RDS的价格因市场走势而实时变动,要了解华为云数据库RDS的实时价格,请进入华为云数据库RDS详情页面(页面直达链接:9i0i.cn/huaweicloud)了解。为什么选择云数据库RDS:选择云数据库RDS,您可以快速搭建稳定可靠的数据库服务,相比自建数据库有如下优势:便宜易用,具有灵活计费、按需变配、即开即用等优点。高性能,包括参数优化、SQL优化建议等。高可用架构和多种容灾方案。高安全性,提供多种安全措施保障数据安全。在性价比、可用性、可靠性、易用性、性能等方面,云数据库RDS都有很大优势,价格相比ECS自建数据库,仅需约1/3,相比自购服务器搭建数据库,仅需约1/10。云数据库RDS都有哪些应用场景?云数据库RDS可以在数据上和华为云诸多云产品打通,实现多样化的能力扩展数据异地容灾场景:通过数据传输服务,用户可以将自建机房的数据库实时同步到公有云上任一地域的RDS实例里面。即使发生机房损毁的灾难,数据永远在华为云有一个备份。 读写分离场景:应用读取请求较高,或是需要应对短期内读取流量高峰,可在RDS for MySQL实例下挂载只读实例,每个只读实例拥有独立的链接地址,由应用端自行实现读取压力分配。多结构数据存储:在数据类型多样的应用中,可将高热存取数据存储于缓存产品,如云数据库Memcached版 、云数据库Redis版,将图片等非结构化资源存储于对象存储 OSS,而将链接等结构化数据存储于RDS,实现对业务数据高效存取,并相应降低成本投入。搜索引擎场景:针对应用数据量较大,且有较多复杂关键词搜索场景,可搭配使用开放搜索,对亿级别数据实现百毫秒内搜索。大数据计算:云数据库RDS搭配E-MapReduce,运行Hadoop、Spark分析RDS中数据,满足如日志分析、数据仓库、商业智能、机器学习、科学模拟等业务需求。
  • [热门活动] 828企业上云节-数据上云全场景覆盖,华为云助力企业智能化升级
    当下,数字经济来临,新技术带来便利的同时,更多的企业面临着机遇和挑战。从社会趋势来讲,生产要素已由农业经济发展到工业经济再到数字经济,数据成为新生产要素,智能成为新生产力。 从Gartner趋势分析表明,企业面临着资源分散、数据不通、应用孤立等问题,这类烟囱式应用和数据孤岛已成为企业数字化转型的阻碍;企业数据逐步多元化,数字化业务井喷增长,驱动企业需要构建一个跨越多域数据、简单、一致的数字化运营生态系统。随着技术的发展,探索数据价值一直在持续,数据平台技术架构也逐步在进化。华为云针对企业上云与治理提出了一套适用于互联网、金融、游戏、产业云等行业的解决方案,数据采集到数据处理与汇聚,再到数据计算与分析,最后到应用与消费层,通过对数据的一系列操作(采集、处理、分析和应用),构建了全场景数据服务助力企业数字化转型,最终实现从数据到价值的闭环。                                               图1 数据技术平台整体技术架构 数据采集与处理对核心关键应用如ERP、CRM、PDM等产生的数据来讲,经过数据复制服务DRS采集后,迁移至云上数据库,华为云数据库具备轻松实现存储容量扩容、快速便捷的实例规格变更,内核深度优化,业务并发量1000+时性能依然保持稳定,扩容仅需几分钟。具有超高的数据可靠性等特点,保障客户业务稳定运行。对于邮件,文档,网页,监控、车辆等非结构化数据,此类面向分析型场景,将通过实时数据接入kafka等服务进行数据采集,可存入对象存储服务OBS,通过流查询,交互式查询等方式,对数据进行挖掘和批处理和批计算。同时以全栈大数据MapReduce服务为基础,提供一站式大数据平台解决方案,一键式构筑数据接入、数据存储、数据分析和价值挖掘的统一大数据平台,并且与华为云IOT物联网、ROMA平台、数据湖工厂及数据可视化等服务对接,轻松解决数据通道上云、大数据作业开发调度和数据呈现的困难,使用户从复杂的大数据平台构建和专业大数据调优和维护中解脱出来,更加专注行业应用,完成一份数据多业务场景使用的诉求,实现自动伸缩,按需使用和计算存储分离,更低成本更高性能。数据分析与应用面向操作型场景,数据库的管理可以由数据管理服务DAS实现,DAS是用来登录和操作数据库的Web服务,提供数据库运维开发功能以及 DevOPS服务。为方便用户使用和运维华为云RDS,提供数据和表结构的同步、在线编辑,SQL输入的智能提示等丰富的数据库开发功能。同时面向大企业提供基于权限最小化控制和审批流程机制,提供数据保护、变更审核、操作审计、研发自助化等数据库DevOPS平台,帮助企业实现大规模数据库下的标准化、规范化、高效率、超安全的管理手段。面向分析型场景中,用于计算与分析的数据仓库服务GaussDB(DWS),是实时、简单、安全可信的企业级融合数据仓库,可借助GaussDB(DWS) Express将查询分析扩展至数据湖。华为云数据上云方案,可实现贯穿数据全流程一站式开发运营平台,提供全域数据集成、标准数据规范架构研发、连接并萃取数据价值、统一数据资产管理、数据智能分析与可视化、数据开放服务,可帮助企业构建完整数据**解决方案。同时跨源分析选择数据湖探索DLI服务,数据免搬迁,是完全兼容Apache Spark和Apache Flink生态, 实现批流一体的Serverless大数据计算分析服务,无需大数据背景,会SQL就会大数据分析。通过一系列流转将数据转化为资产,企业将IT系统、数据及IT服务集中到统一的云管资源池中,将会提高提升整体资源利用率和工作效率,改善流程,降低运营成本。号外:828企业上云节,来企业数据上云和治理专场,数据上云难题一站式解决,不但有亿元上云补贴,还有新购满额送华为手机P40 Pro 5G,更多豪礼等你来拿~扫码立即抢购,还可免费获取超高价值的产品白皮书噢!
  • 华为云GaussDB进阶全场景支持全业务,助力政企智能升级
    华为云GaussDB引领数据库新方向       新基建大潮下,政企智能升级加速进行,数据成为政企智能升级的重要生产要素。相应地,数据服务作为新基建的核心之一,也处在升级进化的加速周期之中。       8月12日,华为云TechWave数据库专题日活动中,华为云数据库业务总裁苏光牛、华东师范大学副校长周傲英教授及多位数据库专家畅谈华为云数据库创新升级、融合开放,为政企助力的经验和案例。此次,华为云GaussDB以统一的架构,支持关系型与非关系型的数据库引擎。 华为云GaussDB 全新出发       云、AI、5G等技术驱动,数据库行业迎来新的需求。依托华为云与华为云Stack,通过全栈软硬件优化,华为云GaussDB以统一的架构,支持关系型与非关系型的数据库引擎,为客户提供了高效稳定的使用体验,并衍生出了包括关系型和非关系型数据库、数据库工具类服务等众多数据库产品。       在关系型的数据库领域,华为云GaussDB基于openGauss生态持续发展。而GaussDB(for MySQL)则100%兼容MySQL等开放生态,便于应用迁移和开发,保护客户投资。针对非关系型数据库领域,华为云推出GaussDB NoSQL多模融合技术,支持MongoDB、Cassandra、Redis、InfluxDB等主流NoSQL协议接口,具备多模数据管理能力。华为云数据库业务总裁苏光牛       华为云数据库业务总裁苏光牛表示:“客户可以通过华为云数据库在线迁移数据,任意选择业务的切换时间点,让上云、多云更加容易。华为将通过持续的技术创新和生态开放的理念,让华为云GaussDB成为企业智能升级的数据库首选。” 服务500+政企客户,助力千行百业       目前,华为云数据库产品已经服务了超过500家大型政企客户,遍布金融、政府、电信、能源、交通、物流、电商等行业。       针对政企客户大规模、高并发的应用场景,华为云GaussDB(for MySQL)产品定义围绕高可用、高可靠、高性能、高扩展和便于运维五大方向展开。华为云数据库产品总监张昆以华为消费者云业务为例:“GaussDB(for MySQL)支撑华为手机全国超过上亿客户同时访问的业务,凭借超强的技术沉淀和对业务的特别对应功能,保障世界级迁移云任务的安全与可靠。”由此可见,GaussDB(forMySQL)足以满足各种严酷的企业级场景。        非关系型数据库GaussDB NoSQL基于GaussDB的计算存储分离的架构创新,对于性能、成本、HA、扩容性、备份恢复等多种指标都有质的飞越。        在制造业上云的过程中,需要满足大规模高频词的数据录入和调取。以汽车制造商江淮为例,面对每秒百万级别的高并发真实车联网业务场景,在成本不变的基础上,GaussDB NoSQL可以实现三倍以上的性能提升,助推制造业云化转型。        而在互联网行业中,日常巨量访问成为刚需。国家测绘地理信息局建设的地理信息综合服务网站“天地图”为多种主流地图App和政企地图提供实时地图信息,使用了华为云基于新架构的GaussDB NoSQL产品成功上云后,备份性能20+倍提升,数据恢复7+倍提升,为每天查询地图、导航保驾护航。        同样,对于游戏、互联网服务、电商、运营商等数据库服务典型行业,华为云GaussDB也能够根据具体场景,给出符合实际需求的产品组合,提供安全的云上业务转型体验。 数据库管理服务定制优化        针对政府和企业在数据库产品应用中的需求,华为云数据库管理服务DAS有针对性地开发了标准版、云DBA、企业版三款产品。       华为云数据库管理服务DAS首席架构师郭寿敏介绍,标准版是面向开发人员设计的数据库管理服务产品,具有操作界面可视化、功能特性丰富的特点,能满足每一个开发者的数据库使用需求。而云DBA工具是专属的数据库运维平台,能够快速发现问题,并自动给出诊断及优化建议,帮助用户快速根除隐患。企业版数据库DevOps平台专注企业的数据信息安全保护,提升与DBA的协作效率,节约大规模数据库的管理成本,适合企业级用户使用。        总的来说,标准版具有快速、高效、简单、易上手的特点。而企业版在此基础上拥有更强大的安全性和稳定性,有很强的抗风险能力。正如郭寿敏所说,华为云数据管理服务DAS的升级和推出,开启了云上便捷数据库管理新篇章。        此外,华为在会上还介绍了GaussDB数据库的认证体系。华为认证架构师陈睿提到,发展鲲鹏计算产业,当前存在着缺少赋能和职业成长体系,开发人才稀缺的困境。GaussDB推出的面向数据库工程师的HCIA-GaussDB认证,以及面向关系型数据库的OLTP方向和OLAP方向认证,旨在帮助孵化生态开发者。        华为云GaussDB数据库的全新升级是数据库行业自身快速发展的又一个里程碑。在整个科技领域快速向前的加速周期中,华为云GaussDB再次指引了数据库行业的发展方向。在新基建大潮中,华为云乘风破浪,以全新的GaussDB数据库赋能千行百业智能升级。图/文转载自华为云公众号
  • [数据库] 【第12课】如何通过客户端连接GaussDB(for MySQL)实例
     云数据库 GaussDB(for MySQL)是华为自研的最新一代企业级高扩展海量存储分布式数据库,完全兼容MySQL。基于华为最新一代DFV存储,采用计算存储分离架构,128TB的海量存储,无需分库分表,数据0丢失,既拥有商业数据库的高可用和性能,又具备开源低成本效益。 GaussDB(for MySQL)实例的连接方式有哪些?GaussDB(for MySQL)提供使用内网、公网和数据管理服务(Data Admin Service,简称DAS)的连接方式。GaussDB(for MySQL)连接方式连接方式IP地址使用场景说明DAS连接无需使用IP地址通过华为云数据管理服务(Data Admin Service,简称DAS)这款可视化的专业数据库管理工具,可获得执行SQL、高级数据库管理、智能化运维等功能,做到易用、安全、智能地管理数据库。GaussDB(for   MySQL)默认开通DAS连接权限。l    推荐使用DAS连接内网连接内网IP地址系统默认提供内网IP地址。当应用部署在弹性云服务器上,且该弹性云服务器与GaussDB(for MySQL)实例处于同一区域,同一VPC时,建议单独使用内网IP连接弹性云服务器与GaussDB(for MySQL)数据库实例。l    推荐使用内网连接。公网连接弹性公网IP不能通过内网IP地址访问GaussDB(for MySQL)实例时,使用公网访问,建议单独绑定弹性公网IP连接弹性云服务器(或公网主机)与GaussDB(for MySQL)数据库实例。l    为了获得更快的传输速率和更高的安全性,建议您将应用迁移到与您的GaussDB(for MySQL)实例在同一子网,使用内网连接。 如何连接GaussDB(for MySQL)实例?GaussDB(for MySQL)提供了MySQL客户端工具帮助您连接数据库实例。前提条件l  在使用MySQL连接数据库之前,您需要确定应用所在的弹性云服务器与GaussDB(for MySQL)实例是否处在同一区域,同一VPC内。n  是:可以直接通过内网方式连接数据库实例。n  否:需要为实例绑定弹性公网IP,通过公网连接数据库实例。l  设置安全组规则,开通需访问数据库的IP地址和端口,详情请参考设置安全组规则。l  在Linux操作系统中,您需要在可访问GaussDB(for MySQL)数据库的设备上安装MySQL客户端。请参见如何安装MySQL客户端。l  如果选择SSL方式连接数据库,需要在云数据库RDS控制台实例“基本信息”页面,单击“数据库信息”模块“SSL”处的,下载根证书或捆绑包。远程连接数据库                                步骤 1      登录应用所在的弹性云服务器。请参见《弹性云服务器快速入门》中“购买弹性云服务器”和“登录弹性云服务器”。                                步骤 2      将根证书导入弹性云服务器Linux操作系统。请参见将根证书导入Windows/Linux操作系统。                                步骤 3      连接GaussDB(for MySQL)数据库实例。以Linux系统为例,执行如下命令。                                    mysql -h <hostName> -P <port> -u <userName> -p --ssl-ca=<caName> 参数说明<hostName>内网地址。在目标集群的“基本信息”页面,“网络信息”模块查看“写内网地址”信息。<port>数据库端口,默认3306。在目标实例的“基本信息”页面,“网络信息”模块的“数据库端口”。<userName>用户名,即GaussDB(for MySQL)数据库管理员帐号,默认为root。<caName>相应的SSL证书文件名,该文件需放在执行该命令的路径下。 使用root用户SSL连接数据库实例,示例如下:mysql -h 172.16.0.31 -P 3306 -u root -p --ssl-ca=ca.pem出现如下提示时,输入数据库帐号对应的密码:                           Enter password:                                                                                                                                                                                            ----结束更多内容,猛戳>>>
总条数:164 到第
上滑加载中