Redhat
VoltDB集群如何確定節點之間的時間同步
我對多個 RHEL7.1 vm (KVM) 上的 VoltDB 集群有一個奇怪的痛苦問題。
時間通過單個本地主 NTP 伺服器在 VM 和它們的管理程序之間同步 - 使用 chrony。主伺服器與外部 ntp 池同步。
VoltDB 產生一個隨機錯誤:
致命的
$$ main $$HOST:時鐘偏差為 120,大於 100 毫秒限制。確保 NTP 正在執行。
已根據 VoltDB for ntpd 的 perf guide 盡可能多地設置了 Chrony 配置 -此處。
我用我的“google-fu”搜尋了高低 - 但我似乎無法找到關於 VoltDB 如何確定時鐘偏差錯誤的答案。
我能找到的唯一最接近的是這個 java 程式碼:從第 603 行開始,github 上的voltdb/SocketJoiner.java 。
skew = System.currentTimeMillis() - currentTimeBuf.getLong();
我想知道為什麼 VoltDB 不使用 java 函式呼叫 - System.nanoTime() 來進行精確計時。
任何幫助或見解都會很棒。
在啟動時,VoltDB 將從集群的第一個節點向集群的所有加入節點發送一條往返消息。此消息查詢每個節點的本地時間。
對於每個加入節點,計算其本地時間與第一個節點的本地時間之間的差異。這包括時鐘偏差和網路延遲。事實上,時鐘偏差和網路延遲有可能相互抵消,但可能性不大。
在所有加入節點中,VoltDB 報告時鐘之間的最大差異。
在這種情況下,VoltDB 告訴您,對於某些節點對,包括加入節點和您啟動的第一個節點(啟動領導者),比較時鐘之間的差異是 120 毫秒,這對於 NTP 上的機器來說是很多的同一個數據中心。
您可以使用節點之間的 ping 檢查網路延遲,但請確保您使用的網路介面與您設置 VoltDB 執行的網路介面相同。