Monthly Archives: 二月 2014

You are browsing the site archives by month.

最近在测试自己写的 OpenStack 安装脚本,之前都把控制节点和网络节点合在一起,这次为了把脚本分开,遇到了不少之前没有的问题,好在大部分都通过 Google + Docs 解决了,但是最近发现网络节点的 l3-agent 时常产生与消息服务器(控制节点)断开连接的问题:

2014-02-24 16:53:01.778 2378 ERROR neutron.openstack.common.rpc.impl_qpid [-] Failed to consume message from queue: heartbeat timeout

2014-02-24 16:53:01.784 2378 INFO neutron.openstack.common.rpc.impl_qpid [-] Connected to AMQP server on controller:5672

2014-02-24 18:31:00.829 2377 ERROR neutron.openstack.common.rpc.impl_qpid [-] Failed to consume message from queue: connection aborted

2014-02-24 18:31:00.836 2377 INFO neutron.openstack.common.rpc.impl_qpid [-] Connected to AMQP server on controller:5672

就像上面的日志显示那样,常常忽然连不上,然后再隔零点几秒又显示连接成功,让人看着非常不爽。前几天恰好看到了淘测试的一篇日志 GBA历代得主 ,里面提到淘宝的集群曾遇到过每个服务器都开了 NTP 同步时间,估计是连外网的 NTP 服务器对时把,造成了时间存在微小差异,导致心跳超时,我就心想我们的网络节点需要连 Qpid 服务器(控制节点),总是差那么零点几秒就会重连成功,而且我们的机器也都是开着 NTP 对时,是不是一个问题呢?

于是我就是试着用控制节点作为我们内网的授时服务器,整个内网都与整个授时服务器同步时间,这样用局域网速度应该会快很多,鸟哥的书固然好,但好像还是有些问题,我的配置过程如下:

一、修改控制节点的 /etc/ntpd.conf 文件,开放内网的访问(查询):

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

至于连接哪个 NTP 服务器看喜好了,我一般使用的是 cn.pool.ntp.org。

二、开放防火墙123端口,设置完规则不要忘了保存:

iptables -A INPUT -p udp dport 123 sport 123 -j ACCEPT
iptables -A OUTPUT -p udp sport 123 dport 123 -j ACCEPT

三、重启ntp服务,用 ntpstat 和 ntpq -p 查看下我们的授时服务器与上层连接的状态,我这里 delay 一般在20~50左右(单位为毫秒),由于与 sysnet.edu.cn (屏幕没有显示全)延时最小,所以使用的是这个(在屏幕上用*注明):

> ntpstat:
synchronised to NTP server (202.112.31.197) at stratum 3
time correct to within 96 ms
polling server every 1024s> ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*dns2.synet.edu. 202.118.1.46 2 u 420 1024 377 21.951 0.367 13.759
+dns.sjtu.edu.cn 202.112.29.82 3 u 567 1024 377 49.529 11.216 14.545
+Hshh.org 127.67.113.92 2 u 661 1024 377 48.000 -26.821 9.765

ntpq 的返回结果比较复杂,这里顺便解释下,refid 表示这个授时服务连接上一层授时服务器,在服务器名前加 * 表示是当前使用的服务器,st 指得是 stratum,里面的数字表示这个授时服务器的等级,详见鸟哥的介绍。t 这一列里边的 u 表示是 unicast 单播,在 NTP 服务中是最常见的方法,when 表示从上次连接已经过去了多久,单位是秒,poll 表示连接间隔,reach 表示是否成功,正常的话这里应该是377,delay 表示延时(应该是估计的吧)单位是毫秒,offset 表示本地与服务器的时间差,同样是毫秒,jitter 表示在反复获取时间时,获得的时间的差异,这个差异可能比较随机,详见 NTP 官网的 FAQ。 Read More →

在 OpenStack 官方的 RedHat/CentOS/Fedora 平台安装指南上,关于消息中间件里举例用的是 Qpid 所以我也就跟着用 Qpid 作为消息中间件,当然文档也指出了 RabbitMQ、ZeroMQ 均可以。后来才知道原来 RedHat 的 RDO 部署时用的就是 Qpid,不过 RDO 社区也有人指出 Qpid 存在一些 bug 影响使用,应当考虑 RabbitMQ 的文章(链接)。不是很清楚 RedHat 为什么选择 Qpid 作为默认,不过据小道消息说 Qpid 有 RedHat 在 support,我去翻了下 Qpid 托管在 Github 上的 Git 仓库,8个 contributor(让我这种混迹于 OpenStack 社区的人感觉规模真是……),只查到一个是受雇于 RedHat,倒是好几个摩根的……不过也许这就可以说明 RedHat 和 Qpid 关系不错了。

不管怎么样,我花了些时间,稍研究了下 Qpid,下面是一些笔记。 Read More →