hbase集群滚动重启Rolling Restart

Posted 快乐崇拜234

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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. 再次重新启动主服务器,以清除失效的服务器列表并重新启用负载均衡器。

以上是关于hbase集群滚动重启Rolling Restart的主要内容,如果未能解决你的问题,请参考以下文章

SPARK k8s backend中Executor Rolling(Executor的自动化滚动驱逐)

使用Pandas的rolling函数计算滚动平均值(rolling average with Pandas rolling)seaborn使用lineplot函数可视化时间序列数据并添加滚动平均值

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动均值(rolling mean)自定义指定滚动窗口的大小(window size)

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动有效数值计数(rolling count)自定义指定滚动窗口的大小(window size)

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动最小值(rolling minimum)自定义指定滚动窗口的大小(window size)

pandas使用rolling函数计算dataframe指定数据列特定窗口下的滚动加和值(rolling sum)自定义指定滚动窗口的大小(window size)