Oracle叢集時間同步

沃趣科技發表於2018-06-29


在RAC中叢集的時間應該是保持同步的,否則可能導致很多問題,比如:依賴於時間的應用會造成資料的錯誤,各種日誌列印的順序紊亂,這將會影響問題的診斷,嚴重的可能會導致叢集當機或者重新啟動叢集時節點無法加入叢集。


11gR2前,叢集的時間是由NTP同步的,而在11gR2後,Oracle引入了CTSS元件,如果系統沒有配置NTP,則由CTSS來同步叢集時間。


NTP和CTSS是可以共存的,且NTP的優先順序要高於CTSS,也就是說如果系統中同時有NTPCTSS,叢集的時間是由NTP同步的,CTSS會處於觀望(Observer)模式,只有當叢集關閉所有的NTP服務,CTSS才會處於啟用(Active)模式。


以下是叢集時間同步的兩種模式:

1NTP同步模式

節點1的octssd.log中記錄發現ntp服務,ctss服務會自動切換到觀望模式。


節點2的octssd.log中也會記錄發現ntp服務,ctss服務為觀望模式,並且同步時間的主節點是節點1。


2CTSS同步模式



節點1的octssd.log中記錄沒有發現ntp服務,ctss服務為啟用模式。



節點2的octssd.log中記錄沒有發現ntp服務,ctss服務為啟用模式,同步時間的主節點是節點1,並且會告訴你叢集的時間有差異,但是因為差異過小,無需調整。



雖然叢集時間不一致,但是這種情況下校驗結果是通過的,而且略微的差異範圍內叢集也會自動同步回來。


如果在我們生產系統中碰到叢集時間不一致會導致什麼結果,我們的排查思路是怎麼樣的,以下是模擬叢集時間不一致的場景。


更改節點2的時間後在ASM和DB的alert日誌中產生了以下的告警資訊

點選(此處)摺疊或開啟

  1. Warning: VKTM detected a time drift.
  2. Time drifts can result in an unexpected behavior such as time-outs. Please check trace
  3. file for more details.
  4. oracle@com2:/opt/oracle/diag/rdbms/orcl/orcl2/trace>more orcl2_vktm_34715.trc
  5. Trace file /opt/oracle/diag/rdbms/orcl/orcl2/trace/orcl2_vktm_34715.trc
  6. Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
  7. With the Partitioning, Real Application Clusters, OLAP, Data Mining
  8. and Real Application Testing options
  9. ORACLE_HOME = /opt/oracle/products/11.2.0
  10. System name: Linux
  11. Node name: com2
  12. Release: 3.10.0-693.11.1.el7.x86_64
  13. Version: #1 SMP Fri Oct 27 05:39:05 EDT 2017
  14. Machine: x86_64
  15. Instance name: orcl2
  16. Redo thread mounted by this instance: 0 <none>
  17. Oracle process number: 4
  18. Unix process pid: 34715, image: oracle@com2 (VKTM)


  19. *** 2018-06-08 20:01:39.824
  20. *** SESSION ID:(921.1) 2018-06-08 20:01:39.824
  21. *** CLIENT ID:() 2018-06-08 20:01:39.824
  22. *** SERVICE NAME:() 2018-06-08 20:01:39.824
  23. *** MODULE NAME:() 2018-06-08 20:01:39.824
  24. *** ACTION NAME:() 2018-06-08 20:01:39.824

  25. kstmmainvktm: succeeded in setting elevated priority
  26. highres_enabled

  27. *** 2018-06-08 20:01:39.824
  28. VKTM running at (1)millisec precision with DBRM quantum (100)ms
  29. [Start] HighResTick = 1528459299824585
  30. kstmrmtickcnt = 0 : ksudbrmseccnt[0] = 1528459299

  31. *** 2018-06-10 20:04:00.000
  32. kstmchkdrift (kstmhighrestimecntkeeper:highres): Time jumped forward by
  33. (172844812599)usec at (1528632240000738) whereas (1000000) is allowed

VKTM程式發現系統時間變了,alert日誌會產生相應的告警資訊,從產生的trace檔案中可知,系統向前推進了172844812599微秒,也即為48小時(也就是我們模擬更改的時間),而允許的差異範圍為1秒。


節點2的octssd.log中和ctss狀態都記錄了偏移的時間,而且校驗也是失敗的,校驗結果是需要同步節點2的時間,此時因為叢集時間差異較大,同步服務往往是無法做到的,只有手工同步才能修復。



在沒有同步時間之前,重啟節點2是無法正常啟動的,從以下命令可知是在ctss這一步有問題,通過重新更改正確時間後,叢集才能正常啟動。




| 作者簡介

管海濤·沃趣科技高階資料庫技術專家

熟悉Oracle資料庫內部機制,豐富的資料庫及RAC叢集層故障診斷、效能調優、OWI、資料庫備份恢復及遷移經驗。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28218939/viewspace-2157055/,如需轉載,請註明出處,否則將追究法律責任。

相關文章