最近在搭建Openstack以及Ceph的集群,由于集群中都存在多个节点,且节点间需要时间的同步,所以需要使用NTP,又考虑到有些时候网络环境是封闭的,所以需要自己搭建一个NTP的服务器
NTP时间同步方式选择 NTP同步方式在linux下一般两种:使用ntpdate命令直接同步和使用NTPD服务平滑同步。有什么区别呢,简单说下,免得时间长了,概念又模糊。 现有一台设备,系统时间是 13:00 , 真实的当前时间(在空中,也许卫星上,这里假设是在准备同步的上级目标NTP服务器)是: 12:30 。如果我们使用ntpdate同步(ntpdate -u 目标NTP服务器IP),操作系统的时间立即更新为12:30,假如,我们的系统有一个定时应用,是在每天12:40运行,那么实际今天这个的任务已经运行过了(当前时间是13:00嘛),现在被ntpdate修改为12:30,那么意味作10分钟后,又会执行一次任务,这就糟糕了,这个任务只能执行一次的嘛!!我想你(其实是我)已经懂了ntpdate时间同步的隐患,当然这个例子有些极端,但的确是有风险的,生产环境我不打算这么干,还是稳妥点好。所以解决该问题的办法就是时间平滑更改,不会让一个时间点在一天内经历两次,这就是NTPD服务方式平滑同步时间,它每次同步时间的偏移量不会太陡,是慢慢来的(问:怎么来,没有细究,只晓得一次一点的同步,完全同步好需要较长时间,所以一般开启NTPD服务同步前先用ntpdate先手动同步一次)。 安装配置 CentOS 6.3系统已经自带了NTPD服务,一般默认是按照了的,如果没有安装,先检查下,然后配置好yum仓库,yum方式安装下就OK,具体如下: #rpm -q ntp 如果没有安装,我们按照下 # yum install ntp 按上面的安装方式在内网每台服务器上都安装好NTP软件包。 完成后,都需要配置NTP服务为自启动 # chkconfig ntpd on # chkconfig --list ntpd 在配置前,先使用ntpdate手动同步下时间,免得本机与外部时间服务器时间差距太大,让ntpd不能正常同步。 # ntpdate -u 202.112.10.36 22 Dec 16:52:38 ntpdate[6400]: adjust time server 202.112.10.36 offset 0.012135 se 配置内网NTP-Server(192.168.100.203)
下面主要是配置内网的NPTD服务器(192.168.100.203), NTPD服务配置核心就在/etc/ntp.conf文件,配置好了就OK。网上特别是老外的文章都很简单,我上当了,妈哟,基础环境不一样,我们得中国特色才行。先上配置文件再说,红色部分是我的修改,其他的是默认。 # For more information about this file, see the man pages # ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5). driftfile /var/lib/ntp/drift # Permit time synchronization with our time source, but do not # permit the source to query or modify the service on this system. restrict default kod nomodify notrap nopeer noquery restrict -6 default kod nomodify notrap nopeer noquery # Permit all access over the loopback interface. This could # be tightened as well, but to do so would effect some of # the administrative functions. restrict 127.0.0.1 restrict -6 ::1 # Hosts on local network are less restricted. # 允许内网其他机器同步时间 restrict 192.168.40.0 mask 255.255.255.0 nomodify notrap # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). # 中国这边最活跃的时间服务器 : http://www.pool.ntp.org/zone/cn server 210.72.145.44 perfer # 中国国家受时中心 server 202.112.10.36 # 1.cn.pool.ntp.org server 59.124.196.83 # 0.asia.pool.ntp.org #broadcast 192.168.40.255 autokey # broadcast server #broadcastclient # broadcast client #broadcast 224.0.1.1 autokey # multicast server #multicastclient 224.0.1.1 # multicast client #manycastserver 239.255.254.254 # manycast server #manycastclient 239.255.254.254 autokey # manycast client # allow update time by the upper server # 允许上层时间服务器主动修改本机时间 restrict 210.72.145.44 nomodify notrap noquery restrict 202.112.10.36 nomodify notrap noquery restrict 59.124.196.83 nomodify notrap noquery # Undisciplined Local Clock. This is a fake driver intended for backup # and when no outside source of synchronized time is available. # 外部时间服务器不可用时,以本地时间作为时间服务 server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10 # Enable public key cryptography. #crypto includefile /etc/ntp/crypto/pw # Key file containing the keys and key identifiers used when operating # with symmetric key cryptography. keys /etc/ntp/keys # Specify the key identifiers which are trusted. #trustedkey 4 8 42 # Specify the key identifier to use with the ntpdc utility. #requestkey 8 # Specify the key identifier to use with the ntpq utility. #controlkey 8 # Enable writing of statistics records. #statistics clockstats cryptostats loopstats peerstats 配置参数和命令简单说明请参考:http://linux.vbird.org/linux_server/0440ntp.php#server_ntp.conf 配置文件修改完成,保存退出,启动服务。 # service ntpd start 启动后,一般需要5-10分钟左右的时候才能与外部时间服务器开始同步时间。可以通过命令查询NTPD服务情况。 查看服务连接和监听 # netstat -tlunp | grep ntp udp 0 0 192.168.100.203:123 0.0.0.0:* 23103/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 23103/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 23103/ntpd udp 0 0 fe80::6cae:8bff:fe3d:f65:123 :::* 23103/ntpd udp 0 0 fe80::6eae:8bff:fe3d:f65:123 :::* 23103/ntpd udp 0 0 ::1:123 :::* 23103/ntpd udp 0 0 :::123 :::* 23103/ntpd ntpq -p 查看网络中的NTP服务器,同时显示客户端和每个服务器的关系 # ntpq -p # ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *202.112.10.36 202.112.10.60 2 u 277 128 314 201.553 9.193 17.068 +59.124.196.83 129.6.15.28 2 u 88 128 377 71.153 -25.111 14.004 LOCAL(0) .LOCL. 10 l 15 64 377 0.000 0.000 0.000
ntpstat 命令查看时间同步状态,这个一般需要5-10分钟后才能成功连接和同步。所以,服务器启动后需要稍等下。 刚启动的时候,一般是: # ntpstat unsynchronised time server re-starting polling server every 64 s 连接并同步后: synchronised to NTP server (202.112.10.36) at stratum 3 time correct to within 275 ms polling server every 256 s OK,内网的NTPD服务已经配置完成,如果所有正常后,开始配置内网的其他设备与这台服务器作为时间同步服务。
配置内网NTP-Clients 首先需要安装NTPD服务,然后配置为自启动(与NTP-Server完全一样)。然后找其中一台配置/etc/ntp.conf文件,配置完成验证通过后,拷贝到其他客户端机器,直接使用即可。 # yum install ntp # chkconfig ntp on # vim /etc/ntp.conf driftfile /var/lib/ntp/drift restrict 127.0.0.1 restrict -6 ::1 # 配置时间服务器为本地的时间服务器 server 192.168.100.203 restrict 192.168.100.203 nomodify notrap noquery server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10 includefile /etc/ntp/crypto/pw keys /etc/ntp/keys 保存退出,请求服务器前,请先使用ntpdate手动同步下时间 # ntpdate -u 192.168.0.135 22 Dec 17:09:57 ntpdate[6439]: adjust time server 192.168.100.203 offset 0.004882 sec 这里有可能出现同步失败,一般情况下原因都是本地的NTPD服务器还没有正常启动起来,一般需要几分钟时间后才能开始同步。 错误判断请参考后面的错误处理。 # service ntpd start 启动后,查看同步情况 # ntpq -p # ntpstat
错误问题处理 错误1:ntpdate -u ip -< no server suitable for synchronization found 判断:在ntp客户端用ntpdate –d serverIP查看,发现有“Server dropped: strata too high”的错误,并且显示“stratum 16”。而正常情况下stratum这个值得范围是“0~15”。 原因:NTP server还没有和其自身或者它的server同步上。在ntp server上重新启动ntp服务后,ntp server自身或者与其server的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行ntpdate命令时会产生no server suitable for synchronization found的错误。 处理:等待几分钟后,重试一般解决。
也可以使用命令 ntpq -p查看情况 |