开启HBase Multicast功能
操作场景
在HBase集群运维中,当RegionServer发生故障(如宕机、网络中断)时,客户端需要感知故障并及时更新Region位置缓存,否则会导致读写请求失败或超时。传统的故障感知机制依赖客户端定期轮询HMaster获取RegionServer状态,存在感知延迟,在RegionServer故障后客户端仍可能向已故障的RegionServer发送请求,导致业务中断时间延长。如何快速感知RegionServer故障并自动更新客户端缓存?HBase Multicast功能通过广播机制实现故障快速感知,当RegionServer故障时,HMaster立即广播Dead RegionServer信息到指定地址,客户端Listener接收广播后自动剔除故障节点的Region位置缓存,在下次访问时拉取最新位置信息,实现毫秒级故障感知和自动恢复。本文介绍如何开启HBase Multicast功能。
HBase Multicast特性涉及Publisher(HMaster)以及Listener(客户端)两个角色,通过设置参数“hbase.status.published”值为“true”开启。MRS 3.5.0及之后版本,Publisher端默认开启了该特性。
Multicast特性开启时,Publisher将观测当前RegionServer存活情况,当出现Dead RegionServer时,广播发送Dead RegionServer信息到广播地址。配置了监听该广播地址的Listener将接收到Dead RegionServer的信息,并自动剔除客户端建立的Connection中该Dead RegionServer上的Region位置缓存信息,在下次访问这部分Region时拉取最新的位置信息,实现业务侧及时识别故障RegionServer,并更新Region位置信息缓存。
- Multicast(多播):一种网络通信方式,允许一个发送者将消息同时发送给多个接收者。HBase Multicast功能利用多播机制实现RegionServer故障信息的快速广播和感知。
- Publisher(发布者):HBase Multicast功能中的消息发送方,由HMaster担任。Publisher监控RegionServer的存活状态,当检测到Dead RegionServer时,向指定的多播地址广播故障信息。
- Listener(监听者):HBase Multicast功能中的消息接收方,由HBase客户端担任。Listener监听多播地址,接收Publisher广播的Dead RegionServer信息,并自动更新客户端的Region位置缓存。
- Dead RegionServer:HBase集群中发生故障的RegionServer节点,包括宕机、网络中断、进程异常退出等情况。Dead RegionServer上的Region需要被重新分配到其他健康节点。
- Region位置缓存:HBase客户端缓存的Region与RegionServer的映射关系,用于快速定位Region所在的RegionServer,避免每次读写都查询HMaster。当RegionServer故障时,缓存中的映射关系失效,需要更新。
前提条件
- 当前用户具有修改HBase客户端配置文件的权限。
- 客户端所在节点支持多播(Multicast)网络协议,且网络防火墙允许UDP多播流量。
- 如果集群已启用Kerberos认证(安全模式),当前用户需具有执行kinit命令的权限。
开启HBase Multicast功能
当前仅支持IPv4 Linux/Unix环境下HBase客户端配置开启Multicast功能,客户端与HMaster节点业务IP的网络通信需正常。请根据业务实际情况执行以下操作开启Multicast功能:
- (可选)配置HMaster的Multicast参数。
服务端HMaster默认已开启并配置该特性,当节点上生效网卡除管理IP与业务IP挂载网卡外还存在其余网卡时,还需登录Manager界面,选择“集群 > 服务 > HBase > 配置 > 全部配置 > HMaster(角色) > 自定义”,在“hbase.hmaster.config.expandor”自定义参数中添加配置“hbase.status.multicast.ni.name”,值为挂载业务IP的网卡名称。
登录集群Manager具体操作,请参考访问MRS集群Manager。
- 使用客户端安装用户登录安装了HBase客户端的节点。
- 在“HBase客户端安装目录/HBase/hbase/conf/hbase-site.xml”中新增并配置表1中的参数以开启客户端的Multicast功能。
表1 开启客户端Multicast功能参数配置 参数名称
参数描述
参数值
hbase.status.published
设置该参数值为“true”,客户端即可开启Multicast功能。
true
hbase.status.multicast.address.ip
Multicast特性使用的广播地址。IPv4场景下使用的广播地址为“226.1.1.3”。
226.1.1.3
hbase.status.multicast.bind.address.ip
客户端Listener绑定监听的广播地址,Linux/Unix场景需与广播地址一致。
226.1.1.3
hbase.status.multicast.ni.name
节点存在多网卡时,需配置该参数值为业务IP使用的网卡名称。单网卡节点时该配置为可选配置。
-
参数配置如下:
<property> <name>hbase.status.published</name> <value>true</value> </property> <property> <name>hbase.status.multicast.address.ip</name> <value>226.1.1.3</value> </property> <property> <name>hbase.status.multicast.bind.address.ip</name> <value>226.1.1.3</value> </property>
- 验证客户端是否成功开启Multicast功能。
在HBase客户端开启读写任务,并确认读写的目标Region所在RegionServer。在读写任务执行过程中重启该RegionServer,观察客户端如果打印“ClusterStatusListener: There is a new dead server”关键字日志,即表示客户端成功开启Multicast功能。
以验证hbase shell客户端执行的读写任务是否成功开启Multicast功能为例:
- 执行以下命令切换到客户端安装目录,配置环境变量并认证用户:
cd HBase客户端安装目录
配置环境变量:
source bigdata_env
认证用户,集群未启用Kerberos认证(普通模式)请跳过该操作:
kinit 组件业务用户
- 执行以下命令登录HBase客户端,并创建表,写入数据后不要关闭HBase客户端。
hbase shell
创建HBase表,例如“test_multicast”:
create 'test_multicast','f1'
向表中插入数据,例如“value1”:
put 'test_multicast'.'row1','f1:q','value1'
向表中插入数据,例如“value2”:
put 'test_multicast'.'row2','f1:q','value2'
向表中插入数据,例如“value3”:
put 'test_multicast'.'row3','f1:q','value3'
- 登录FusionInsight Manager,选择“集群 > 服务 > HBase”,单击“HMaster Web UI”右侧的“HMaster(主机名,主)”超链接进入HBase WebUI页面。
- 在“Tables”区域,单击“test_multicast”表名链接进入表页面,在“Table Regions”找到该表Region所在的RegionServer信息。
- 在FusionInsight Manager界面,选择“集群 > 服务 > HBase >实例”,勾选4.d查看到的RegionServer实例,选择“更多 > 重启实例”或“更多 > 滚动重启实例”,重启RegionServer实例。
- 观察hbase shell出现关键日志“client.ClusterStatusListener: There is a new dead server”,即为成功开启Multicast功能。
- 执行以下命令切换到客户端安装目录,配置环境变量并认证用户:
常见问题
- 开启Multicast后客户端性能下降
开启Multicast后客户端性能下降的可能原因包括:多播网络延迟较高、客户端频繁接收广播消息导致处理开销增大、RegionServer频繁故障导致缓存频繁更新、客户端CPU资源不足等。
在Manager的HBase服务页面,查看RegionServer的运行状态和重启历史。如果RegionServer频繁重启,会导致Multicast广播频繁触发,增加客户端处理开销。
如果网络延迟高,请优化网络配置或考虑使用其他故障感知机制。
如果RegionServer频繁故障,请排查RegionServer故障原因(如内存不足、GC问题、磁盘故障等)并修复。
- Multicast与轮询机制的区别
如果业务对RegionServer故障感知时延要求高(如金融交易系统),建议使用Multicast机制。如果业务对时延要求不高,或网络环境不支持多播,可以使用传统的轮询机制。两种机制可以同时使用,互为备份。