蓝盟弱电工程,用于MySQL和Redis短板的Compon:了解HBase如何保证高可用性

发布者:上海IT外包 发布时间:2019/4/2 14:40:33来源:www.linemore.com

 
  HBase是一个非关系型分布式数据库,面向基于Hadoop(NoSQL)的列。设计概念源自Google的BigTable模型。它是一种高可靠性,高性能,实时,随机访问大规模数据集的读写系统。高度可扩展的分布式存储系统广泛用于与大数据相关的领域。
  HBase系统支持存储数据的透明分段,允许系统以良好的水平可扩展性进行存储和计算。
  众所周知,从2017年开始,HBase系统将用于在线存储各种商业数据,并且将在HBase服务上构建各种应用模型和数据计算任务。
  随着这两年的发展,中央架构团队基于Kubernetes开源编程平台为HBase服务平台创建了完整的管理系统;
  经过近两年的研究和发展,已形成了服务体系比较完整的操作和自动化的HBase的维护,就可以完成HBase的,扩张和收缩软,详细的监测集群的快速部署HBase组件和故障跟踪。
  背景
  明知使用HBase的经验不是很长,在2017年年初,服务HBase的陷阱抗计算和数据仓库的基础数据的存储主要用于算法的建议,这些建议访问通过MapReduce和Spark。那时,当时已知的在线存储主要使用MySQL和Redis系统,其中包括:
  MySQL:支持大多数企业数据存储。当数据大小增加时,有一些表应该扩展。该表将带来一些复杂性。一些公司希望阻止这一点,而其他公司则出于历史原因。设计表时,存储在列中的一些数据必须以rmsdb的形式存储。我希望做一些迁移。另外,MySQL基于SSD,虽然性能非常好,但成本相对较高;
  Redis:提供大规模缓存和一些存储支持。 Redis的性能非常出色,主要限制是数据的重新排序更加繁琐,其次是更高的内存成本。
  鉴于上述一些在线存储问题,我们希望建立一套NoSQL在线存储服务,这是对以前两种存储类型的补充。我们在选择期间也考虑过Cassandra。一些首批企业试图使用Cassandra作为存储。在Cassandra系统运行并运行一段时间后,下一个团队遇到了很多问题。 Cassandra系统的可操作性不符合预期。跟踪相关系统,其他公司已经放弃使用Cassandra。
  在现有的离线存储系统中,我们在测量稳定性,性能,代码成熟度,升序和降序系统验收,使用场景后,测量HBase作为在线存储的支持组件。行业和社区的活动。一
  I. HBase关于Kubernetes
  最初,只有一组用于离线计算的集群。所有服务都在集群中运行,HBase集群和其他离线计算线程以及混合Impala实现。
  此外,HBase监控仅保留在主机级别进行监控。当存在执行问题时,难以解决问题并且系统恢复服务需要很长时间。在这种状态下,我们需要重建适当的在线服务系统。
  在这种情况下,我们对HBase在线服务的需求是明确的:
  绝缘
  从商业方面来看,预计相关服务是环境隔离的,并且权利归还给公司以避免滥用和商业互动;
  对于响应时间,服务的可用性,可以根据业务需要指定SLA;
  它还可以更适应资源分配和配置参数,如blockcache,提供监控和报警级别服务,快速定位和响应问题;
  资源利用:从运营和维护的角度来看,资源的分配必须合理,主机CPU必须尽可能地更新。内存包括磁盘的有效使用;
  成本控制:团队使用最低成本获得最大的运营和维护效益。因此,有必要提供一个方便的呼叫界面,可以灵活地应用,扩展,管理和监控HBase集群。同时,成本包括机器资源以及工程师。那时,我们系列中的系统由工程师独立维护。
  要总结上述要求,请参阅我们团队之前在基础架构平台方面的经验。最终目标是将HBase服务作为上游业务的基本组件服务平台。这也是技术平台部门的工作思路之一。所有组件都是黑盒子,互相连接并进行维护。同时,使用和监控的粒度尽可能准确,详细和完整。这是我们的在线HBase管理和操作系统的初衷。
  第二,为什么Kubernetes?如上所述,我们希望为整个HBase系统平台提供服务,该平台涉及如何管理和操作HBase系统。他知道微服务和容器的工作和经验积累相当丰富。
  当时,我们所有的在线业务已经完成迁移工作在集装箱和集装箱业务的集装箱管理平台基于Mesos湾跑顺利万级(见[1]);
  与此同时,该球队正在积极作出尝试集装箱容器,并已成功集装箱化在Kubernetes系统消息队列卡夫卡的基本分量(参见[2]),所以我们决定也使用HBase的通过Kubernetes。资源规划管理。
  Kubernetes [3]是的集群管理系统容器谷歌开源,集装箱管理技术多年的谷歌,博格的开源版本。 Kubernetes提供管理解决方案和不同尺寸的组件资源调度,隔离用的容器,高可用性工作各个组件的资源,并具有完善的网络解决方案。
  Kubernetes被设计为一个生态系统平台,用于创建有助于应用程序实现,扩展和管理的组件和工具。在Kubernetes Dafa的祝福下,我们很快获得了原始着陆版本([4])。
  第三,第一代。
  初始登陆版本的体系结构如下图所示。该平台通过Kubernetes(以下K8S)在共享物理分组API提供多组逻辑上分离的HBase组。每组由一组主人和几个地区服务员(以下简称RS)组成。群集共享一组存储的聚类HDFS,并且各簇动物园管理员是独立的,所述簇通过一个服务管理系统Kubas管理([4])。
  第一代架构
  模块的定义
  如何创建HBase的簇K8S要求,首先,使用K8S的基本部件来描述的HBase的组合物; K8S资源组件如下:
  节点:定义主机节点,可以是物理机器或虚拟机。
  荚:一组密切相关的容器,它是编程K8S的基本单元;
  ReplicationController:一组驱动程序荚的是保证数量和豆荚的条件和灵活。
  卡夫卡的K8S以往的经验相结合,为高可用性和可扩展性的考虑,我们不采用在荚实现多个容器的方法,并用ReplicationController,谁是在图中硕士以上结合一个HBase的组成部分,和Regionserver还有一个按需创建的Thrift服务器;通过上述概念,我们可以在这样K8S限定最小HBase的组:2 * MasterReplicationController;
  3 * RegionserverReplicationController;
  2 * ThriftserverReplicationController(可选);
  第四,高可用性和故障恢复。
  作为在线商业服务的系统,高可用性和故障转移是设计中应考虑的方面。在整体设计中,我们分别考虑组件级别,集群级别和数据存储级别的可用性和故障转移问题。
  1,组件级别
  HBase本身考虑了许多故障恢复和恢复方案:
  Zookeeper Group:它自己的设计保证了可用性;
  Master:通过几个主服务器在Zookeeper集群中注册以执行HA并更新主节点;
  RegionServer:没有状态。节点未断开连接后,将自动删除上一个Region,这对服务的可用性影响不大。
  Thriftserver:当时,大部分业务都是Python和Golang。当使用Thrift for HBase时,Thriftserver是一个单点。这里我们使用HAProxy来表示一组Thriftserver服务。
  HDFS:由Namenode和DataNode节点组成。 Namenode使HA功能能够保证HDFS集群的可用性。
  2,小组水平
  Pod容器故障:复制驱动程序维护Pod。 K8S Controller Manager将监视组件在其存储中的故障状态等。如果副本小于默认值,将自动检查新的Pod容器。
  Kubernetes集群故障:此方案已出现在生产环境中。对于这种情况,我们使用少量物理机器和容器来混合和实现具有高SLA要求的服务。当极端情况发生时,可以保证重要的服务。影响是可控的;
  3,数据水平
  在K8S中创建的所有HBase群集共享一组HDFS群集,并且数据可用性由HDFS群集的多个副本提供。
  五,实施细则
  1.资源分配
  初始物理节点统一使用2 * 12核CPU,128G内存和4T磁盘,其中磁盘用于配置HDFS服务,CPU和内存用于建立与之相关的服务节点K8S环境中的HBase。
  主组件的功能主要是管理HBase集群。 Thriftserver组件主要承担代理的角色,因此两个组件的资源按固定量分配。在设计Regionserver组件的资源分配时,请考虑两种方法来定义资源:
  资源分配方法
  根据业务需要:
  根据商业部分对服务的描述,评估相关QPS和SLA,并且专门为服务配置参数,包括块高速缓存,区域的大小和数量等。 ;
  优点是,对于业务优化,可以完全使用资源来降低占用业务资源的成本;
  管理成本的增加需要对每个业务进行评估,这对平台的维护人员非常不利,并要求商学院学生自己理解HBase;
  资源分配的统一规范:
  根据预先建立的配额分配CPU和MEM,并提供多文件配置以封装CPU和MEM的配置;
  方便的是,当服务扩展时,区域内的服务器数量直接增加,配置稳定,运行和维护成本低,出现问题时故障排除方便;
  对于具有独特访问方法的某些服务,例如CPU计算,大型KV存储或具有MOB要求的服务,需要特殊定制;
  当时没有多少被认为是连接的在线服务。因此,Regionserver以自定义方式配置。正式环境是一组在同一服务中统一配置的Regionservers。没有一组MixedProvider提供商。
  2,配置参数
  基本映像基于cdh5.5.0-hbase1.0.0构建:
  #hbase dockerfile的示例
  #install cdh5.5.0-hbase1.0.0
  添加hdfs-site.xml/usr/lib/hbase/conf /
  添加core-site.xml/usr/lib/hbase/conf /
  ADD env-init.py/usr/lib/hbase/bin /
  ENV JAVA_HOME/usr/lib/jvm/java-8-oracle
  ENV HBASE_HOME/usr/lib/hbase
  ENV HADOOP_PREFIX/usr/lib/hadoop
  ADD env-init.py/usr/lib/hbase/bin /
  ADD hadoop_xml_conf.sh/usr/lib/hbase/bin /
  固定环境变量,如JDK_HOME和HBASE_HOME,通过ENV注入容器图像;与HDFS相关的环境变量(例如hdfs-site.xml和core-site.xml)先前已加入Docker镜像中。编译过程放在相应的HBase目录中,以确保可以通过相应的配置访问HBase服务。 HDFS;
  与HBase相关的配置信息,例如Zookeeper集群地址,HDFS数据目录路径,堆内存和GC参数,这些都是组件启动所必需的。必须根据传入的KubasService服务信息(典型的传入参数)修改这些配置

 

上海IT外包服务网 链接:http://www.linemore.com

>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部