0519-如何解決Cloudera Manager主機頁面出現重複主機異常

  • 2019 年 11 月 27 日
  • 筆記

1

問題重現

通過Cloudera Manager主頁訪問「主機」頁面,發現其中一台主機有2條重複的記錄,一條有角色相關資訊但是心跳明顯超時很久了,另外一台有心跳但是沒有主機角色資訊,而且所有主機都是未知狀態,如下:

回到Cloudera Manager主頁也發現無論是Cloudera Management Service還是集群的Hadoop服務都是未知狀態。

重啟Cloudera Management Service顯示失敗:

  • 測試環境

1.CDH6.1

2.Redhat7.4

3.採用root進行操作

2

問題解決

1.首先我們登錄MySQL,並查看Cloudera Manager資料庫的HOSTS表進行核對。

mysql -u root -p  use cm;  SELECT HOST_ID,NAME,IP_ADDRESS,HOST_IDENTIFIER FROM HOSTS;

Fayson的集群一共4台機器,發現確實有5台主機,並且IP為172.31.6.83有兩台機器:

2.查看Cloudera Manager資料庫的ROLES_AUD即角色表確認172.31.6.83有角色的HOST_ID。

MariaDB [cm]> select * from ROLES_AUD order by HOST_ID;

對應第1步的HOSTS表的數據,發現並沒有HOST_ID為5的數據,所以我們主要需要處理HOST_ID為5同時IP也為172.31.6.83的數據。

3.從第1步的HOSTS表的數據記錄重複的172.31.6.83主機的HOST_IDENTIFIER值。

MariaDB [cm]> SELECT HOST_ID,NAME,IP_ADDRESS,HOST_IDENTIFIER FROM HOSTS where IP_ADDRESS='172.31.6.83';

HOST_ID為1的HOST_IDENTIFIER值為5b72bbe2-b332-4aff-959d-6f705205365b

HOST_ID為5的HOST_IDENTIFIER值為2ac39f58-b166-4cd7-8b72-b718398ec02a

4.查看172.31.6.83主機的Cloudera Agent的真實UUID。

[root@ip-172-31-6-83 ~]# cd /var/lib/cloudera-scm-agent  [root@ip-172-31-6-83 cloudera-scm-agent]# cat uuid  [root@ip-172-31-6-83 cloudera-scm-agent]#

確認真實的Agent uuid與第4步中的HOST_ID為5的HOST_IDENTIFIER值一致,接下來我們開始進行處理。

5.首先停止172.31.6.83主機的Agent服務。

[root@ip-172-31-6-83 ~]# systemctl stop cloudera-scm-agent  [root@ip-172-31-6-83 ~]# systemctl status cloudera-scm-agent

6.從Cloudera Manager的「主機」頁面刪除沒有角色的172.31.6.83主機,根據前面第2步其實我們也能判定刪除的是HOST_ID為5的那條資訊。

刪除成功:

7.停止Cloudera Manager Server的服務

[root@ip-172-31-6-83 ~]# systemctl stop cloudera-scm-server  [root@ip-172-31-6-83 ~]# systemctl status cloudera-scm-server

8.使用MySQL自帶的命令備份CM資料庫,mysqldump,這裡省略,不清楚的可以自己百度。

9.將172.31.6.83主機的Agent UUID的文件中的值改為第3步驟中HOST_ID為1的HOST_IDENTIFIER值,即5b72bbe2-b332-4aff-959d-6f705205365b

[root@ip-172-31-6-83 ~]# cd /var/lib/cloudera-scm-agent  [root@ip-172-31-6-83 cloudera-scm-agent]# echo -n "5b72bbe2-b332-4aff-959d-6f705205365b" > uuid  [root@ip-172-31-6-83 cloudera-scm-agent]#

10.重啟172.31.6.83主機上的Cloudera Manager Server以及Agent服務

[root@ip-172-31-6-83 ~]# systemctl start cloudera-scm-server  [root@ip-172-31-6-83 ~]# systemctl start cloudera-scm-agent

11.回到Cloudera Manager主頁重啟CMS服務

啟動成功

12.重啟集群所有服務

重啟後,整個集群恢復正常:

3

總結

1.當集群的某台主機你更新了OS,或硬體配置或者進行了CDH升級,或者你手動操作修改了Agent的UUID文件都可能導致Cloudera Manager的主機頁面有重複的主機顯示。

2.一旦有重複主機顯示,該主機其實嚴格意義上不屬於集群的一部分了,沒辦法使用Cloudera Manager來管理這台主機比如重啟這台機器上的相關服務。

3.Fayson本次測試模擬的有重複顯示的主機剛好是CMS服務所在的主機,所以直接導致整個集群的狀態不可監控,重啟CMS服務也直接失敗,如果是某台DataNode出現重複,不會出現這麼惡劣的情況。

4.本文提供的修改Agent的UUID文件是其中的一種辦法,你也可以直接修改MySQL資料庫來實現,目的就是MySQL中保存的數據需要與Agent本地的UUID文件匹配。

5.注意修改Agent的uuid文件務必使用echo -n命令。