分布式集群服务器时间同步
服务器端项目经常依赖服务器系统时间对api校验和业务操作,在分布式集群服务器的环境下,各个服务器的本地系统时间可能各不相同,这时系统时间就有差错,可能会导致网络请求校验失败或业务执行失败。因此服务器时间同步是非常重要的。
阿里云ECS服务器实例提供了NTP服务器
阿里云ECS实例已经提供了NTP服务器支持,直接启动已配置好的NTP服务即可。
《阿里云NTP服务器》
《配置Linux实例NTP服务》
在开启服务前,先确保环境配置:
- 服务器开启UDP 123端口,可通过设置ECS实例的安全组,由于本人用的是VPC同地域私有云服务器,在购买ECS实例时统一用同一个安全组配置实例,确保UDP 123端口开通。
- 命令行输入
sudo vi /etc/ntp.conf
,查看NTP配置文件,发现ECS已配置好标准的NTP服务:
文档《配置Linux实例NTP服务》中介绍了CentOS环境下开启NTP服务。
由于本人购买的Ubuntu服务器,下面总结Ubuntu环境下的配置。
执行命令查询所有服务,看ntp服务是否已开启(+号:已开启;-号:未开启):
service --status-all
发现香港地区的服务默认都没有开启ntp服务;但深圳地区的服务器默认已经开启了ntp服务。
执行命令查询ntp进程,发现深圳服务器默认已经开启了ntp服务:
ps -aux | grep ntp
如果未开启ntp服务,执行命令开启ntp服务:
service ntp restart
开启成功后,如图:
或者查询ntp相关的进程:
重启后通过如下命令观察NTP的运行状态:
watch ntpq -p
这个命令可以列出目前我们的 NTP 与相关的上层 NTP 的状态,上头的几个字段的意义为:
remote: 它指的就是本地机器所连接的远程NTP服务器;
refid: 它指的是给远程服务器提供时间同步的服务器;
st: 远程服务器的层级别(stratum). 由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端。所以服务器从高到低级别可以设定为1-16. 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的;
when: 几秒钟前曾经做过时间同步化更新的动作;
poll: 本地机和远程服务器多少时间进行一次同步(单位为秒).
在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围.之后poll值会逐渐增大,同步的频率也就会相应减小;
reach: 已经向上层 NTP 服务器要求更新的次数;
delay: 网络传输过程当中延迟的时间,单位为 10^(-6) 秒;
offset: 时间补偿的结果,单位与 10^(-3) 秒;
jitter: Linux 系统时间与 BIOS 硬件时间的差异时间, 单位为 10^(-6) 秒。简单地说这个数值的绝对值越小我们和服务器的时间就越精确;
*: 它告诉我们远端的服务器已经被确认为我们的主NTP Server,我们系统的时间将由这台机器所提供;
+: 它将作为辅助的NTP Server和带有号的服务器一起为我们提供同步服务. 当号服务器不可用时它就可以接管;
-: 远程服务器被clustering algorithm认为是不合格的NTP Server;
x: 远程服务器不可用;
配置文件
/etc/ntp.conf ntp配置文件
/usr/share/zoneinfo 时区对应档案
/etc/sysconfig/clock 设定时区
/etc/localtime 开机后对应文件复制到此处
/bin/date 时间修改与显示
/sbin/hwclock 硬件时间
/usr/sbin/ntpd ntpd服务
/usr/sbin/ntpdate 客户端时间校证
配置选项解释:
1) 系统时间与BIOS事件的偏差记录
driftfile /etc/ntp/drift
2) restrict 控制相关权限。
语法为: restrict IP地址 mask 子网掩码 参数
其中IP地址也可以是default ,default 就是指所有的IP
- 参数有以下几个:
ignore :关闭所有的 NTP 联机服务
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网
noquery :不提供客户端的时间查询:用户端不能使用ntpq,ntpc等命令来查询ntp服务器
notrap :不提供trap远端登陆:拒绝为匹配的主机提供模式 6 控制消息陷阱服务。陷阱服务是 ntpdq 控制消息协议的子系统,用于远程事件日志记录程序。
nopeer :用于阻止主机尝试与服务器对等,并允许欺诈性服务器控制时钟
kod : 访问违规时发送 KoD 包。
restrict -6 表示IPV6地址的权限设置。