推特 阿里云技术文档正文

同城双活_HBase高可用_云数据库 HBase 版

admin 阿里云技术文档 2020-02-11 208 0
阿里云服务器优惠

同城双活

背景

在大数据背景下每时每刻都会有大量的用户行为数据被收集、分析、以及应用, 典型的应用场景包括用户推荐、安全风控;这些场景的共同特点是数据量大、可用性要求高、同时对随机读请求的响应时间非常敏感;云HBase作为海量大数据存储天然适合数据量TB、PB级别的业务场景,同时提供同城主备方案(详见)满足用户的高可用需求,再此基础上为了满足用户大数据量随机读低毛刺的要求新增追求极致稳定性的同城双活能力;

使用场景

对随机读响应有高要求(P999 小于50ms)的实时在线业务场景,例如用户推荐、安全风控等

核心能力

  • 请求低毛刺
  • 自动容错
  • 资源利用率高

    原理介绍

    低毛刺

    如果一个节点的稳定性是99.9%, 那么两个独立节点的组合的稳定性是 1 - 0.1 * 0.1 = 99.99%。采用双节点服务同一份数据可以在最终一致性条件下提升一个数量级的稳定性。当用户请求发起时会首先向主库发起请求,在等待一段时间(Glitch Time)后如果主库仍没有返回结果,则并发向备库发起请求,最终取最快返回的值作为结果.同城双活_HBase高可用_云数据库 HBase 版 阿里云技术文档 第1张

    毛刺对比

    同城双活_HBase高可用_云数据库 HBase 版 阿里云技术文档 第2张

    自动容错

    同城双活中我们提供了自动容错能力,在故障场景下自动进行切换,做到故障对业务完全透明;通常需要进行主备集群切换的场景如下:1,断网断电等机房维度故障,无法正常链接主集群,请求全部抛错;2,由于软件BUG造成的全集群宕机;3,由于慢盘、坏盘造成的集群访问超时;从用户视角看就是主集群访问抛错或者主集群访问超时;自动容错会历史的执行结果进行收集,当主集群连续抛错或者连续超时超过用户指定次数时,即判定主集群存在故障需要进行”切换”,在切换状态下在主库服务恢复可以进行正常访问的情况会进行自动回切,对用户完全透明.同城双活_HBase高可用_云数据库 HBase 版 阿里云技术文档 第3张

    宕机测试

    单机宕机吞吐对比

    同城双活_HBase高可用_云数据库 HBase 版 阿里云技术文档 第4张

    单机宕机平均响应对比

    同城双活_HBase高可用_云数据库 HBase 版 阿里云技术文档 第5张

    集群宕机吞吐对比

    同城双活_HBase高可用_云数据库 HBase 版 阿里云技术文档 第6张

    集群宕机平均响应对比

    同城双活_HBase高可用_云数据库 HBase 版 阿里云技术文档 第7张

    使用方法

    准备

  1. 需要使用云HBase同城主备方案,(详见)
  2. 在高可用管理页面获取高可用链接地址和高可用实例ID:同城双活_HBase高可用_云数据库 HBase 版 阿里云技术文档 第8张
  3. 客户端依赖版本
  1. hbase1.X版本使用客户端
  2. <dependency>
  3. <groupId>com.aliyun.hbase</groupId>
  4. <artifactId>alihbase-client</artifactId>
  5. <version>1.1.12</version>
  6. </dependency>
  7. hbase2.X版本使用客户端
  8. <dependency>
  9. <groupId>com.aliyun.hbase</groupId>
  10. <artifactId>alihbase-client</artifactId>
  11. <version>2.0.7</version>
  12. </dependency>
  13. <dependency>
  14. <groupId>com.aliyun.hbase</groupId>
  15. <artifactId>alihbase-endpoint</artifactId>
  16. <version>2.0.7</version>
  17. </dependency>

配置客户端参数

您可以通过以下两种方式,来配置客户端参数:

方式一:配置文件
  1. <configuration>
  2. <!-- 高可用链接地址 -->
  3. <property>
  4. <name>hbase.zookeeper.quorum</name>
  5. <value>HOST:PORT</value>
  6. </property>
  7. <!-- 高可用实例ID-->
  8. <property>
  9. <name>haclient.cluster.id</name>
  10. <value>ha-xxxxxx</value>
  11. </property>
  12. <!--
  13. 如果需要连接HBase增强版,需要设置用户名密码,默认root:root,可根据实际情况调整
  14. -->
  15. <property>
  16. <name>hbase.client.username</name>
  17. <value>root</value>
  18. </property>
  19. <property>
  20. <name>hbase.client.password</name>
  21. <value>root</value>
  22. </property>
  23. <!--开启主备双活-->
  24. <property>
  25. <name>hbase.dualservice.enable</name>
  26. <value>true</value>
  27. </property>
  28. <!--全部表使用主备双活访问-->
  29. <property>
  30. <name>hbase.dualservice.table.enable</name>
  31. <value>true</value>
  32. </property>
  33. <!--可以表级别设置使用主备双活访问-->
  34. <property>
  35. <name>${tablename}.hbase.dualservice.enable</name>
  36. <value>true</value>
  37. </property>
  38. <!--设置glitchtimeout(当访问主库超过这个时间后,dual service并发访问备库),单位ms-->
  39. <property>
  40. <name>hbase.dualservice.glitchtimeout</name>
  41. <value>xxx</value>
  42. </property>
  43. <!--表级别设置glitchtimeout,单位ms-->
  44. <property>
  45. <name>${tablename}.hbase.dualservice.glitchtimeout</name>
  46. <value>xxx</value>
  47. </property>
  48. <!--开启自动容错-->
  49. <property>
  50. <name>hbase.autoswitch.enable</name>
  51. <value>true</value>
  52. </property>
  53. </configuration>
方式二:代码

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

  1. // 新建一个Configuration
  2. Configuration conf = HBaseConfiguration.create();
  3. // 高可用链接地址
  4. conf.set("hbase.zookeeper.quorum", "HOST:PORT");
  5. // 高可用实例ID
  6. conf.set("haclient.cluster.id", "ha-xxxxxx");
  7. // 设置用户名密码,默认root:root,可根据实际情况调整
  8. conf.set("hbase.client.username", "root");
  9. conf.set("hbase.client.password", "root");
  10. //开启Dual Service
  11. conf.setBoolean("hbase.dualservice.enable", true);
  12. //全部表使用DualService访问
  13. conf.setBoolean("hbase.dualservice.table.enable", true);
  14. //可以表级别设置使用DualService访问
  15. conf.setBoolean("${tablename}.hbase.dualservice.enable", true);
  16. //设置glitchtimeout(当访问主库超过这个时间后,dual service并发访问备库),单位ms
  17. conf.setInt("hbase.dualservice.glitchtimeout", xxx);
  18. //表级别设置glitchtimeout,单位ms
  19. conf.setInt("${tablename}.hbase.dualservice.glitchtimeout", xxx);
  20. //开启自动容错
  21. conf.setBoolean("hbase.autoswitch.enable", true);
使用限制

Dual Service仅支持以下访问方式:

  • get
  • delete
  • put
  • batchGet
  • batchDelete
  • batchPut
  • small scan(2.x客户端需要scan设置setLimit且limit < 500)
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论

-----