同城主备
背景
云HBase通过master节点自动切换、数据两副本、快速自动failover等手段最大程度的保证了HBase实例服务和数据可用性,但是面对可用区级别的断电、断网及其他极端故障单个HBase集群无法满足用户的高可用要求,针对跨可用区灾备需求我们提供了跨可用区的HBase同城主备服务,提供混合场景(云实例同云实例、云实例同自建实例以及自建与自建实例)下的故障一键、透明、快速切换能力。
产品优势
- 支持云HBase、EMR HBase、自建HBase混合主备
- 零代码改造,支持1.x、2.x多个版本
- 自动数据同步管理,高效双向同步,延迟在百毫秒级
- 控制台一键切换
- 主备控制台,可显示同步延迟、客户端链接数、主备状态等重要信息
架构说明
用户主备HBase实例分别部署在不同可用区,使用BDS数据通道服务(服务介绍)完成主备实例之间实时增量数据双向同步,同时在BDS上进行主备切换操作,用户通过alihbase-connector访问HBase实例,alihbase-connector监听主备实例zk集群的切换事件完成实例切换,切换过程对上层业务透明。
使用限制
- 当前仅支持相同VPC内跨可用区部署方式
- 2019年9月18日后购买的BDS服务支持该功能
- 主备实例数据同步目前使用最终一致性模型,暂时不支持强一致模型
- 目前只支持HBase服务切换,不支持phoenix,solr切换
使用方法
购买实例
HBase实例购买,如已经购买可以忽略,如未购买可以到 购买链接 页面购买 HBase 实例,购买好的 HBase 实例如下:BDS实例购买,如已经购买可以忽略,如未购买可以到 购买链接 页面购买BDS实例,BDS实例需要同HBase在相同VPC下,并且同主备HBase实例不在相同可用区,如果没有多余可用区BDS建议购买在备实例所在可用区,购买好的 BDS实例如下:
添加白名单
主备HBase实例以及BDS实例都要添加客户端的白名单,否则客户端无法访问相应的实例,添加白名单方法详见
自建实例网络打通
当关联自建实例时,BDS需要能够访问自建实例,这里以EMR HBase实例为例(用户自己购买ECS自建实例情况时一致的),需要在部署HBase的ECS实例安全组中为BDS的节点授权;进入bds页面,选择配置管理,点击生成安全组规则,会下载xxxx_sercurityrule.json的文件到本地:在EMR控制台-》集群管理找到对应的集群 -》 点击详情:找到安全组(如果是完全自建HBase集群找到ecs实例的安全组)-》点击安全组名称:在安全组中选择导入:选择刚才下载的xxxx_sercurityrule.json文件,开始导入安全组规则:导入完成后BDS有权限可以访问自建HBase的相关端口;自建HBase实例需要在BDS中绑定实例节点的host信息。进入bds页面,选择配置管理,配置bds.conf.hosts后,点击修改:EMR的hosts信息可以登入到EMR的集群的ecs上查看/etc/hosts查看IP和域名,域名规则一般是emr-header-x.cluster-xxx/emr-worker-x.cluster-xxx
控制台新增高可用实例
进入集群列表页面,点击新购买的bds实例:选择高可用管理,添加高可用实例:如果主备实例都是云HBase实例,则可以直接选择相应的实例名(对于增强版实例需要填写用户名和密码详见);如果备实例为新实例,高可用服务可以支持一键迁移功能,可以选择同步类型实例级别(同步主实例中全部表)和表级别(指定需要同步的表,表名按,号分隔),如果备实例是已有实例同时已经开启了实时同步,可以选择无需同步跳过数据同步:如果主备实例中存在自建实例,则需要填写自建实例的链接信息,包括自建实例的链接地址(格式为zk1,zk2:port:/hbase),自建实例名(用户自定义),hdfs地址(格式为hdfs://namenode1:port,namenode2:port),HBase根目录(hbase-site.xml的hbase.rootdir配置):点击确认,添加成功后,可以看的新生成高可用实例和高可用实例访问地址:
切换管理
点击管理(用户名和密码可以在数据库链接-》重置UI访问密码里面进行设置, 访问说明)可以跳到管理页面,如果选择了数据同步,可以在管理页面上看的主备实例实时数据双向同步的点位,同时也可以看的历史数据的同步进度,历史数据同步完成且实时点位正常更新就说明数据迁移成功:可以点击切换,进行实例之间的切换操作,操作成功后,可以看的Active状态的变化:
Java API访问
准备
- 在高可用管理页面获取高可用链接地址和高可用实例ID:
- 完成JAVA SDK的安装
配置客户端参数
您可以通过以下两种方式,来配置客户端参数:方式一:配置文件
<configuration>
<!-- 高可用链接地址 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>HOST:PORT</value>
</property>
<!--
高可用实例ID
-->
<property>
<name>haclient.cluster.id</name>
<value>ha-xxxxxx</value>
</property>
<!--
如果需要连接HBase增强版,需要设置用户名密码,默认root:root,可根据实际情况调整
-->
<property>
<name>hbase.client.username</name>
<value>root</value>
</property>
<property>
<name>hbase.client.password</name>
<value>root</value>
</property>
</configuration>
配置信息可以在高可用管理页面中获取:
方式二:代码
通过代码Create Configuration,然后增加相关配置
// 新建一个Configuration
Configuration conf = HBaseConfiguration.create();
// 高可用链接地址
conf.set("hbase.zookeeper.quorum", "HOST:PORT");
// 高可用实例ID
conf.set("haclient.cluster.id", "ha-xxxxxx");
// 设置用户名密码,默认root:root,可根据实际情况调整
conf.set("hbase.client.username", "root")
conf.set("hbase.client.password", "root")
创建连接
通过配置conf创建Connection,然后访问HBase
// 创建 HBase连接,在程序生命周期内只需创建一次,该连接线程安全,可以共享给所有线程使用。
// 在程序结束后,需要将Connection对象关闭,否则会造成连接泄露。
// 也可以采用try finally方式防止泄露
Connection connection = ConnectionFactory.createConnection(conf);
新建表
使用haclient,支持使用API,在主备实例上新建表,新建表会实时在Active实例上进行创建,同时会生成异步任务在standby实例上进行创建,并且会对更新实时同步任务更新,可以在高可用实例管理页面进行查看:
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论