如果将ambari部署在OpenStack云主机的话,就会发现ambari里面的“Quick Links”点开都会跳转到域名为xxx.novalocal的地址下,如果你尝试修改系统配置来解决问题,那将一无所获,这个问题曾经困扰我很久偶然间才解决,这里分享给遇到同样问题的有缘人。
问题分析
我们先来看一下ambari的数据库信息
select public_host_name, host_name from ambari.hosts
发现public_host_name与host_name列显示不一致,例如:
public_host_name | host_name |
---|---|
nn.novalocal | nn.hadoop |
snn.novalocal | snn.hadoop |
dn0.novalocal | dn0.hadoop |
dn1.novalocal | dn1.hadoop |
dn2.novalocal | dn2.hadoop |
这里的public_host_name
显示不符合我们的预期,这个字段正是问题所在
脚本/usr/lib/ambari-agent/lib/ambari_agent/hostname.py
是ambari获取hostname的方法
try:
handle = urllib2.urlopen('http://169.254.169.254/latest/meta-data/public-hostname', '', 2)
str = handle.read()
handle.close()
cached_public_hostname = str.lower()
logger.info("Read public hostname '" + cached_public_hostname + "' from http://169.254.169.254/latest/meta-data/public-hostname")
except:
cached_public_hostname = socket.getfqdn().lower()
logger.info("Read public hostname '" + cached_public_hostname + "' using socket.getfqdn()")
return cached_public_hostname
可以看到它是访问了一个url获取到的public_host_name,我们来测试一下
[root@nn ambari_agent]# curl http://169.254.169.254/latest/meta-data/public-hostname
nn.novalocal
没错,就是这里的问题
解决问题
其实官方已经给了我们解决问题的方式,它允许我们自定义public_hostname,我们修改一下即可:
创建并编译脚本
vim /var/lib/ambari-agent/public_hostname.sh
添加如下内容
#!/bin/sh
echo `hostname -f`
修改脚本执行权限
chmod 755 "/var/lib/ambari-agent/public_hostname.sh"
每台ambari管理的主机上编辑ambari-agent.ini
在[agent]
部分添加如下内容
vim /etc/ambari-agent/conf/ambari-agent.ini
## Added following to customize the public hostname
public_hostname_script=/var/lib/ambari-agent/public_hostname.sh
所有主机上重启ambari-agent
ambari-agent restart
再次访问ambari可以看到,域名地址已经正常
参考
https://community.cloudera.com/t5/Community-Articles/Why-ambari-host-might-have-different-public-host-name-and/ta-p/246662
https://docs.cloudera.com/HDPDocuments/Ambari-2.2.1.1/bk_ambari_reference_guide/content/_how_to_customize_the_name_of_a_host.html
https://blog.csdn.net/u012967763/article/details/116355730