SGE 运行在 OpenStack 上的 HOST_NOT_RESOLVABLE 问题

4月份在介绍《安装 Sun Grid Engine》的时候曾经提过我们希望能在云计算平台上快速创建多个高配置虚拟机并自动接入到我们的 SGE (Sun Grid Engine) 集群,这样能迅速满足整个实验室计算高峰需求。

我们现在已经把 OpenStack 整合到了高性能集群生产环境,每台物理服务器上配置成一个 OpenStack Compute 计算节点(nova-compute),每个 Compute 节点上运行一个虚拟机,每个虚拟机配置成一个 SGE 运算节点(sge_execd)。为啥不直接在物理服务器上配置成 SGE 运算节点?因为运行在虚拟机上更方便、更灵活,可以随时迅速关闭、重装、更换、启动系统。这也是云计算、虚拟机的巨大优势,不用去机房捣腾硬件、不用刻盘重装系统,省时省力。

在 OpenStack 的一个实例上(Ubuntu)安装完 SGE 执行结点(hostname 是 grid62),手动启动守护进程(sge_execd)的时候报错:

$ ssh root@grid62

# /etc/init.d/gridengine-exec restart
 * Restarting Sun Grid Engine Execution Daemon sge_execd
error: communication error for "grid62.novalocal/execd/1" running on port 6445: "can't bind socket"
error: commlib error: can't bind socket (no additional information available)

到主控节点(hostname 是 grid00)上查看日志发现原因 grid62.novalocal 这个域名不能解析:

$ ssh root@grid00

# cat /var/spool/gridengine/qmaster/messages | grep grid62
...
08/26/2012 12:14:15|listen|grid00|E|commlib error: can't resolve host name (can't resolve rdata hostname "grid62.novalocal")
08/26/2012 12:14:16|listen|grid00|E|commlib error: local host name error (remote rdata host name "grid62.novalocal" is not equal to local resolved host name "(HOST_NOT_RESOLVABLE)")

进一步调查发现 grid62.novalocal 这个名字我们的 Puppet 服务器在 OpenStack 启动虚拟机实例后注射到虚拟机 /etc/hosts 里面的(我们的 SGE 节点由 Puppet 管理),Puppet 得到这个 grid62.novalocal 名字而不是 grid62.vpsee.com 这样真实的域名和 OpenStack 自己的 DNS 管理有关,这个问题从 Puppet 或 OpenStack dnsmasq 方面入手都可以解决,不过最简单的方法是从虚拟机实例入手。

解决办法是在 grid62 这个虚拟机实例的 /etc/hosts 文件里加上 grid62 一行,然后 kill 掉现有的 sge_execd 进程并重新启动 gridengine-exec (sge_execd):

# vi /etc/hosts
127.0.0.1	localhost.localdomain	localhost
192.168.2.62	grid62.vpsee.com	grid62

# killall sge_execd

# /etc/init.d/gridengine-exec start

评论 (2 Comments)

  1. 学习啦,大牛侠~

  2. 有意思,跑在虚拟机上的hpl效率测过没?

发表评论