NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC(世界统一时间),再配合各个时区的偏移调整就能实现精准同步对时功能。
chrony是网络时间协议NTP的实现方式, Chrony是一个开源的自由软件 ,在RHEL7/CentOS7操作系统已经是默认安装服务,它能保持系统时间与NTP时间服务器的时间保持同步,让时间始终保持同步。
软件包:chrony
服务名:chronyd
命令程序:chronyc
配置文件:/etc/chrony.conf
安装chrony程序
#CentOS7/RHEL7以默认安装 [root@localhost ~]# rpm -q chrony chrony-3.2-2.el7.x86_64 #查看服务运行状态 [root@localhost ~]# systemctl status chronyd #启动chronyd服务&&设置服务随机期自 [root@localhost ~]# systemctl start chronyd [root@localhost ~]# systemctl enable chronyd
#修改/etc/chrony.conf配置文件 [root@localhost ~]# vim /etc/chrony.conf # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #配置NTP时间服务器 server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst # Record the rate at which the system clock gains/losses time. #记录系统时钟获得/丢失时间的速率至drift文件中 driftfile /var/lib/chrony/drift # Allow the system clock to be stepped in the first three updates # if its offset is larger than 1 second. # 默认情况下,chronyd通过减慢或加快时钟速度来逐渐调整时钟。如果时钟与实际时间偏差太大,则需要很长时间才能纠正错误。这种方法叫做步进时钟(时间跳变)。 # 此处表示如果调整值大于1000秒,则这将使系统时钟步进,但仅在前10个时钟更新中。 makestep 1000 10 # Enable kernel synchronization of the real-time clock (RTC). # 启用RTC(实时时钟)的内核同步 rtcsync # Enable hardware timestamping on all interfaces that support it. #hwtimestamp * # Increase the minimum number of selectable sources required to adjust # the system clock. #minsources 2 # Allow NTP client access from local network. # 只允许192.168.网段的客户端进行时间同步 #allow 192.168.0.0/16 # Serve time even if not synchronized to a time source. # NTP服务器不可用时,采用本地时间作为同步标准 #local stratum 10 # Specify file containing keys for NTP authentication. # 指定包含NTP验证密钥的文件 #keyfile /etc/chrony.keys # Specify directory for log files. # 指定日志文件的目录 logdir /var/log/chrony # Select which information is logged. #将对系统增益或损耗率的估计值以及所做的任何转换记录的更改记录到名为的文件中tracking.log #log measurements statistics tracking
#查看时间同步源 [root@localhost ~]# chronyc sources -n 210 Number of sources = 4 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 203.107.6.88 2 6 17 32 +938us[ -17ms] +/- 24ms ^- time.cloudflare.com 3 6 17 31 +56ms[ +56ms] +/- 163ms ^- ns1.luns.net.uk 2 6 17 30 +26ms[ +26ms] +/- 166ms ^? ntp7.flashdance.cx 0 6 0 - +0ns[ +0ns] +/- 0ns
字段 | 说明 |
---|---|
M | 这表示信号源的模式。^表示服务器,=表示对等方,并#指示本地连接的参考时钟 |
S | 此列指示源的状态。“ *”表示chronyd当前同步到的源。“ +”表示可接受的来源,已与所选来源合并。“-”表示组合算法排除的可接受源。“?” 指示已失去连接性或其数据包未通过所有测试的源。“ x”表示一个时钟,它chronyd认为是虚假行情(其时间与大多数其他来源不一致)。“〜”表示时间似乎变化太大的来源。“?” 启动时也会显示条件,直到从中至少收集了3个样本为止 |
Name/IP address | 这显示了IP源的名称或地址 |
Stratum | 这显示了来源的层次,如其最近收到的样本中所报告的那样。层1表示具有本地连接的参考时钟的计算机。与第1层计算机同步的计算机位于第2层。与第2层计算机同步的计算机位于第3层,依此类推 |
Poll | 这显示轮询源的速率,以秒为单位的间隔的以2为底的对数。因此,值为6表示每64秒进行一次测量。chronyd 根据当前情况自动更改轮询速率 |
Reach | 这显示了源的范围寄存器以八进制数字打印。该寄存器有8位,并在从源接收或丢失的每个数据包上进行更新。值377表示已收到所有最后八次传输的有效回复 |
LastRx | 此列显示多久以前从源接收到最后一个样本。通常以秒为单位。这些信件m,h,d或y表示分钟,小时,天或数年。10年的值表示尚未从此来源接收到任何样本 |
Last sample | 此列显示上次测量时本地时钟与源之间的偏移。方括号中的数字表示实际测得的偏移量。这可以以ns(表示纳秒),us(表示微秒),ms(表示毫秒)或s(表示秒)作为后缀。方括号左侧的数字表示原始测量值,已调整为允许此后施加于本地时钟的任何摆度。+/-指示器后面的数字表示测量中的误差范围。正偏移表示本地时钟位于源时钟之前 |
#立刻手动同步时间 [root@localhost ~]# chronyc -a makestep 200 OK #检查时间是否同步 [root@localhost ~]# chronyc tracking Reference ID : CB6B0658 (203.107.6.88) #同步到的服务器ID与IP地址 Stratum : 3 Ref time (UTC) : Wed Jun 23 15:26:55 2021 System time : 0.001027327 seconds fast of NTP time Last offset : +0.001285393 seconds RMS offset : 0.016554436 seconds Frequency : 9.343 ppm slow Residual freq : -0.813 ppm Skew : 1.096 ppm Root delay : 0.038546667 seconds Root dispersion : 0.000631557 seconds Update interval : 64.2 seconds Leap status : Normal
字段 | 说明 |
---|---|
Reference ID | 同步到的服务器ID与IP地址 |
Stratum | 层次:表示带有附加参考时钟的计算机距计算机的跳数。这样的计算机是第1层计算机,因此示例中的计算机距离两跳(也就是说,abc是第2层,并且与第1层同步) |
Ref time (UTC) | 这是处理来自参考源的最后一次测量的时间(UTC) |
System time | 在正常操作中,chronyd步进系统时钟,因为时标的任何跳跃都可能对某些应用程序产生不利影响。取而代之的是,通过稍微加快或降低系统时钟的速度来纠正系统时钟中的任何错误,直到错误被消除,然后恢复到系统时钟的正常速度 |
Last offset | 最后偏移:上次时钟更新时本地偏移量 |
RMS offset | 偏移值的长期平均值 |
Frequency | “频率”是如果chronyd不对其进行校正,则系统时钟出错的速率。用ppm(百万分之一)表示。例如,值1 ppm表示当系统时钟认为它已提前1秒时,它实际上已相对于真实时间提前了1.000001秒。 |
Residual freq | 显示了当前选定参考源的“剩余频率”。这反映了来自参考源的测量结果表明该频率应与当前使用的频率之间的任何差异 |
Skew | 频率上的估计误差范围 |
Root delay | 这是到第1层计算机的网络路径延迟的总和,该计算机最终从该第1层计算机同步。根延迟值以纳秒分辨率打印。在某些极端情况下,该值可以为负。(这可能发生在对称的对等方排列中,其中计算机的频率彼此不跟踪,并且相对于每台计算机的周转时间,网络延迟非常短。) |
Root dispersion | 根扩散:这是通过所有计算机累积到第1层计算机的总色散,最终从第1层计算机对其进行同步。色散是由于系统时钟分辨率,统计测量变化等引起的。根色散值以纳秒分辨率打印 |
Update interval | 更新间隔 |
Leap status | 这是飞跃状态,可以是“正常”,“插入第二”,“删除第二”或“未同步 |
搭建一台NTP服务器,同步阿里云时间,当阿里云不可用时,使用本地时间,其他服务器同步这台服务器上的时间,确保时间一致。
[root@localhost ~]# vim /etc/chrony.conf # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). # 注释其他server开头的配置,添加阿里云NTP公共时间同步服务器 #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst #添加阿里NTP服务 server ntp.aliyun.com iburst server ntp1.aliyun.com iburst #允许所有网段客户端进行时间同步 allow 0.0.0.0/0 #NTP服务器不可用时,采用本地时间作为同步标准 local stratum 10 #重启chronyd服务 [root@localhost ~]# systemctl restart chronyd #查看时间同步源 [root@localhost ~]# chronyc sources -n 210 Number of sources = 2 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 203.107.6.88 2 6 17 43 -87us[-3038us] +/- 22ms ^+ 120.25.115.20 2 6 33 41 +4255us[+4255us] +/- 24ms
#查看chrony软件包是否安装 [root@host26 ~]# rpm -q chrony chrony-3.2-2.el7.x86_64 #修改配置文件/etc/chrony.conf [root@host26 ~]# vim /etc/chrony.conf # 注释其他server开头的配置,添加本地NTP公共时间同步服务器 server 192.168.0.24 iburst #重启chronyd服务&&设置服务随机自启 [root@host26 ~]# systemctl restart chronyd [root@host26 ~]# systemctl enable chronyd [root@host26 ~]# systemctl status chronyd #查看时间同步源 [root@host26 ~]# chronyc sources -n 210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^? 192.168.0.24 0 7 0 - +0ns[ +0ns] +/- 0n #查看系统时间 [root@host26 ~]# date
rsync(Remote Sync): 是一款开源,快速,多功能的可实现本地或远程主机数据同步与增量备份的优秀工具。(数据同步与备份的工具)可使本地主机不同分区或目录之间及本地和远程两台主机之间的数据快速同步,远程备份等功能 。
在同步备份时,默认情况下,rsync通过其独特的“quick check”算法,仅同步大小或者最后修改时间发生变化的文件或目录(也可根据权限,属主等变化同步,需要制定参数)。甚至是只同步一个文件里变化的内容部分,所以可以实现快速的同步数据的功能。
提示:传统的cp,scp工具拷贝每次均为完整拷贝,而rsync除了完整拷贝,还具备增量拷贝的功能,因此更加灵活。
1)支持拷贝特殊文件如链接,设备文件等
2)可以有排除指定文件或目录同步的功能
3)可以保持原来文件或目录的权限,时间,软硬链接等所有属性均不改变。
4)可实现增量同步,即只同步发生变化的数据,因此数据传输效率更高
1)借助cron定时任务+rsync把所有客户服务器数据同步到备份服务器
2)针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案
3)通过本地打包备份,然后rsync结合inotify(监控)应用把全网数统一备份到一个固定存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果
4)定期将IDC机房的数据备份公司的内部服务器,防止机房地震及火灾问题 导致数据丢失
实时同步,解决存储服务器的单点问题
rsync就是会同步指定的两端目录之间的数据,这个数据可以是特殊的数据。同步之前就先进行两端的数据的比对,只会同步两者之间不同的部分,并保留文件原本的属性。并且支持匿名的方式进行同步传输。所以rsync在备份、同步上就会较为快速。
rsync官方地址: http://rsync.samba.org/
安装方式:源码安装、二进制RPM安装
#安装rsync [root@master ~]# yum -y install rsync
命令格式1:rsync 选项… 本地目录A 本地目录B #同步整个目录
命令格式2:rsync 选项… 本地目录A/ 本地目录B #只同步目录下的数据
常用选项
选项 | 作用 |
---|---|
-n | 测试同步过程,不做实际修改 |
--delete | 删除目标目录下多余的文档 |
-v | 显示详细操作信息 |
-z | 传输过程中启用压缩/解压缩 |
-a | 递归同步,包含目录/字子目录及所有文件、保留符号链接文件、保留文件权限、时间标记、保留文件的属主/属组标记、保留设备文件及其他特殊文件 |
#在本地创建2个目录使用rsync实现数据同步 [root@master ~]# mkdir /test1 /opt/test2 #将/test1目录同步至/opt/test2目录下(同步整个目录) [root@master ~]# rsync -avz /test1 /opt/test2 sending incremental file list #发送增量文件列表 test1/ sent 59 bytes received 20 bytes 158.00 bytes/sec total size is 0 speedup is 0.00 #sent:发送字节59 #received:接收字节20 #158.00:字节/秒 #total:总大小为0 #speedup is:加速值为0.00 #查看目录是否同步成功 [root@master ~]# ls /opt/test2/ test1 #在/test1目录下创建测试文件 [root@master ~]# touch /test1/xx.txt #同步/test1/目录下的数据至/opt/test2目录下 [root@master ~]# rm -rf /opt/test2/* [root@master ~]# rsync -avz /test1/ /opt/test2 #查看数据是否同步 [root@master ~]# ls /opt/test2 xx.txt #在/test1目录下创建新文件验证是否只同步新增加的数据 [root@master ~]# touch /test1/abc.txt [root@master ~]# ls /test1 abc.txt xx.txt #执行同步 [root@master ~]# rsync -avz /test1/ /opt/test2 sending incremental file list ./ abc.txt #只同步了新增加的文件 sent 130 bytes received 38 bytes 336.00 bytes/sec total size is 0 speedup is 0.00 [root@master ~]# ls /opt/test2 abc.txt xx.txt #向xx.txt文件增加内容验证同步 [root@master ~]# echo xxoo > /test1/xx.txt [root@master ~]# cat /test1/xx.txt xxoo #执行同步 [root@master ~]# rsync -avz /test1/ /opt/test2 sending incremental file list xx.txt #只同步变化的文件 sent 135 bytes received 35 bytes 340.00 bytes/sec total size is 5 speedup is 0.03 [root@master ~]# cat /opt/test2/xx.txt xxoo #在执行同步时,如果目标目录下的内容发生变化,源目录不会跟着改变 [root@master ~]# cd /opt/test2 [root@master test2]# touch test{1..100} #执行同步操作 [root@master test2]# rsync -avz /test1/ /opt/test2 sending incremental file list ./ #没有任何的变化,既没同步任何的数据 sent 93 bytes received 19 bytes 224.00 bytes/sec total size is 5 speedup is 0.04 #执行同步时,删除目标目录下多余的文件 [root@master test2]# rsync -avz --delete /test1/ /opt/test2 #查看test2目录 [root@master test2]# ls abc.txt xx.txt
命令格式1:rsync 本地目录 用户名@对方IP地址:/目标目录 #同步源目录本身
命令格式2:rsync 本地目录/ 用户名@对方IP地址:/目标目录 #同步源目录下内容
#客户端主机安装rsync程序[root@client ~]# yum -y install rsync#将本地主机/test1目录下内容同步到其他主机[root@master ~]# rsync -avz /test1/ root@192.168.0.28:/optroot@192.168.0.28's password: sending incremental file list./abc.txtxx.txtsent 174 bytes received 57 bytes 154.00 bytes/sectotal size is 5 speedup is 0.02'#远程主机查看是否同步成功[root@client ~]# ls /optabc.txt xx.txt[root@client ~]# cat /opt/xx.txt xxoo#在本地主机/test1目录下创建文件执行同步[root@master ~]# touch /test1/test{1..10}[root@master ~]# ls /test1abc.txt test10 test3 test5 test7 test9test1 test2 test4 test6 test8 xx.txt[root@master ~]# rsync -avz /test1/ root@192.168.0.28:/optroot@192.168.0.28's password: sending incremental file list./test1test10test2test3test4test5test6test7test8test9'#远程主机验证是否同步成功[root@client ~]# ls /optabc.txt test10 test3 test5 test7 test9test1 test2 test4 test6 test8 xx.txt
inotify 是Linux内核用于通知用户空间的程序文件系统变化的机制,如文件增加、删除等事件可以立刻让用户得知。
inotify官方地址:http://download.sf.net/inotify-tools/
#配置同步主机之间ssh免密登录[root@master ~]# ssh-keygen[root@master ~]# ssh-copy-id root@192.168.0.28[root@master ~]# ssh 192.168.0.28[root@client ~]# exit
#安装inotify依赖包(gcc)[root@master ~]# yum -y install gcc#解压源码包[root@master ~]# tar -xf inotify-tools.tar.gz 、[root@master ~]# cd tools/[root@master tools]# lsinotify-tools-3.13.tar.gz other[root@master tools]# tar -xf inotify-tools-3.13.tar.gz [root@master tools]# cd inotify-tools-3.13[root@test inotify-tools-3.13]# ./configure --prefix=/usr/local/inotify #指定安装路径[root@test inotify-tools-3.13]# make[root@test inotify-tools-3.13]# make install[root@master ~]# ls /usr/local/inotify/bin include lib share[root@master ~]# ls /usr/local/inotify/bininotifywait(命令) inotifywatch#将命令程序链接到PATH路径下,方便后期的使用[root@master ~]# ln -s /usr/local/inotify/bin/inotifywait /sbin
命令格式:inotify 选项 目标文件
常用选项
选项 | 功能 |
---|---|
-m | 持续监控,捕获一个事件后不退出 |
-r | 递归监控,包括子目录 |
-q | 减少屏幕输出信息 |
-e | 指定监控的:modify(修改),move(移动、改名),create(创建),delete(删除),attrib(权限) |
#监控本机/test1目录 [root@master ~]# vim rsync.sh #!/bin/bash while inotifywait -rq -e modify,create,delete,attrib /test1/ do rsync -avz --delete /test1/ root@192.168.0.28:/opt done #实现从本地到远程的Web目录推送 #源目标:/var/www/html #参考脚本 #!/bin/bash FROM_DIR=“/var/www/html/” RSYNC_CMD=“rsync –za --delete $FROM_DIR root@192.168.0.211:/var/www/html” while inotify –rqq –e modify,move,create,delete,attrib $FROM_DIR #q不显示输出 do $RSYNC_CMD done &