随着业务的发展,目前我们定制的hbase集群己经应用到了线上超过二十个应用 , 数百台服务器上 。包括淘宝首页的商品实时推荐、广泛用于卖家的实时量子统计等应用,并且还有继续增多以及向核心应用靠近的趋势 。
4 部署、运维和监控
Facebook之前曾经透露过Facebook的hbase架构,可以说是非常不错的 。如他们将message服务的hbase集群按用户分为数 个集群,每个集群100台服务器,拥有一台namenode以及分为5个机架 , 每个机架上一台zookeeper 。可以说对于大数据量的服务这是一种优良 的架构 。对于淘宝来说,由于数据量远没有那么大,应用也没有那么核心,因此我们采用公用hdfs以及zookeeper集群的架构 。每个hdfs集群尽量 不超过100台规模(这是为了尽量限制namenode单点问题) 。在其上架设数个hbase集群,每个集群一个master以及一个 backupmaster 。公用hdfs的好处是可以尽量减少compact的影响 , 以及均摊掉硬盘的成本,因为总有集群对磁盘空间要求高 , 也总有集群对 磁盘空间要求低,混合在一起用从成本上是比较合算的 。zookeeper集群公用,每个hbase集群在zk上分属不同的根节点 。通过zk的权限机制来保 证hbase集群的相互独立 。zk的公用原因则仅仅是为了运维方便 。
由于是在线应用,运维和监控就变得更加重要,由于之前的经验接近0,因此很难招到专门的hbase运维人员 。我们的开发团队和运维团队从一开始就很重视该问题 , 很早就开始自行培养 。以下讲一些我们的运维和监控经验 。
我们定制的hbase很重要的一部分功能就是增加监控 。hbase本身可以发送ganglia监控数据,只是监控项远远不够,并且ganglia的 展示方式并不直观和突出 。因此一方面我们在代码中侵入式地增加了很多监控点,比如compact/split/balance/flush队列以及各个阶 段的耗时、读写各个阶段的响应时间、读写次数、region的open/close,以及具体到表和region级别的读写次数等等 。仍然将它们通过 socket的方式发送到ganglia中,ganglia会把它们记录到rrd文件中,rrd文件的特点是历史数据的精度会越来越低,因此我们自己编写 程序从rrd中读出相应的数据并持久化到其它地方 , 然后自己用js实现了一套监控界面,将我们关心的数据以趋势图、饼图等各种方式重点汇总和显示出来,并 且可以无精度损失地查看任意历史数据 。在显示的同时会把部分非常重要的数据 , 如读写次数、响应时间等写入数据库,实现波动报警等自定义的报警 。经过以上措 施,保证了我们总是能先于用户发现集群的问题并及时修复 。我们利用redis高效的排序算法实时地将每个region的读写次数进行排序,能够在高负载的 情况下找到具体请求次数排名较高的那些region,并把它们移到空闲的regionserver上去 。在高峰期我们能对上百台机器的数十万个 region进行实时排序 。
为了隔离应用的影响,我们在代码层面实现了可以检查不同client过来的连接 , 并且切断某些client的连接,以在发生故障时,将故障隔离在某个应用内部而不扩大化 。mapreduce的应用也会控制在低峰期运行,比如在白天我们会关闭jobtracker等 。
此外,为了保障服务从结果上的可用 , 我们也会定期跑读写测试、建表测试、hbck等命令 。hbck是一个非常有用的工具,不过要注意它也是一个很重 的工操作,因此尽量减少hbck的调用次数,尽量不要并行运行hbck服务 。在0.90.4以前的hbck会有一些机率使hbase宕机 。另外为了确保 hdfs的安全性,需要定期运行fsck等以检查hdfs的状态,如block的replica数量等 。
推荐阅读
- excel框框中怎么打勾,excel如何框里打勾
- 微信关注公众号助力群,帮关注公众号的群
- 怎么设置页脚PPT,怎么设置页脚格式
- 么要用Go语言做后端 go语言适合做web开发吗
- linux下接受邮件命令,linux接收邮件
- 怎么上白金登山赛车游戏,登山赛车金币钻石不减反增
- 校园模拟下载游戏,模拟器校园模拟器350008版
- php之间如何传递数据 php值
- c语言怎么更换输入法,c语言怎么切换大小写