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命令。