Ubuntu Enterprise Cloud – NCs停机和时间同步

我在安装云端时遇到问题。

我已经安装了Ubuntu Server 11.04 CD中的所有内容,然后将系统升级到最新版本(apt-get update && apt-get dist-upgrade),安装了NTP,正确设置并启动了所有内容。 云一段时间运行良好,但云控制器/集群控制器将停止与其中一个节点控制器通话!

其中一个症状是euca-describe-availability-zones verbose突然显示比合适(和初始)值更less的资源。

如果我看cc.log ,它显示:

 [Mon Sep 19 19:09:07 2011][002531][EUCADEBUG ] DEBUG: requested URI http://10.20.200.10:8775/axis2/services/EucalyptusNC [Mon Sep 19 19:09:07 2011][002531][EUCADEBUG ] ncClientCall(ncDescribeResource): ppid=13403 client calling 'ncDescribeResource' [Mon Sep 19 19:09:07 2011][002531][EUCAERROR ] ERROR: DescribeResource() could not be invoked (check NC host, port, and credentials) [Mon Sep 19 19:09:07 2011][002531][EUCADEBUG ] ncClientCall(ncDescribeResource): ppid=13403 done calling 'ncDescribeResource' with exit code '1' 

然后,在相应的节点控制器axis2c.log ,我看到:

 [Mon Sep 19 19:10:58 2011] [error] rampart_timestamp_token.c(179) [rampart]Timestamp not valid: Created time is not valid [Mon Sep 19 19:10:58 2011] [error] rampart_sec_header_processor.c(612) [rampart]Timestamp is not valid [Mon Sep 19 19:10:58 2011] [error] rampart_sec_header_processor.c(1911) [rampart]Timestamp processing failed [Mon Sep 19 19:10:58 2011] [error] rampart_in_handler.c(143) [rampart][rampart_in_handler] Security Header processing failed. [Mon Sep 19 19:10:58 2011] [error] phase.c(233) Handler RampartInHandler invoke failed within phase Security [Mon Sep 19 19:10:58 2011] [error] engine.c(696) Invoking phase Security failed [Mon Sep 19 19:10:58 2011] [error] engine.c(279) Invoking operation specific phases failed for operation ncDescribeResource [Mon Sep 19 19:10:58 2011] [error] rampart_engine.c(159) [rampart][rampart_engine] Cannot get saved rampart_context [Mon Sep 19 19:10:58 2011] [error] rampart_out_handler.c(136) [rampart][rampart_out_handler] ramaprt_context creation failed. [Mon Sep 19 19:10:58 2011] [error] phase.c(233) Handler RampartOutHandler invoke failed within phase MessageOut [Mon Sep 19 19:10:58 2011] [error] engine.c(696) Invoking phase MessageOut failed 

所以:有一个时间同步问题。

但是,NTP已安装并正确configuration。

有一点我注意到,通过发出大量的ntpq -np一旦时间偏移是正数,NC停止工作 。 如果抵消保持负面,一切工作正常。 偏移非常小(大约5ms,我能看到的绝对最大值是10ms)。

谷歌search,我已经find了这个坡道代码: http : //wso2.org/project/wsf/php/1.1.0/docs/code-coverage/rampartc/src/util/.libs/rampart_timestamp_token.c.gcov.html

 /*Check whether created is less than current time or not*/ current_val = rampart_generate_time(env, 0); validity = rampart_compare_date_time(env, current_val, created_val); if (validity == AXIS2_SUCCESS) { AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[rampart][ts]Timestamp not valid: Created time is not valid"); AXIS2_FREE(env->allocator, current_val); current_val = NULL; return AXIS2_FAILURE; } 

正如我们所看到的,它显然允许某种意义上的时间偏差,而不是另一种意义上的偏差。

我错过了什么吗? 我是唯一面临这个问题吗? 用毫秒精度validation时间戳并仅允许负偏差是不是很愚蠢?

人们如何处理这个问题? 我能做些什么来保持我的云活着?

我想到了一些解决scheme:

  1. 修补垒,简单地删除时间戳validation
  2. 补丁垒,以允许正面的偏差
  3. find一种方法使ntpntpdate将时间调整到服务器参考时间后面的某个特定偏移量
  4. 写我自己的时间同步工具

你怎么看?

编辑 :它看起来像是可以在Axis2configuration禁用Rampart,但我不知道该怎么做!

编辑2 :在Ubuntu的仓库上可用的Rampart的版本是1.3.0,这是从2007年或2008年…最新发布的版本是1.6.0,从2011年6月。显然,这个最新版本允许数据包“从未来”。 我真的很想从PPA中find这个最新版本!

编辑3 :我发现一些参数来改变Rampart 1.3.0的行为:TimeToLive,ClockSkewBuffer和PrecisionInMilliseconds。 我已经将它们(分别是360,60和false)添加到EucalyptusNC.xml和EucalyptusCC.xml中,并且情况正在好转。 有时我仍然可以看到日志上的时间戳错误消息,但现在非常less见。 我也禁用了NC上的NTP,并创build了一个cron脚本(每小时运行一次)与CC同步时间(ntpdate -b)。

编辑4 :显然这是Ubuntu的包装的桉树的错误。 我已经在Launchpad上提交了一个bug,按照Freenode上#eucalyptus的build议: https ://bugs.launchpad.net/ubuntu/+source/eucalyptus/+bug/854946

我的理解是,rampartc的版本是1.3.0,而axis2c的当前版本是1.6.0。 所以这是目前的版本。

我们在同步化过程中没有看到这个问题:如果时间在5分钟以上,通常是有效的。

一般来说,你已经遇到了一个关于软件虚拟化的关键问题,并且基于云计算的虚拟化,时钟不是基于硬件时钟,而是与底层主机操作系统的总体业务有关。 有时物理时钟和虚拟时钟会同步,当发生这种情况时会引起时钟跳变。 有很多的应用程序,这个时钟跳可以玩的应用程序的性能破坏。 如果您需要一个真正高精度的时钟来进行计时或审计,您可能需要迁移到物理托pipe,而不是在互联网上进行虚拟托pipe。