一般使用ntp服务来同步不同机器的时间,并允许

2019-11-06 07:17 来源:未知

 

openstack之基础服务配置

  1. 时间同步服务(NTP)配置
    controller节点上
yum install chrony

打开/etc/chrony.conf,配置ntp服务器,这里指定了一个中国的ntp服务器地址,并允许其他节点连接controller的chrony守护进程

server cn.ntp.org.cn iburst
allow 10.0.0.0/24

然后将chrony服务开机启动并且启动该服务

systemctl enable chronyd.service
systemctl start chronyd.service

其他节点

yum install chrony

指定controller为他们的ntp服务器

server controller iburst

然后将chrony服务开机启动并且启动该服务

systemctl enable chronyd.service
systemctl start chronyd.service

controller其他节点上分别运行

chronyc sources

controller的ntp服务器ip应是配置文件里指定的cn.ntp.org.cn的ip,其他节点应该是controller。

centos7.2变成了chrony

  在linux系统中,为了避免主机时间因为长时间运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。linux系统下,一般使用ntp服务来同步不同机器的时间。NTP是网络时间协议(Network Time Protocol)的简称,就是通过网络协议使计算机之间的时间同步化。

几个小概念

安装package

所有节点上执行

yum install centos-release-openstack-newton
yum upgrade
yum install python-openstackclient
yum install openstack-selinux

RHEL从7.0开始改用chrony同步时间,原ntp同步方式也可以使用,但要安装ntp服务。

 

date:系统时间

安装数据库服务

controller节点上安装mariadb

yum install mariadb mariadb-server python2-PyMySQL

编辑配置文件/etc/my.cnf.d/openstack.cnf,添加数据库条目

[mysqld]

bind-address = 10.0.0.101
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

设置开机启动并开启服务

systemctl enable mariadb.service
systemctl start mariadb.service

使用下面命令对数据库的初始密码等安全信息进行设置

mysql_secure_installation

[root@1st-kvm plymouth]# rpm -qa|grep chro
chrony-2.1.1-1.el7.centos.x86_64

安装NTP包

clock:硬件时间

安装消息队列服务

controller节点上

yum install rabbitmq-server
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service

添加名为openstack用户密码设置成123

rabbitmqctl add_user openstack 123

允许openstack用户读写和配置的权力

rabbitmqctl set_permissions openstack ".*" ".*" ".*"

 

检查是否安装了ntp相关包。如果安装ntp相关包,使用rpm或者yum安装,非常简单。

clock -w:硬件时间根据系统时间同步

安装内存对象缓存服务

controlelr节点上

yum install memcached python-memcached
systemctl enable memcached.service
systemctl start memcached.service

需要修改memcached的配置文件,将ip改为管理网络ip,即10.0.0.101,官方文档里没有写,但如果不修改会导致使用dashboard时无法访问memcached服务。

设置NTP Server前的准备
其实这个标题应该改为设置"NTP Relay Server"前的准备更加合适. 因为不论我们的计算机配置多好运行时间久了都会产生误差,所以不足以给互联网上的其他服务器做NTP Server. 真正能够精确地测算时间的还是原子钟. 但由于原子钟十分的昂贵,只有少部分组织拥有, 他们连接到计算机之后就成了一台真正的NTP Server. 而我们所要做的就是连接到这些服务器上同步我们系统的时间,然后把我们自己的服务器做成NTP Relay Server再给互联网或者是局域网内的用户提供同步服务.

[root@localhost ~]# rpm -qa |grep ntp

ntpdate:马上同步时间

[root@rac02 ~]# netstat -ln|grep 123
tcp        0      0 172.16.2.2:12382            0.0.0.0:*                   LISTEN
udp        0      0 172.16.2.2:27123            0.0.0.0:*
udp        0      0 172.16.2.2:123              0.0.0.0:*
udp        0      0 192.168.2.2:123             0.0.0.0:*
udp        0      0 127.0.0.1:123               0.0.0.0:*
udp        0      0 0.0.0.0:123                 0.0.0.0:*

fontpackages-filesystem-1.41-1.1.el6.noarch

ntp:网络时间协议,起到的效果是让你的时间始终稳定持续的同步,前提是时间差别不是很大

1). 架设一个NTP Relay Server其实非常简单,我们先把需要的RPM包装上
[root@localhost ~]# yum install ntp
Installing:
 ntp                               x86_64                           4.2.6p5-2.el6.centos                              updates                           593 k
Installing for dependencies:
 ntpdate                           x86_64                           4.2.6p5-2.el6.centos                              updates                            75 k

ntpdate-4.2.6p5-10.el6.centos.2.i686

我们在生产环境中时间是个很重要的角色

[root@localhost ~]# rpm -ql ntp
/etc/dhcp/dhclient.d
/etc/dhcp/dhclient.d/ntp.sh
/etc/ntp.conf
/etc/ntp/crypto
/etc/ntp/crypto/pw
/etc/rc.d/init.d/ntpd
/etc/sysconfig/ntpd
/usr/bin/ntpstat
/usr/sbin/ntp-keygen
/usr/sbin/ntpd
/usr/sbin/ntpdc
/usr/sbin/ntpq
/usr/sbin/ntptime
/usr/sbin/tickadj
/var/lib/ntp
/var/lib/ntp/drift
/var/log/ntpstats
[root@localhost ~]# rpm -ql ntpdate
/etc/ntp
/etc/ntp/keys
/etc/ntp/step-tickers
/etc/rc.d/init.d/ntpdate
/etc/sysconfig/ntpdate
/usr/sbin/ntpdate
2).找到在互联网上给我们提供同步服务的NTP Server , Server. NTP建议我们为了保障时间的准确性,最少找两个NTP Server。
下面是一个中国的,两个亚洲的
server 2.cn.pool.ntp.org
server 1.asia.pool.ntp.org
server 3.asia.pool.ntp.org

ntp-4.2.6p5-10.el6.centos.2.i686

下面来说下同步时间的方法

下面是另一些可选的
server 133.100.11.8 prefer
server 210.72.145.44
server 203.117.180.36
server 131.107.1.10
server time.asia.apple.com
server 64.236.96.53
server 130.149.17.21
server 66.92.68.246
server www.freebsd.org
server 18.145.0.30
server clock.via.net
server 137.92.140.80
server 133.100.9.2
server 128.118.46.3
server ntp.nasa.gov
server 129.7.1.66
server ntp-sop.inria.fr
server (国家授时中心服务器IP地址)

 

首先我们知道一个服务器时间是准的,下面就用172.18.0.1这台服务器

3).在打开NTP服务器之前先和这些服务器做一个同步,使得我们机器的时间尽量接近标准时间. 这里我们可以用ntpdate命令

NTP的配置

centos6时间同步

1、安装ntp包

2、和服务器时间同步

ntpdate 172.18.0.1
#
#立即同步时间

3、为了以后长时间自动稳定的同步时间编辑配置文件

vim /etc/ntp.conf
#
#

添加一行

server 172.18.0.1 iburst
#
#立即和这个地址服务器同步时间

永利平台娱乐 1

4、开机自启动

chkconfig ntpd on
#
#

5、启动服务

service ntpd  start
#
#

 

要注意的是,ntpd 有一个自我保护设置: 如果本机与上源时间相差太大, ntpd 不运行. 所以新设置的时间服务器一定要先 ntpdate 从上源取得时间初值, 然后启动 ntpd服务。ntpd服务 运行后, 先是每64秒与上源服务器同步一次, 根据每次同步时测得的误差值经复杂计算逐步调整自己的时间, 随着误差减小, 逐步增加同步的间隔. 每次跳动, 都会重复这个调整的过程.

A.配置/etc/ntp.conf

centos7时间同步

在centos7中是推荐使用chrony

1、安装chrony

2、编辑chrony配置文件

vim  /etc/chrony.conf
#
#

同样添加一行

永利平台娱乐 2

3、启动服务

systemctl start chronyd
#
#

4、开机启动

systemctl enable chronyd
#
#

####假如你的时间差的很离谱的话第一次会看到调整的幅度比较大,所以保险起见可以运行两次. 那么为什么在打开NTP服务之前先要手动运行同步呢?
1. 因为根据NTP的设置,如果你的系统时间比正确时间要快的话那么NTP是不会帮你调整的,所以要么你把时间设置回去,要么先做一个手动同步
2. 当你的时间设置和NTP服务器的时间相差很大的时候,NTP会花上较长一段时间进行调整.所以手动同步可以减少这段时间
[root@localhost ~]# date
Mon Feb 16 03:28:27 EST 2015
[root@localhost ~]# ntpdate 2.cn.pool.ntp.org
26 Feb 01:50:10 ntpdate[6018]: step time server 202.112.31.197 offset 858068.183303 sec
[root@localhost ~]# date
Thu Feb 26 01:51:01 EST 2015
[root@localhost ~]# ntpdate 2.cn.pool.ntp.org
26 Feb 01:53:12 ntpdate[6021]: adjust time server 202.112.29.82 offset 0.010526 sec
[root@localhost ~]# date
Thu Feb 26 01:53:16 EST 2015

  NTP server的主要配置文件为/etc/ntp.conf,没有修改过的ntp。conf文件内同如下:

这方面的文章网上有很多,讲的也很详细,主要就是修改/etc/init.d/ntp.conf文件,我稍作了修改,加了两行:

server 210.72.145.44

server cn.pool.ntp.org

之后我就可以同步时间了,有人加了这么一行

restrict 192.168.1.1mask 255.255.255.0 nomodify

我没有加,但依然成功,看了下配置文件有这第一行

restrict ::1

可能这一行就包含那一行的意思吧!仅仅是猜测。下面给出一个样本加注释,仅供参考:

# 1. 关于权限设定部分
#   权限的设定主要以 restrict 这个参数来设定,主要的语法为:
#   restrict IP mask netmask_IP parameter
#   其中 IP 可以是软件地址,也可以是 default ,default 就类似 0.0.0.0
#   至于 paramter 则有:
#   ignore :关闭所有的 NTP 联机服务
#   nomodify:表示 Client 端不能更改 Server 端的时间参数,不过,

#   Client 端仍然可以透过 Server 端来进行网络校时。
#   notrust :该 Client 除非通过认证,否则该 Client 来源将被视为不信任网域
#   noquery :不提供 Client 端的时间查询

#   notrap :不提供trap这个远程事件登入

#  如果 paramter 完全没有设定,那就表示该 IP (或网域)“没有任何限制”

restrict default nomodify notrap noquery # 关闭所有的 NTP 要求封包
restrict 127.0.0.1    #这是允许本级查询
restrict 192.168.0.1 mask 255.255.255.0 nomodify
#在192.168.0.1/24网段内的服务器就可以通过这台NTP Server进行时间同步了
# 2. 上层主机的设定
#  要设定上层主机主要以 server 这个参数来设定,语法为:
#  server [IP|HOST Name] [prefer]
#  Server 后面接的就是我们上层 Time Server 啰!而如果 Server 参数
#  后面加上 perfer 的话,那表示我们的 NTP 主机主要以该部主机来作为
#  时间校正的对应。另外,为了解决更新时间封包的传送延迟动作,
#  所以可以使用 driftfile 来规定我们的主机
#  在与 Time Server 沟通时所花费的时间,可以记录在 driftfile 
#  后面接的文件内,例如下面的范例中,我们的 NTP server 与 
#  cn.pool.ntp.org联机时所花费的时间会记录在 /etc/ntp/drift文件内
server 0.pool.ntp.org

server 1.pool.ntp.org

server 2.pool.ntp.org

server cn.pool.ntp.org prefer

#其他设置值,以系统默认值即可

server  127.127.1.0     # localclock

fudge   127.127.1.0 stratum 10

driftfile /var/lib/ntp/drift
broadcastdelay  0.008
keys /etc/ntp/keys

总结一下,restrict用来设置访问权限,server用来设置上层时间服务器,driftfile用来设置保存漂移时间的文件。

[root@localhost ~]# more /etc/ntp.conf

 

# For more information about this file, see the man pages

配置和运行NTP Server
现在我们就来创建NTP的配置文件了, 它就是/etc/ntp.conf. 我们只需要加入上面的NTP Server和一个driftfile就可以了

# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).

# vi /etc/ntp.conf
server 0.uk.pool.ntp.org
server 1.uk.pool.ntp.org
driftfile /var/lib/ntp/ntp.drift

 

####非常的简单. 接下来我们就启动NTP Server,并且设置其在开机后自动运行

driftfile /var/lib/ntp/drift

####两种启动方式都可以
[root@localhost ~]# /etc/init.d/ntpd start
[root@localhost ~]# chkconfig --level 35 ntpd on
[root@localhost ~]# service ntpd start
Starting ntpd:                                             [  OK  ]
[root@localhost ~]# watch ntpq -p
[root@localhost ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset 

 

jitter

 gus.buptnet.edu 202.112.10.60    3 u   15   64    3   88.266    8.172   0.832
 ns1.verd.co.id  202.162.32.12    3 u   14   64    3  210.501  -13.741   2.086
 ktdns.cdnetwork 131.107.13.100   2 u   12   64    3   76.944    7.119   2.529
[root@localhost ~]# date
Thu Feb 26 01:58:51 EST 2015
现在我就来解释一下其中的含义
remote: 它指的就是本地机器所连接的远程NTP服务器
refid: 它指的是给远程服务器(e.g. gus.buptnet.edu)提供时间同步的服务器
st: 远程服务器的级别. 由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端. 所以服务器从高到低级别可以设定为1-16. 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的.
t: 这个.....我也不知道啥意思^_^
when: 我个人把它理解为一个计时器用来告诉我们还有多久本地机器就需要和远程服务器进行一次时间同步
poll: 本地机和远程服务器多少时间进行一次同步(单位为秒). 在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围.之后poll值会逐渐增大,同步的频率也就会相应减小
reach: 这是一个八进制值,用来测试能否和服务器连接.每成功连接一次它的值就会增加
delay: 从本地机发送同步要求到服务器的round trip time
offset: 这是个最关键的值, 它告诉了我们本地机和服务器之间的时间差别. offset越接近于0,我们就和服务器的时间越接近
jitter: 这是一个用来做统计的值. 它统计了在特定个连续的连接数里offset的分布情况. 简单地说这个数值的绝对值越小我们和服务器的时间就越精确
那么大家细心的话就会发现两个问题: 第一我们连接的是0.uk.pool.ntp.org为什么和remote server不一样? 第二那个最前面的+和*都是什么意思呢?
第一个问题不难理解,因为NTP提供给我们的是一个cluster server所以每次连接的得到的服务器都有可能是不一样.同样这也告诉我们了在指定NTP Server的时候应该使用hostname而不是IP
第二个问题和第一个相关,既然有这么多的服务器就是为了在发生问题的时候其他的服务器还可以正常地给我们提供服务.那么如何知道这些服务器的状态呢? 这就是第一个记号会告诉我们的信息
*
它告诉我们远端的服务器已经被确认为我们的主NTP Server,我们系统的时间将由这台机器所提供

  • 它将作为辅助的NTP Server和带有*号的服务器一起为我们提供同步服务. 当*号服务器不可用时它就可以接管
  • 远程服务器被clustering algorithm认为是不合格的NTP Server
    x
    远程服务器不可用
    了解这些之后我们就可以实时监测我们系统的时间同步状况了

NTP安全设置
运行一个NTP Server不需要占用很多的系统资源,所以也不用专门配置独立的服务器,就可以给许多client提供时间同步服务, 但是一些基本的安全设置还是很有必要的
那么这里一个很简单的思路就是第一我们只允许局域网内一部分的用户连接到我们的服务器. 第二个就是这些client不能修改我们服务器上的时间
在/etc/ntp.conf文件中我们可以用restrict关键字来配置上面的要求
首先我们对于默认的client拒绝所有的操作
restrict default kod nomodify notrap nopeer noquery
然后允许本机地址一切的操作
restrict 127.0.0.1
最后我们允许局域网内所有client连接到这台服务器同步时间.但是拒绝让他们修改服务器上的时间
restrict 192.168.1.0 mask 255.255.255.0 nomodify
把这三条加入到/etc/ntp.conf中就完成了我们的简单配置. NTP还可以用key来做authenticaiton,这里就不详细介绍了

只要在client的ntp.conf加上ntp server地址就可以了
server 192.168.2.249

  1. 配置文件中的driftfile是什么?
    我们每一个system clock的频率都有小小的误差,这个就是为什么机器运行一段时间后会不精确. NTP会自动来监测我们时钟的误差值并予以调整.但问题是这是一个冗长的过程,所以它会把记录下来的误差先写入driftfile.这样即使你重新开机以后之前的计算结果也就不会丢失了
  2. 如何同步硬件时钟?
    NTP一般只会同步system clock. 但是如果我们也要同步RTC的话那么只需要把下面的选项打开就可以了

vi /etc/sysconfig/ntpd  添加 SYNC_HWCLOCK=yes 这样,就可以让硬件时间与系统时间一起同步。

在建立好ntp服务以后,可以用2个工具命令对ntp服务进行管理。
一个是ntpq是一个交互式应用命令,在它的下面有很多的子命令可以供大家使用.使用peers可以查看同步进程。如果还需要其他的命令可以输入help 进行查看。还有一个工具命令是ntpdate这个命令一般用于ntp的客户端使用。可以在/var/adm/messages中看到ntp的同步信息的情况。如果需要更加详细的ntpq和ntpdate的信息可以使用man帮助进行查询。
ntpdate与ntpd的关系类似于snmpwalk与snmpd的关系,一个客户端,一个服务端。

 

# Permit time synchronization with our time source, but do not

ntpd与ntpdate的区别

之前配置ntpd的时候搜到一句话,印象很深刻,也觉得很有标题党的效果,就借鉴为标题了:
“我认为有几种人是必须不招聘/裁掉的: 1 用ntpdate代替ntpd的人”
但具体原因不太懂,总觉得还是用ntpdate比较方便。
今天问了红帽技术支持,对方的解释是:
ntpd在实际同步时间时是一点点的校准过来时间的,最终把时间慢慢的校正对。而ntpdate不会考虑其他程序是否会阵痛,直接调整时间。
一个是校准时间,一个是调整时间。
以下是一个形象的假设:
linuxtone限制用户注册1小时才能发帖。
数据库服务器在 10:00分接受了我的注册邀请;
10:03分,ntpdate将数据库时间强行改成9:35分;
然后10:05分(9:37分)我尝试发帖,系统判断我注册时间是否满一小时会使用:9:37

  • 10:00
    最后电脑就逻辑混乱了。。。
    类似的帖子网上也有很详细的说明,贴出来给大家看看:
    时钟的跃变,有时候会导致很严重的问题。许多应用程序依赖连续的时钟??毕竟,这是一项常见的假定,即,取得的时间是线性的,一些操作,例如数据库事务,通常会地依赖这样的事实:时间不会往回跳跃。
    不幸的是,ntpdate调整时间的方式就是我们所说的”跃变“:在获得一个时间之后,ntpdate使用settimeofday(2)设置系统时间,这有几个非常明显的问题:
    第 一,这样做不安全。ntpdate的设置依赖于ntp服务器的安全性,攻击者可以利用一些软件设计上的缺陷,拿下ntp服务器并令与其同步的服务器执行某 些消耗性的任务。由于ntpdate采用的方式是跳变,跟随它的服务器无法知道是否发生了异常(时间不一样的时候,唯一的办法是以服务器为准)。
    第二,这样做不精确。一旦ntp服务器宕机,跟随它的服务器也就会无法同步时间。与此不同,ntpd不仅能够校准计算机的时间,而且能够校准计算机的时钟。
    永利平台娱乐,第三,这样做不够优雅。由于是跳变,而不是使时间变快或变慢,依赖时序的程序会出错(例如,如果ntpdate发现你的时间快了,则可能会经历两个相同的时刻,对某些应用而言,这是致命的)。
    因而,唯一一个可以令时间发生跳变的点,是计算机刚刚启动,但还没有启动很多服务的那个时候。其余的时候,理想的做法是使用ntpd来校准时钟,而不是调整计算机时钟上的时间。
    NTPD 在和时间服务器的同步过程中,会把 BIOS 计时器的振荡频率偏差??或者说 Local Clock 的自然漂移(drift)??记录下来。这样即使网络有问题,本机仍然能维持一个相当精确的走时。
    ##############
    最后提醒一下使用vmware的各位,因为虚拟机的时钟不太正常,比正常速度慢好多秒,所以在虚拟机上测试ntpd很难得到理想的结果,我当年就是为这个问题耽搁了好几天。。

# 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

TAG标签:
版权声明:本文由永利平台娱乐发布于IT交流,转载请注明出处:一般使用ntp服务来同步不同机器的时间,并允许