Ubuntu

Ubuntu Enterprise Cloud - NC 停機和時間同步

  • December 11, 2012

我的雲安裝有問題。

我已經安裝了 Ubuntu Server 11.04 CD 中的所有內容,然後將系統升級到最新版本(apt-get update && apt-get dist-upgrade),安裝 NTP,正確設置並啟動所有內容。雲執行正常一段時間,但隨後雲控制器/集群控制器將停止與節點控制器之一通信!

症狀之一是euca-describe-availability-zones verbose突然開始顯示的資源少於適當的(和初始)值。

如果我看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 已安裝並正確配置。

ntpq -np通過發布大量的,我注意到的一件事是,一旦時間偏移為正,NC 就會停止工作。如果偏移量保持負數,則一切正常。偏移量非常小(大約 5 毫秒,我能看到的絕對最大值是 10 毫秒)。

Google搜尋,我發現了這個壁壘程式碼: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;
 }

正如我們所看到的,它顯然在一種意義上允許時間偏差,但在另一種意義上則不允許。

我錯過了什麼嗎?我是唯一面臨這個問題的人嗎?以毫秒精度驗證時間戳並只允許負偏差不是很愚蠢嗎?!

人們如何處理這個問題?我可以做些什麼來讓我的雲保持活力?

我想到了一些解決方案:

  1. 更新檔壁壘,簡單地去除時間戳驗證
  2. 更新檔壁壘,也允許正偏差
  3. 找到一種方法將時間製作ntpntpdate調整到伺服器參考時間之後的某個特定偏移量
  4. 寫自己的時間同步工具

你怎麼看?

編輯:看起來可以在 Axis2 配置中禁用 Rampart,但我不知道該怎麼做!

編輯 2:Ubuntu 儲存庫上可用的 Rampart 版本是 1.3.0,它來自 2007 年或 2008 年……最新發布的版本類似於 1.6.0,從 2011 年 6 月開始。顯然這個最新版本允許“來自未來的數據包” ”。我真的很想從 PPA 中找到這個最新版本!

編輯 3:我找到了一些參數來改變 Rampart 1.3.0 的行為:TimeToLive、ClockSkewBuffer 和 PrecisionInMilliseconds。我已將它們(分別為 360、60 和 false)添加到 EucalyptusNC.xml 和 EucalyptusCC.xml,情況正在好轉。偶爾我仍然會在日誌上看到時間戳錯誤消息,但現在它們非常罕見。我還在 NC 上禁用了 NTP,並創建了一個 cron 腳本(每小時執行一次)來與 CC 同步時間(ntpdate -b)。

編輯 4:顯然這是 Ubuntu 的桉樹包裝中的一個錯誤。根據 Freenode 上#eucalyptus 中人們的建議,我在 Launchpad 上送出了一個錯誤:https ://bugs.launchpad.net/ubuntu/+source/eucalyptus/+bug/854946

據我了解,rampartc 的版本是 1.3.0,而目前的 axis2c 版本是 1.6.0。所以它是目前版本。

我們在同步中沒有看到這個問題:如果時間在 5 分鐘以內,它通常可以工作。

您遇到了軟體虛擬化的一個關鍵問題,通過擴展基於雲的虛擬化,時鐘不以硬體時鐘為基礎,它會隨著底層主機作業系統的整體業務而浮動。有時物理時鐘和虛擬時鐘會同步,發生這種情況時會導致時鐘跳變。在許多應用程序中,這種時鐘跳躍會嚴重破壞應用程序的性能。如果您需要一個非常高精度的時鐘來進行計時或審計,您可能需要轉移到物理主機,而不是網際網路上的虛擬主機。

引用自:https://serverfault.com/questions/313200