C/C++教程

NTP\rsync+inotify

本文主要是介绍NTP\rsync+inotify,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

NTP网络时间协议

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远程同步

rsync(Remote Sync): 是一款开源,快速,多功能的可实现本地或远程主机数据同步与增量备份的优秀工具。(数据同步与备份的工具)可使本地主机不同分区或目录之间及本地和远程两台主机之间的数据快速同步,远程备份等功能 。

在同步备份时,默认情况下,rsync通过其独特的“quick check”算法,仅同步大小或者最后修改时间发生变化的文件或目录(也可根据权限,属主等变化同步,需要制定参数)。甚至是只同步一个文件里变化的内容部分,所以可以实现快速的同步数据的功能。

提示:传统的cp,scp工具拷贝每次均为完整拷贝,而rsync除了完整拷贝,还具备增量拷贝的功能,因此更加灵活。

rsync特性

1)支持拷贝特殊文件如链接,设备文件等

2)可以有排除指定文件或目录同步的功能

3)可以保持原来文件或目录的权限,时间,软硬链接等所有属性均不改变。

4)可实现增量同步,即只同步发生变化的数据,因此数据传输效率更高

生产场景

1)借助cron定时任务+rsync把所有客户服务器数据同步到备份服务器

2)针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案

3)通过本地打包备份,然后rsync结合inotify(监控)应用把全网数统一备份到一个固定存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果

4)定期将IDC机房的数据备份公司的内部服务器,防止机房地震及火灾问题 导致数据丢失

实时同步,解决存储服务器的单点问题

rsync总结

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

rsync+inotify实时同步

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

#安装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使用方式

命令格式: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  &
这篇关于NTP\rsync+inotify的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!