首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

hbase 跨机房热切换实战小结

2012-06-26 
hbase 跨机房热切换实战总结前一阶段,艰苦卓绝的机房搬迁终于结束了。趁着今天因病在家休息,写一个总结吧。?

hbase 跨机房热切换实战总结

前一阶段,艰苦卓绝的机房搬迁终于结束了。趁着今天因病在家休息,写一个总结吧。

?

最关键的一个业务是一个实时读写的系统。读写比是1:4。 最后和业务方谈下来,可以允许短时间的停写(4~6小时),不能停止读业务。

?

凌晨的请求量很低,负载较轻。

?

方案PK

?

1. 改造业务方,改成同时双写。 同时向新旧两个机房写数据。这个方法自然很好。但是由于机房交付的问题,交给我们搬迁的时间太紧张了。业务方没有能力在这么短的时间内改造成双写模式。

?

2. 搭建新的集群,在切换当天将数据distcp过去,然后用hbase 自带的add_table.rb的工具拉起。这个方案,需要在拷贝期间停止表的写入。我们采用了这个方案。

?

问题:

?

切换过程中,需要哪些操作?

?

?因为客户端的zookeeper配置成域名,所以,理论上只需要将域名映射关系修改即可,将域名指向新机房的IP。

?

之后呢??

?

因为客户端之前是直接和regionserver联系的。所以,即使zookeeper域名切换过去之后,只要不断开原来的connection,客户端依然连接旧的集群。

?

所以,想当然的办法自然是关闭旧的连接。

?

有两种办法:

?

1. 关闭旧的HBase集群。让client端connection中断,这样,client 重试时会通过zookeeper建立新的connection。因为zookeeper的地址变化了,新的connection就会到新的集群。

?

2. 重启客户端。

?

第一种方法貌似很诱人。但是却存在着几个问题。

?

1. 客户端缓存的更新时间较长。因为客户端存在着regionserver的缓存,所以他总是会出错重连,整个缓存完全更新的时间却会变得漫长。也会增加前段的出错量

?

2. 这个原因是致命的,以至于我们放弃了这个方案。因为https://issues.apache.org/jira/browse/HBASE-4893 ,也就是说,在hbase 0.90.6之前的客户端,都会复用哪些被close的connection。 导致根本不能切换到新的机房,而是不断的抛错?

?

?

所以,我们采用了重启客户端的办法。因为业务方有200台客户端机器。重启其中的一台不会影响读。

?

?

?

distcp 拷贝的时候,需要注意

?

1. 提前做好qos,因为该过程会占满带宽,必须保证其他业务不受影响

?

2. map可以多开几个。在做好qos的前提下,加快拷贝的速度。

?

问题

?

1. 内存中的数据怎么办?

?

主动flush到磁盘中。该过程的漫长出乎我们的意料。flush一个2T的表,用了半个小时。hbase 这块的性能真是弱爆了。

?

?

2. distcp本质是hdfs层的拷贝,对于一个实时写的系统,如何保证distcp过程中数据文件不发生变化?

?

1. 关闭自动split。 我们在2天前就关闭了split。保证拷贝过程不会出现split现象。

2. 关闭major compaction。 major compaction也改成手动触发。

?

此外,scan每个region的storefile个数和大小。保证都不到触发minor compaction的条件。

?

?

此外,在拷贝之前,可以调用下metacheck.jsp这个工具。开发提供的这个工具,可以检测哪些哪些残留在hdfs上的无用的region信息。将他放在master 机器${hbase-home}/hbase-webapps/master下面,访问就可以。

?

?

?

?

?

?

1 楼 youjianbo_han_87 2012-05-29   楼主都搞病了,辛苦啊。。。。 2 楼 wshyj18 2012-05-29      是不是因为机房的空调太冷了 3 楼 杨俊华 2012-06-05   wshyj18 写道   是不是因为机房的空调太冷了
机房就是个冰火两重天的地方
但是直接导致我生病的原因是同租房的人传染。

热点排行