全部产品
云市场

同城主备

更新时间:2019-10-21 10:39:17

背景

云HBase通过master节点自动切换、数据两副本、快速自动failover等手段最大程度的保证了HBase实例服务和数据可用性,但是面对可用区级别的断电、断网及其他极端故障单个HBase集群无法满足用户的高可用要求,针对跨可用区灾备需求我们提供了跨可用区的HBase高可用服务,提供混合场景(云实例同云实例、云实例同自建实例以及自建与自建实例)下的故障一键、透明、快速切换能力。

产品优势

  • 支持云HBase、EMR HBase、自建HBase混合主备
  • 零代码改造,支持1.x、2.x多个版本
  • 自动数据同步管理,高效双向同步,延迟在百毫秒级
  • 控制台一键切换
  • 主备控制台,可显示同步延迟、客户端链接数、主备状态等重要信息

架构说明

用户主备HBase实例分别部署在不同可用区,使用BDS数据通道服务(服务介绍)完成主备实例之间实时增量数据双向同步,同时在BDS上进行主备切换操作,用户通过alihbase-connector访问HBase实例,alihbase-connector监听主备实例zk集群的切换事件完成实例切换,切换过程对上层业务透明。1

使用限制

  • 当前仅支持相同VPC内跨可用区部署方式
  • 2019年9月18日后购买的BDS服务支持该功能
  • 主备实例数据同步目前使用最终一致性模型,暂时不支持强一致模型
  • 目前只支持HBase服务切换,不支持phoenix,solr切换

使用方法

购买实例

HBase实例购买,如已经购买可以忽略,如未购买可以到 购买链接 页面购买 HBase 实例,购买好的 HBase 实例如下:2BDS实例购买,如已经购买可以忽略,如未购买可以到 购买链接 页面购买BDS实例,BDS实例需要同HBase在相同VPC下,并且同主备HBase实例不在相同可用区,如果没有多余可用区BDS建议购买在备实例所在可用区,购买好的 BDS实例如下:3

添加白名单

主备HBase实例以及BDS实例都要添加客户端的白名单,否则客户端无法访问相应的实例,添加白名单方法详见

自建实例网络打通

当关联自建实例时,BDS需要能够访问自建实例,这里以EMR HBase实例为例(用户自己购买ECS自建实例情况时一致的),需要在部署HBase的ECS实例安全组中为BDS的节点授权;进入bds页面,选择配置管理,点击生成安全组规则,会下载xxxx_sercurityrule.json的文件到本地:rule1在EMR控制台-》集群管理找到对应的集群 -》 点击详情:rule2找到安全组(如果是完全自建HBase集群找到ecs实例的安全组)-》点击安全组名称:rule3在安全组中选择导入:rule4选择刚才下载的xxxx_sercurityrule.json文件,开始导入安全组规则:rule5导入完成后BDS有权限可以访问自建HBase的相关端口;自建HBase实例需要在BDS中绑定实例节点的host信息。进入bds页面,选择配置管理,配置bds.conf.hosts后,点击修改:hosts1EMR的hosts信息可以登入到EMR的集群的ecs上查看/etc/hosts查看IP和域名,域名规则一般是emr-header-x.cluster-xxx/emr-worker-x.cluster-xxx

控制台新增高可用实例

进入集群列表页面,点击新购买的bds实例:4选择高可用管理,添加高可用实例:5如果主备实例都是云HBase实例,则可以直接选择相应的实例名(对于增强版实例需要填写用户名和密码详见);如果备实例为新实例,高可用服务可以支持一键迁移功能,可以选择同步类型实例级别(同步主实例中全部表)和表级别(指定需要同步的表,表名按,号分隔),如果备实例是已有实例同时已经开启了实时同步,可以选择无需同步跳过数据同步:6如果主备实例中存在自建实例,则需要填写自建实例的链接信息,包括自建实例的链接地址(格式为zk1,zk2:port:/hbase),自建实例名(用户自定义),hdfs地址(格式为hdfs://namenode1:port,namenode2:port),HBase根目录(hbase-site.xml的hbase.rootdir配置):7点击确认,添加成功后,可以看的新生成高可用实例和高可用实例访问地址:8

切换管理

点击管理(用户名和密码可以在数据库链接-》重置UI访问密码里面进行设置, 访问说明)可以跳到管理页面,如果选择了数据同步,可以在管理页面上看的主备实例实时数据双向同步的点位,同时也可以看的历史数据的同步进度,历史数据同步完成且实时点位正常更新就说明数据迁移成功:9可以点击切换,进行实例之间的切换操作,操作成功后,可以看的Active状态的变化:1011

Java API访问

准备

  1. 在高可用管理页面获取高可用链接地址和高可用实例ID:8
  2. 完成JAVA SDK的安装

    配置客户端参数

    您可以通过以下两种方式,来配置客户端参数:
    方式一:配置文件
  1. <configuration>
  2. <property>
  3. <name>hbase.client.connection.impl</name>
  4. <value>com.alibaba.hbase.haclient.AliHBaseMultiClusterConnectionImpl</value>
  5. </property>
  6. <!-- 高可用链接地址 -->
  7. <property>
  8. <name>hbase.client.endpoint</name>
  9. <value>HOST:PORT</value>
  10. </property>
  11. <!--
  12. 高可用实例ID
  13. -->
  14. <property>
  15. <name>haclient.cluster.id</name>
  16. <value>ha-xxxxxx</value>
  17. </property>
  18. <!--
  19. 如果需要连接HBase增强版,需要设置用户名密码,默认root:root,可根据实际情况调整
  20. -->
  21. <property>
  22. <name>hbase.client.username</name>
  23. <value>root</value>
  24. </property>
  25. <property>
  26. <name>hbase.client.password</name>
  27. <value>root</value>
  28. </property>
  29. </configuration>

配置信息可以在高可用管理页面中获取:conf1

方式二:代码

通过代码Create Configuration,然后增加相关配置

  1. // 新建一个Configuration
  2. Configuration conf = HBaseConfiguration.create();
  3. // 将HBase底层Connection实现替换成AliHBaseMultiClusterConnectionImpl
  4. conf.set("hbase.client.connection.impl", AliHBaseMultiClusterConnectionImpl.class.getName());
  5. // 高可用链接地址
  6. conf.set("hbase.client.endpoint", "HOST:PORT");
  7. // 高可用实例ID
  8. conf.set("haclient.cluster.id", "ha-xxxxxx");
  9. // 设置用户名密码,默认root:root,可根据实际情况调整
  10. conf.set("hbase.client.username", "root")
  11. conf.set("hbase.client.password", "root")

创建连接

通过配置conf创建Connection,然后访问HBase

  1. // 创建 HBase连接,在程序生命周期内只需创建一次,该连接线程安全,可以共享给所有线程使用。
  2. // 在程序结束后,需要将Connection对象关闭,否则会造成连接泄露。
  3. // 也可以采用try finally方式防止泄露
  4. Connection connection = ConnectionFactory.createConnection(conf);

新建表

使用haclient,支持使用API,在主备实例上新建表,新建表会实时在Active实例上进行创建,同时会生成异步任务在standby实例上进行创建,并且会对更新实时同步任务更新,可以在高可用实例管理页面进行查看:create1