
# ALM-19040 HBase存在异常状态Region
#### 告警解释
系统每60秒周期性检测HBase是否存在异常状态的Region，异常状态包括ABNORMALLY_CLOSED（Region被异常关闭）、FAILED_OPEN（RegionServer打开Region失败）、FAILED_CLOSE（RegionServer关闭Region失败）；当检测到HBase存在异常状态Region时，上报该告警。
当HBase不存在异常状态Region时，告警清除。
本章节仅适用于MRS 3.6.0-LTS.1及之后版本。
#### 告警属性
| 告警ID  | 告警级别 | 是否可自动清除 |
|:---|:---|:---|
| 19040 | 重要   | 是       |
   
#### 告警参数
| 类别   | 参数名称      | 参数含义       |
|:---|:---|:---|
| 定位信息 | 来源        | 产生告警的集群名称。 |
| 定位信息 | 服务名       | 产生告警的服务名称。 |
| 定位信息 | 角色名       | 产生告警的角色名称。 |
| 定位信息 | 主机名       | 产生告警的主机名。  |
| 附加信息 | Threshold | 产生告警的阈值。   |
   
#### 对系统的影响
存在异常状态的Region表示Region可能未如预期正常上线，业务访问到该Region时可能会报错。
#### 可能原因
HBase Region上下线时因为异常原因未能完整完成Region上下线动作。
#### 处理步骤
**检查HBase中是否存在异常状态的Region。**
1. 登录Manager界面，选择"集群 \> 服务 \> HBase \> 图表"，在"图表分类"中选择" 服务"，查看"异常状态Region数目统计"监控图表，确认异常状态Region的数量。
2. 单击"概览"，单击"HMaster Web UI"右侧的超链接进入HBase WebUI界面。
3. 在"Tables"区域的"User Tables"页签中，对"Other"列进行排序，查看该列值是否存在不为"0"的情况。 
   - 是，执行[步骤 4]。
   
   - 否，执行[步骤 8]。
   
   
   
   
4. 单击"Other"列不为"0"所在行的"Name"列的表名进入表详情页面，在"Table Regions"区域中的"Base Stats"页签，查看是否存在多个"Region State"为"ABNORMALLY_CLOSED"的Region。
   
   - 是，执行[步骤 5]。
   
   - 否，执行[步骤 7]。
   
   
   
   
5. 在业务允许的情况下，可在**hbase shell** 中执行以下操作使表Region重新上线。
   
   1. 禁用HBase表： **disable** '*表名*'
      
   
   2. 启用HBase表： **enable** '*表名*'
      
   
   
   
   
6. 表Region上线后，等待几分钟后检查本告警是否恢复。 
   - 是，处理完毕。
   
   - 否，执行[步骤 8]。
   
   
   
   
7. 该表中仅少许表Region状态异常，需使用HBCK工具修复表。
   
   1. 在HBase WebUI页面的导航栏中选择"Procedure \& Locks"，在"Procedures"区域观察是否存在Region的Procedure长时间未更新。
      - 是，执行[7.b]。
      
      - 否，执行[步骤 8]。
       
   
   2. 使用客户端安装用户登录安装HBase客户端的节点，执行以下配置环境变量并认证用户：
      **cd** *客户端安装目录*
      **source bigdata_env**
      **kinit hbase**（集群未启用Kerberos认证（普通模式）请跳过该操作）
      
   
   3. 执行以下命令将Procedure Lock释放： **hbase hbck -j** *客户端安装目录* **/HBase/hbase/tools/hbase-hbck2-\*.jar bypass -o** *pid*
      *pid* 即为在[7.a]中的"Procedures"区域查看到的"Id"列的Procedure ID。
      
   
   4. Procedure Lock释放后，在[7.a]中的"Procedures"区域观察Region的"State"值是否一直为"RUNNABLE(Bypass)"。
      - 是，执行[7.e]。
      
      - 否，执行[7.g]。
       
   
   5. 在Manager界面，选择"集群 \> 服务 \> HBase"，在"概览"页面的右上角选择"更多 \> 执行HMaster倒换"，输入当前用户密码并单击"确定"进行HMaster主备切换。
   
   6. HMaster主备倒换成功后，等待几分钟后检查本告警是否恢复。
      - 是，处理完毕。
      
      - 否，执行[7.g]。
       
   
   7. 执行以下命令设置Region状态为CLOSED：
      **hbase hbck -j** *客户端安装目录* **/HBase/hbase/tools/hbase-hbck2-\*.jar setRegionState** *RegionName* **CLOSED**
      
   
   8. 执行以下命令重新手动上线该Region： **hbase hbck -j** *客户端安装目录* **/HBase/hbase/tools/hbase-hbck2-\*.jar assigns** *RegionName*
      
   
   9. 登录HBase WebUI页面，在导航栏选择"Procedure \& Locks"，查看是否有对应的Region上线Procedure。
      - 是，执行[7.j]。
      
      - 否，执行[步骤 8]。
       
   
   10. 在导航栏选择"Home"，查看"Tables"区域的"User Tables"页签中的"Other"列的值是否全都为"0"。
       - 是，执行[7.k]。
       
       - 否，执行[步骤 8]。
        
   
   11. 在Manager界面，选择"集群 \> 服务 \> HBase \> 图表"，在"图表分类"中选择" 服务"，查看"异常状态Region数目统计"监控图表，确认是否存在异常状态Region。
       - 是，执行[步骤 8]。
       
       - 否，处理完毕。
        
   
   
   
   
**收集故障信息**
8. 在FusionInsight Manager界面，选择"运维 \> 日志 \> 下载"。
9. 在"服务"中勾选待操作集群的"HBase"。
10. 在"主机"中勾选HMaster实例所在的主机。
11. 单击右上角的时间编辑按钮，设置日志收集的"开始时间"和"结束时间"分别为告警产生时间的前后10分钟，单击"下载"。
12. 请联系运维人员，并发送已收集的故障日志信息。
 
#### 告警清除
系统会自动清除此告警，无需手工清除。
#### 参考信息
不涉及。
