告警解釋
HDFS的元數據信息存儲在NameNode數據目錄(由配置項“dfs.namenode.name.dir”指定)中的FsImage文件中。備NameNode會周期將已有的FsImage和JournalNode中存儲的Editlog合并生成新的FsImage,然后推送到主NameNode的數據目錄。這個周期由HDFS的配置項“dfs.namenode.checkpoint.period”指定,默認為3600秒,即1個小時。如果主NameNode數據目錄的FsImage沒有更新,則說明HDFS元數據合并功能異常,需要修復。
在主NameNode節點上,系統每5分鐘檢測其上的FsImage文件的信息。如果在三個合并周期沒有新的FsImage文件生成,則系統產生該告警。
當新的FsImage文件生成并成功推送到主NameNode,說明HDFS元數據合并功能恢復正常,告警自動恢復。
告警屬性
| 告警ID | 告警級別 | 是否自動清除 |
|---|---|---|
| 14013 | 重要 | 是 |
告警參數
| 參數名稱 | 參數含義 |
|---|---|
| 來源 | 產生告警的集群名稱。 |
| 服務名 | 產生告警的服務名稱。 |
| 角色名 | 產生告警的角色名稱。 |
| 主機名 | 產生告警的主機名。 |
| NameService名 | 產生告警的NameService名稱。 |
對系統的影響
如果主NameNode數據目錄的FsImage沒有更新,則說明HDFS元數據合并功能異常,需要修復。如不修復,HDFS在運行一段時間后,Editlog會一直增長。此時如果重啟HDFS,由于要加載非常多的Editlog,會導致啟動非常耗時。另外,該告警的產生也說明備NameNode功能異常,導致NameNode的HA機制失效。一旦主NameNode故障,則整個HDFS服務將不可用。
可能原因
- 備NameNode被停止。
- 備NameNode實例運行狀態異常。
- 備NameNode合并新的FsImage失敗。
- 備NameNode數據目錄空間不足。
- 備NameNode推送FsImage到主NameNode失敗。
- 主NameNode數據目錄空間不足。
處理步驟
1.在FusionInsight Manager首頁,選擇“運維 > 告警 > 告警”,在告警列表中單擊此告警。
2.在告警詳情區域,查看“定位信息”,獲取告警產生的主NameNode的主機名和所在的NameService名稱。
3.選擇“集群 > 待操作集群的名稱 > 服務 > HDFS > 實例”,在實例列表中找到該NameService的備NameNode實例,查看其“配置狀態”是否為“已同步”。
- 是,執行步驟6。
- 否,執行步驟4。
4.勾選該備NameNode實例,單擊“啟動實例”,等待啟動完成。
5.等待1個NameNode合并元數據的周期時間后,查看告警是否清除。
- 是,處理完畢。
- 否,執行步驟6。
查看備NameNode實例運行狀態是否正常
6.查看該備NameNode實例的“運行狀態”是否為“良好”。
- 是,執行步驟9。
- 否,執行步驟7。
7.勾選該備NameNode實例,單擊“更多 > 重啟實例”,等待啟動完成。
8.啟動完成后,等待1個NameNode合并元數據的周期時間,然后查看告警是否清除。
- 是,處理完畢。
- 否,執行步驟30。
備NameNode合并新的FsImage是否失敗
9.在FusionInsight Manager首頁,選擇“集群 > 待操作集群的名稱 > 服務 > HDFS > 配置 > 全部配置”,搜索并獲取“dfs.namenode.checkpoint.period”的值,該值即為NameNode合并元數據的周期。
10.選擇“集群 > 待操作集群的名稱 > 服務 > HDFS > 實例”,獲取產生該告警的NameService的主、備NameNode節點的業務IP地址。
11.單擊“NameNode( xx ,備)”,單擊“實例配置”,獲取配置項“dfs.namenode.name.dir”的值,該值即為備NameNode的FsImage存儲目錄。
12.以root或omm用戶登錄備NameNode節點。
13.進入到FsImage存儲目錄,查看最新的FsImage的生成時間。
cd 備NameNode存儲目錄 /current
stat -c %y $(ls -t | grep "fsimage_[0-9]*$" | head -1)
14.執行date命令獲取系統當前時間。
15.計算最新FsImage的生成時間和當前時間的時間差,判斷該時間差是否大于元數據合并周期的三倍。
- 是,執行步驟16。
- 否,執行步驟20。
16.備NameNode合并元數據的功能異常。執行以下命令查看是否為存儲空間不足造成。
進入到FsImage存儲目錄,查看最近一個的FsImage的大小(單位為MB)。
cd 備NameNode存儲目錄 /current
du -m $(ls -t | grep "fsimage_[0-9]*$" | head -1) | awk '{print $1}'
17.執行命令查看備NameNode的磁盤剩余空間(單位為MB)。
df -m ./ | awk 'END{print $4}'
18.對比FsImage的大小和目錄剩余空間大小,看剩余空間是否還能存儲一個FsImage文件。
- 是,執行步驟7。
- 否,執行步驟19。
19.清理該目錄所在磁盤的冗余文件,以便給元數據存放預留足夠的空間。空間清理完畢后等待1個NameNode合并元數據的周期時間,查看告警是否清除。
- 是,處理完畢。
- 否,執行步驟20。
查看備NameNode推送FsImage到主NameNode是否失敗
20.以root用戶登錄備NameNode節點。
21.執行su - omm命令切換到omm用戶。
22.使用如下命令查看備NameNode是否能將文件推送到主NameNode上。
tmpFile=/tmp/tmp_test_$(date +%s)
echo "test" > $tmpFile
scp $tmpFile 主NameNode的業務IP : /tmp
- 是,執行步驟24。
- 否,執行步驟23。
23.聯系系統管理員,處理在omm用戶下備NameNode無法推送數據到主NameNode的原因。故障恢復后等待1個NameNode合并元數據的周期時間,查看告警是否清除。
- 是,處理完畢。
- 否,執行步驟24。
查看主NameNode數據目錄空間是否不足
24.在FusionInsight Manager首頁,選擇“集群 > 待操作集群的名稱 > 服務 > HDFS > 實例”,單擊產生告警的NameService的主NameNode,單擊“實例配置”,獲取配置項“dfs.namenode.name.dir”的值,該值即為主NameNode的FsImage存儲目錄。
25.以root或omm用戶登錄主NameNode節點。
26.進入到FsImage存儲目錄,查看最近一個的FsImage的大小(單位為MB)。
cd 主NameNode存儲目錄 /current
du -m $(ls -t | grep "fsimage_[0-9]*$" | head -1) | awk '{print $1}'
27.執行如下命令查看主NameNode的磁盤剩余空間(單位為MB)。
df -m ./ | awk 'END{print $4}'
28.對比FsImage的大小和目錄剩余空間大小,看剩余空間是否還能存儲一個FsImage文件。
- 是,執行步驟30。
- 否,執行步驟29。
29.清理該目錄所在磁盤的冗余文件,以便給元數據存放預留足夠的空間。空間清理完畢后等待1個NameNode合并元數據的周期時間,查看告警是否清除。
- 是,處理完畢。
- 否,執行步驟30。
收集故障信息
30.在FusionInsight Manager首頁,選擇“運維 > 日志 > 下載”。
31.在“服務”中勾選待操作集群的“NameNode”。
32.單擊右上角的
設置日志收集的“開始時間”和“結束時間”分別為告警產生時間的前后30分鐘,單擊“下載”。
33.請聯系運維人員,并發送已收集的故障日志信息。
告警清除
此告警修復后,系統會自動清除此告警,無需手工清除。
參考信息
無。