
# 开启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功能：
1. (可选）配置HMaster的Multicast参数。 
   服务端HMaster默认已开启并配置该特性，当节点上生效网卡除管理IP与业务IP挂载网卡外还存在其余网卡时，还需登录Manager界面，选择"集群 \> 服务 \> HBase \> 配置 \> 全部配置 \> HMaster（角色） \> 自定义"，在"hbase.hmaster.config.expandor"自定义参数中添加配置"hbase.status.multicast.ni.name"，值为挂载业务IP的网卡名称。
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 使用客户端安装用户登录安装了HBase客户端的节点。
3. 在"*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>
   ```
   
   
4. 验证客户端是否成功开启Multicast功能。 
   在HBase客户端开启读写任务，并确认读写的目标Region所在RegionServer。在读写任务执行过程中重启该RegionServer，观察客户端如果打印"ClusterStatusListener: There is a new dead server"关键字日志，即表示客户端成功开启Multicast功能。
   以验证hbase shell客户端执行的读写任务是否成功开启Multicast功能为例：
   1. 执行以下命令切换到客户端安装目录，配置环境变量并认证用户： 切换至客户端安装目录：
      ```
      cd HBase客户端安装目录
      ```
      配置环境变量：
      ```
      source bigdata_env
      ```
      认证用户，集群未启用Kerberos认证（普通模式）请跳过该操作：
      ```
      kinit 组件业务用户
      ```
      
   
   
   
   2. 执行以下命令登录HBase客户端，并创建表，写入数据后不要关闭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'
      ```
      
   
   3. 登录FusionInsight Manager，选择"集群 \> 服务 \> HBase"，单击"HMaster Web UI"右侧的"HMaster(*主机名*，主)"超链接进入HBase WebUI页面。
   
   4. 在"Tables"区域，单击"test_multicast"表名链接进入表页面，在"Table Regions"找到该表Region所在的RegionServer信息。
   
   5. 在FusionInsight Manager界面，选择"集群 \> 服务 \> HBase \>实例"，勾选[4.d]查看到的RegionServer实例，选择"更多 \> 重启实例"或"更多 \> 滚动重启实例"，重启RegionServer实例。
   
   6. 观察**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机制。如果业务对时延要求不高，或网络环境不支持多播，可以使用传统的轮询机制。两种机制可以同时使用，互为备份。
  
 
#### 相关文档
- 了解HBase日志介绍，请参考[HBase日志介绍](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1056.html)。
- 了解HBase性能调优，请参考[HBase性能调优](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1013.html)。
- 了解HBase常见问题，请参考[HBase常见问题](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1638.html)。
 
