时间同步(CTSS和NTP)


         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服务,否则可能会不生效。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM