Linux时间有两种
在Linux下,默认情况下,系统时间和硬件时间并不会自动同步。在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。硬件时间的运行,是靠BIOS电池来维持,而系统时间,是用CPU Tick来维持的。在系统开机的时候,会自动从BIOS中取得硬件时间,设置为系统时间
查看当前时间
1.date :查看当前时间
[root@ncayu618 ~]# date
2021年 03月 22日 星期一 15:59:59 CST
2.date '+%Y%M%D' 按照格式显示当前日期
[root@ncayu618 ~]# date "+%Y-%m-%d %H:%M:%S"
2021-03-22 16:00:45
3.date -s "xxx xx:xx:xx" 设置系统时间
linux的时间同步
下面我们来看一下我们在复杂环境下怎么把多台linux设置统一的正确环境:对-时间同步 命令:utpdate 时间服务器ip ntpdate -u xx.xx.xx.xx 结果如下:
[root@ncayu618 ~]# ntpdate -u ntp.api.bz
22 Mar 16:08:51 ntpdate[24159]: adjust time server 114.118.7.161 offset -0.000475 sec
[root@ncayu618 ~]# date
2021年 03月 22日 星期一 16:09:33 CST
ps:若不加上-u参数, 会出现以下提示:no server suitable for synchronization found
-u:从man ntpdate中可以看出-u参数可以越过防火墙与主机同步;
ntp常用服务器:
中国国家授时中心:210.72.145.44
NTP服务器(上海) :ntp.api.bz
美国: time.nist.gov
复旦: ntp.fudan.edu.cn
微软公司授时主机(美国) :time.windows.com
北京邮电大学 : s1a.time.edu.cn
清华大学 : s1b.time.edu.cn
北京大学 : s1c.time.edu.cn
台警大授时中心(台湾):asia.pool.ntp.org
我选用的是NTP服务器(上海)
查看时区:
[root@ncayu618 ~]# date "+%Z"
CST
但在做数据库集群分片等复杂操作时对多台机器的时间差是有要求的,此时就需要使用ntpdate进行时间同步。
[root@ncayu618 ~]# ls /usr/share/zoneinfo/Asia/ ##/usr/share/zoneinfo为所有不同地区的时区位置
Aden Ashkhabad Beirut Chungking Dushanbe Hovd Kamchatka Krasnoyarsk Makassar Oral Riyadh Srednekolymsk Thimphu Ust-Nera
Almaty Atyrau Bishkek Colombo Famagusta Irkutsk Karachi Kuala_Lumpur Manila Phnom_Penh Saigon Taipei Tokyo Vientiane
Amman Baghdad Brunei Dacca Gaza Istanbul Kashgar Kuching Muscat Pontianak Sakhalin Tashkent Tomsk Vladivostok
Anadyr Bahrain Calcutta Damascus Harbin Jakarta Kathmandu Kuwait Nicosia Pyongyang Samarkand Tbilisi Ujung_Pandang Yakutsk
Aqtau Baku Chita Dhaka Hebron Jayapura Katmandu Macao Novokuznetsk Qatar Seoul Tehran Ulaanbaatar Yangon
Aqtobe Bangkok Choibalsan Dili Ho_Chi_Minh Jerusalem Khandyga Macau Novosibirsk Qyzylorda Shanghai Tel_Aviv Ulan_Bator Yekaterinburg
Ashgabat Barnaul Chongqing Dubai Hong_Kong Kabul Kolkata Magadan Omsk Rangoon Singapore Thimbu Urumqi Yerevan
将系统时间写入到硬件(bios)
同步NTP服务器(上海)
[root@ncayu618 ~]# ntpdate -u ntp.api.bz
22 Mar 16:08:51 ntpdate[24159]: adjust time server 114.118.7.161 offset -0.000475 sec
[root@ncayu618 ~]# date
2021年 03月 22日 星期一 16:09:33 CST
[root@ncayu618 ~]# hwclock
2021年03月22日 星期一 16时15分40秒 -0.351661 秒
**将系统时间写入到硬件
[root@ncayu618 ~]# clock -w
[root@ncayu618 ~]#
如何确认我们的NTP服务器已经更新了自己的时间呢?
[root@ncayu618 ~]# ntpstat
synchronised to NTP server (100.100.61.88) at stratum 2
time correct to within 45 ms
polling server every 1024 s
ntpq命令:
[root@ncayu618 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
LOCAL(0) .LOCL. 10 l - 64 0 0.000 0.000 0.000
-120.25.115.20 10.137.53.7 2 u 362 1024 377 2.713 4.597 4.509
10.143.33.49 .STEP. 16 u - 1024 0 0.000 0.000 0.000
-100.100.3.1 10.137.55.181 2 u 186 1024 377 24.292 -0.139 4.610
-100.100.3.2 10.137.55.181 2 u 377 1024 377 24.794 0.545 0.968
+100.100.3.3 10.137.55.181 2 u 439 1024 377 25.791 -0.914 1.477
-203.107.6.88 100.107.25.114 2 u 526 1024 377 49.107 1.991 1.619
10.143.33.50 .STEP. 16 u - 1024 0 0.000 0.000 0.000
10.143.33.51 .STEP. 16 u - 1024 0 0.000 0.000 0.000
10.143.0.44 .STEP. 16 u - 1024 0 0.000 0.000 0.000
10.143.0.45 .STEP. 16 u - 1024 0 0.000 0.000 0.000
10.143.0.46 .STEP. 16 u - 1024 0 0.000 0.000 0.000
+100.100.5.1 10.137.55.181 2 u 153 1024 377 25.360 -1.914 4.310
-100.100.5.2 10.137.55.181 2 u 191 1024 377 25.332 -0.226 4.309
-100.100.5.3 10.137.55.181 2 u 1038 1024 377 24.816 10.442 9.422
*100.100.61.88 .BD. 1 u 229 1024 377 1.126 -1.321 4.274
"ntpq -p"可以列出目前我们的NTP与相关的上层NTP的状态,以上的几个字段的意义如下:
remote:即NTP主机的IP或主机名称。注意最左边的符号,如果由"+“则代表目前正在作用钟的上层NTP,如果是”*"则表示也有连上线,不过是作为次要联机的NTP主机。
refid:参考的上一层NTP主机的地址
st:即stratum阶层
when:几秒前曾做过时间同步更新的操作
poll:下次更新在几秒之后
reach:已经向上层NTP服务器要求更新的次数
delay:网络传输过程钟延迟的时间
offset:时间补偿的结果
jitter:Linux系统时间与BIOS硬件时间的差异时间
适用场景
Linux服务器时间出现错误,影响数据库和应用的获取时间,这时候就需要进行时间同步啦。当然搭建prometheus告警系统也是需要做时间同步的。其实时间同步还有更好的方法,但是我还不会,嘿嘿。