hbase集羣滾動重啓Rolling Restart

歡迎關注本人公衆號

在這裏插入圖片描述

概述

在我們修改了regionserver的配置後,需要對某個或所有的regionserver進行重啓。
或者在集羣升級到新的版本時進行滾動升級。
以上都需要儘可能的不影響業務,集羣保持存活可用。

對於hbase regionserver重啓,不要直接kill進程,這樣會造成在zookeeper.session.timeout這個時間長的中斷,也不要通過 bin/hbase-daemon.sh stop regionserver去重啓,如果運氣不太好,-ROOT-或者.META.表在上面的話,所有的請求會全部失敗。

當然最簡單的方法是停止整個集羣,修改完後再重啓,但是顯然不適用。下面看看如何使用rolling-restartgraceful_stop來實現集羣優雅滾動重啓。

Rolling Restart

先看看rolling-restart.sh的參數:

[root@node1 bin]# ./rolling-restart.sh --help
Usage: rolling-restart.sh [--config <hbase-confdir>] [--autostart-window-size <window size in hours>]      [--autostart-window-retry-limit <retry count limit for autostart>] [--autostart] [--rs-only] [--master-only]       [--graceful] [--maxthreads xx] [--noack] [--movetimeout]]

我們僅對master進行重啓:

[root@node1 bin]# ./rolling-restart.sh --master-only
running master, logging to /data/program/hbase-2.1.5/bin/../logs/hbase-root-master-node1.out
stopping master.
node2: running master, logging to /data/program/hbase-2.1.5/bin/../logs/hbase-root-master-node2.out
node2: stopping master.
Waiting for Master ZNode /hbase/master to expire
Node does not exist: /hbase/master

running master, logging to /data/program/hbase-2.1.5/bin/../logs/hbase-root-master-node1.out
node2: running master, logging to /data/program/hbase-2.1.5/bin/../logs/hbase-root-master-node2.out
Wait a minute for master to come up join cluster
Znode /hbase/region-in-transition does not exist

主備HMaster都會重啓。期間會有短暫時間集羣不可用。

我們僅對rs進行重啓:

[root@node1 bin]# ./rolling-restart.sh --rs-only
node3: running regionserver, logging to /data/program/hbase-2.1.5/bin/../logs/hbase-root-regionserver-node3.out
node3: running regionserver, logging to /data/program/hbase-2.1.5/bin/../logs/hbase-root-regionserver-node3.out
node3: stopping regionserver..
node3: running regionserver, logging to /data/program/hbase-2.1.5/bin/../logs/hbase-root-regionserver-node3.out
node4: running regionserver, logging to /data/program/hbase-2.1.5/bin/../logs/hbase-root-regionserver-node4.out
node4: running regionserver, logging to /data/program/hbase-2.1.5/bin/../logs/hbase-root-regionserver-node4.out
node4: stopping regionserver...
node4: running regionserver, logging to /data/program/hbase-2.1.5/bin/../logs/hbase-root-regionserver-node4.out

上面這種方式我測試的結果是必須在重啓一次master纔行,而且會影響HBASE集羣使用,比較尷尬。

如果指定–graceful選項,則使用bin / graceful_stop.sh腳本重新啓動RegionServer,該腳本會將區域移出RegionServer,然後再重新啓動。 這樣比較安全,但是會延遲重新啓動。

要將滾動重啓限制爲僅使用特定數量的線程,請使用–maxthreads選項。

手動滾動重啓(推薦)

手動滾動重啓的原理就是使用graceful_stop命令逐個重啓regionserver,該命令會首先將region移動到其他regionserver上,重啓完後再將region移動回來,比較平滑。

  1. 重啓master
./bin/hbase-daemon.sh stop master
./bin/hbase-daemon.sh start master
  1. 使用graceful-stop.sh命令逐個對regionserver進行重啓。編寫shell腳本,重啓所有regionserver:
#!/usr/bin/env bash
for i in `cat ../conf/regionservers|sort`
do 
	echo $i
	./graceful_stop.sh --restart --reload $i
done 

上述腳本會將regionservers中配置的RS服務逐個重啓,並恢復。hbase擴容 縮容 一文中也有介紹graceful_stop

  1. 限速
    重新啓動多個RegionServer時,限制速度很重要。緩慢重啓regionserver,緩慢遷移region。
    否則由於速度過快,可能會對生產hbase集羣造成嚴重影響。
    我們這裏通過在RegionServer重新啓動之間等待5分鐘來解決上述問題,添加sleep 5m來實現:
#!/usr/bin/env bash
for i in `cat ../conf/regionservers|sort`
do 
	echo $i
	./graceful_stop.sh --restart --reload $i & sleep 5m
done 
  1. 再次重新啓動主服務器,以清除失效的服務器列表並重新啓用負載均衡器。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章