RAC集群的時間同步,可以采用操作系統的NTP服務,也可以使用Oracle自帶的服務CTSS,如果NTP沒有啟用,那么Oracle會自動啟用自己的ctssd進程。從Oracle 11gR2 RAC開始使用Cluster Time Synchronization Service(CTSS)同步各節點的時間。CTSS時間同步服務作為Clusteware的一部分被安裝,在系統中,如果察覺到時間同步服務或者時間同步服務配置(NTP),那么CTSS將以觀察模式(Oberver Mode)啟動和運行,
不執行時間同步操作。CTSS守護進程能隨時被安裝,並將一直運行,但是只有在系統符合配置條件情況下才會起作用。如果NTP不存在於任何的集群服務器中,CTSS將被激活,接管集群的時間管理工作,以活動模式(Active Mode)啟動和運行,使用集群其中一個服務器作為參考服務器,同步集群中的其他服務器的時間。
在RAC中,集群的時間應該是保持同步的,否則可能導致很多問題,例如:依賴於時間的應用會造成數據的錯誤,各種日志打印的順序紊亂,這將會影響問題的診斷,嚴重的可能會導致集群宕機或者重新啟動集群時節點無法加入集群。
NTP和CTSS是可以共存的,且NTP的優先級要高於CTSS,也就是說,如果系統中同時有NTP和CTSS,那么集群的時間是由NTP同步的,CTSS會處於觀望(Observer)模式,只有當集群關閉所有的NTP服務,CTSS才會處於激活(Active)模式。在一個集群中,只要有一個節點的ntp處於活動狀態,那么集群的所有節點的CTSS都會處於觀望(Observer)模式。
需要注意的是,要讓CTSS處於激活(Active)模式,則不僅要關閉ntp服務(/sbin/service ntpd stop),還要刪除/etc/ntp.conf文件(也可mv etc/ntp.conf etc/ntp.conf.bak),否則不能啟用CTSS。
1、CTSS同步模式
[root@rac1centorder ~]# service ntpd status ntpd 已停 [root@rac1centorder ~]# ll /etc/ntp.* -rw-r--r--. 1 root root 1778 12月 18 2017 /etc/ntp.conf.bak [root@rac1centorder ~]# chkconfig --list ntpd ntpd 0:關閉 1:關閉 2:關閉 3:關閉 4:關閉 5:關閉 6:關閉 查看ctss進程 [root@rac1centorder ~]# ps -ef |grep ctss root 129931 1 0 2019 ? 23:33:10 /u01/app/11.2.0/grid_1/bin/octssd.bin reboot root 217171 155615 0 11:24 pts/0 00:00:00 grep ctss 查看集群節點1的ctss狀態: [root@rac1centorder ~]# su - grid [grid@rac1centorder ~]$ crsctl check ctss CRS-4701: The Cluster Time Synchronization Service is in Active mode. CRS-4702: Offset (in msec): 0
節點1的octssd的日志:
[grid@rac1centorder ~]$ tail -30 /u01/app/11.2.0/grid_1/log/rac1centorder/ctssd/octssd.log 2020-10-26 11:31:19.472: [ CTSS][2587350784]ctssslave_swm: The system time difference is too small [753] usec. Not adjusting time. 2020-10-26 11:31:19.472: [ CTSS][2587350784]ctssslave_swm17: LT [1603683079sec 472234usec], MT [1603683079sec 140694539155355usec], Delta [1920usec] 2020-10-26 11:31:19.472: [ CTSS][2587350784]ctssslave_swm19: The offset is [-753 usec] and sync interval set to [1] 2020-10-26 11:31:19.472: [ CTSS][2587350784]ctssslave_swm: Received from master (mode [0xcc] nodenum [2] hostname [rac2centorder] ) 2020-10-26 11:31:19.472: [ CTSS][2587350784]ctsselect_msm: Sync interval returned in [1] 2020-10-26 11:31:19.472: [ CTSS][2591553280]ctssslave_msg_handler4_3: slave_sync_with_master finished sync process. Exiting clsctssslave_msg_handler 2020-10-26 11:31:27.472: [ CTSS][2587350784]ctsselect_msm: CTSS mode is [0xc4] 2020-10-26 11:31:27.472: [ CTSS][2587350784]ctssslave_swm1_2: Ready to initiate new time sync process. 2020-10-26 11:31:27.473: [ CTSS][2587350784]ctssslave_swm2_1: Waiting for time sync message from master. sync_state[2]. 2020-10-26 11:31:27.474: [ CTSS][2591553280]ctsscomm_recv_cb2: Receive incoming message event. Msgtype [2]. 2020-10-26 11:31:27.474: [ CTSS][2591553280]ctssslave_msg_handler4_1: Waiting for slave_sync_with_master to finish sync process. sync_state[3]. 2020-10-26 11:31:27.474: [ CTSS][2587350784]ctssslave_swm2_3: Received time sync message from master.
節點2的octssd的日志:
[grid@rac2centorder ~]$ tail -30 /u01/app/11.2.0/grid_1/log/rac2centorder/ctssd/octssd.log 2020-10-26 11:35:03.532: [ CTSS][2221074176]ctsscomm_msg_hndlr: Received from slave ( mode [0xc4] nodenum [1] hostname [rac1centorder] ) 2020-10-26 11:35:10.688: [ CTSS][2236086016]ctss_checkcb: clsdm requested check alive. checkcb_data{mode[0xcc], offset[0 ms]}, length=[8]. 2020-10-26 11:35:11.533: [ CTSS][2221074176]ctsscomm_recv_cb2: Receive incoming message event. Msgtype [1]. 2020-10-26 11:35:11.533: [ CTSS][2221074176]ctsscomm_msg_hndlr: Received sync msg 2020-10-26 11:35:11.534: [ CTSS][2221074176]ctsscomm_msg_hndlr: Received from slave ( mode [0xc4] nodenum [1] hostname [rac1centorder] ) 2020-10-26 11:35:19.536: [ CTSS][2221074176]ctsscomm_recv_cb2: Receive incoming message event. Msgtype [1]. 2020-10-26 11:35:19.536: [ CTSS][2221074176]ctsscomm_msg_hndlr: Received sync msg 2020-10-26 11:35:19.536: [ CTSS][2221074176]ctsscomm_msg_hndlr: Received from slave ( mode [0xc4] nodenum [1] hostname [rac1centorder] ) 2020-10-26 11:35:26.720: [ CTSS][2216871680]sclsctss_gvss2: NTP default pid file not found 2020-10-26 11:35:26.720: [ CTSS][2216871680]sclsctss_gvss8: Return [0] and NTP status [1]. 2020-10-26 11:35:26.720: [ CTSS][2216871680]ctss_check_vendor_sw: Vendor time sync software is not detected. status [1].
log中記錄沒有發現ntp服務,ctss服務為激活模式,同步時間的主節點是節點1,並且會告訴集群的時間有差異,但是因為差異過小,無需調整。
檢驗集群的時間:
[grid@rac1centorder ~]$ cluvfy comp clocksync -n all -verbose
雖然集群時間不一致,但是這種情況下校驗結果是通過的,而且略微的差異范圍內集群也會自動同步回來。
注意:
(1)CTSS不會把系統時間向前調整,Oracle 10.2 RAC中有向前調整時間引起節點重啟的BUG;
(2)CTSS可以保證節點之間時間同步,但不能保證和外部標准時鍾(北京時間)保持一致。
2、Linux NTP同步模式
在CentOS8.0中默認不再支持ntp軟件包,時間同步將由chrony來實現。
1、確認ntp的安裝
1)確認是否已安裝ntp rpm –qa | grep ntp 若只有ntpdate而未見ntp,則需刪除原有ntpdate。如: ntpdate-4.2.6p5-22.el7_0.x86_64 fontpackages-filesystem-1.44-8.el7.noarch python-ntplib-0.3.2-1.el7.noarch 2)刪除已安裝ntp yum –y remove ntpdate-4.2.6p5-22.el7.x86_64 3)重新安裝ntp yum –y install ntp
2、配置ntp服務
此方法既可以保證節點間同步,又保證了時鍾和標准時間同步。 配置NTP服務: 修改所有節點/etc/ntp.conf, 192.168.7.2為公司內網時間同步服務器(已和標准時鍾同步)。 [root@rac1centorder ~]# vi /etc/ntp.conf server 192.168.7.2 driftfile /var/lib/ntp/drift broadcastdelay 0.008 disable monitor 注:disable monitor 防止NTP服務的DDOS攻擊解決辦法。 [root@rac1centorder ~]# vi /etc/sysconfig/ntpd # Drop root to id 'ntp:ntp' by default. OPTIONS=" -x -u ntp:ntp -p /var/run/ntpd.pid -g" 注:-x參數代表使用clock slewing 微調模式同步,避免時鍾大幅度跳躍導致集群重構。大幅度向后調整時間會導致 Clusterware 以為錯過了簽到,從而發生節點驅逐的情況。
開始NTP服務:
service ntpd status service ntpd restart chkconfig ntpd on chkconfig --list ntpd
開始NTP后查看CTSS狀態:
[grid@rac1centorder ~]$ crsctl check ctss
CRS-4700: The Cluster Time Synchronization Service is in Observer mode.
[grid@rac2centorder ~]$ crsctl check ctss
CRS-4700: The Cluster Time Synchronization Service is in Observer mode.
[grid@rac1centorder ~]$ tail -30 /u01/app/11.2.0/grid_1/log/rac1centorder/ctssd/octssd.log
2020-10-26 13:54:25.782: [ CTSS][2587350784]sclsctss_gvss1: NTP default config file found
2020-10-26 13:54:25.782: [ CTSS][2587350784]sclsctss_gvss8: Return [0] and NTP status [2].
2020-10-26 13:54:25.782: [ CTSS][2587350784]ctss_check_vendor_sw: Vendor time sync software is detected. status [2].
2020-10-26 13:54:25.782: [ CTSS][2587350784]ctss_check_vendor_sw: Ctssd is switching to observer role
2020-10-26 13:54:25.782: [ CTSS][2587350784]clsctsselect_update_mbrdata: Updating pridata: { version[1] node[1] swversion[186647552] mode[0xe6] }.
2020-10-26 13:54:25.783: [ CTSS][2587350784]ctsselect_msm: CTSS mode is [0xe6]
ntpdate -u 192.168.23.41 ---手工同步,需停止ntpd服務
ntpq -p ---查詢主ntp,*為再用
ntpstat
3、Chrony服務
rpm -qa |grep chrony查看系統是否已安裝chrony,可看到默認已安裝chrony的包
yum install chrony
systemctl start chronyd.service 啟動chrony服務
systemctl enable chronyd.service 設置開機同步時間
systemctl status chronyd.service 查看服務狀態
配置Chrony
1、服務端配置 1)、配置文件修改 vi /etc/chrony.conf a、修改第22行,Allow NTP client access from local network,配置允許訪問的客戶端列表,支持CIDR,例如: allow 192.168/16 b、修改第29行設置同步,Serve time even if not synchronized to any NTP server.,打開注釋即可,即: local stratum 10 2)、重啟下服務端chrony服務,使用systemctl restart chronyd.service重啟即可。 2、客戶端配置 1)、配置文件修改 vim /etc/chrony.conf a、修改server即可,刪掉其他的,添加要同步時間的源服務器ip,格式如下: server x.x.x.x iburst 2)、重啟下客戶端chrony服務,使用systemctl restart chronyd.service重啟即可。
客戶端使用chronyc sources -v命令完成同步即可 3)、查看同步狀態
常用命令
查看時間同步源: $ chronyc sources -v 立即手工同步 $chronyc -a makestep 查看時間同步源狀態: $ chronyc sourcestats -v 設置硬件時間 硬件時間默認為UTC: $ timedatectl set-local-rtc 1 啟用NTP時間同步: $ timedatectl set-ntp yes 校准時間服務器: $ chronyc tracking 最后需要注意的是,配置完/etc/chrony.conf后,需重啟chrony服務,否則可能會不生效。