云计算运维

Windows Server 2003 - Windows Server 2019 系统工具,Linux系统脚本,Mysql、Nginx、PHP、Redis、K8S、Seafile、Weblogic 、Jenkins、DNS、DHCP、FTP、IIS、Zookeeper、Rabbitmq、Oracle、Tomcat、Mavrn等服务搭建维护,请关注我.

rsync+inotify实时同步环境部署


rsync

作用:

实现文件的备份

备份位置可以是当前主机,也可以是远程主机

备份过程可以是完全备份,也可以是增量备份

功能:

1、类似于cp的复制功能

 将本地主机的一个文件复制到另一个位置下。

2、将本地主机的文件推送到远程主机,也可以从远程主机拉取文件到本地。

3、显示文件列表

使用模式

shell模式

本地复制功能

远程shell模式

可以利用ssh来实现数据的加密到远程主机

守护进程(服务器模式)

rsync工作在守护进程模式下

列表模式

ls 仅仅显示内容,不做操作

确保各个主机的时间同步

[root@ntp ~]# crontab -l

* * * * * /usr/sbin/ntpdate -u ntp1.aliyun.com &>/dev/null

* * * * * /usr/sbin/hwclock -w &>/dev/null

[root@samba ~]# crontab -l

* * * * * /usr/sbin/ntpdate -u 192.168.85.132 & > /dev/null

[root@backup ~]# crontab -l

* * * * * /usr/sbin/ntpdate -u 192.168.85.132 & > /dev/null

rsync+inotify

rsync+sersync

rsync只负责传递文件到远程主机

inotiyf/sersync:将发生了改变的文件找出来

sync模式一

格式:Local:  rsync [OPTION...] SRC... [DEST]

选项:

-p :复制文件的过程中,保持文件的属性不变

-v :显示复制过程信息

-a :使用归档模式,(复制目录必须使用此选项)

-z :在传输过程中,以压缩方式进行传输

-e :  "ssh [-p22]" :指定所使用的传输通道

-r :递归复制

模式二、远程shell模式

[root@backup ~]# rsync -avz -e "ssh -p22" /tmp/passwd root@192.168.85.131:/tmp/

[root@backup ~]# rsync -avz -e "ssh -p22" /tmp/passwd root@samba:/tmp/

[root@backup ~]# rsync -avz -e "ssh -p22" /tmp/passwd root@ntp:/tmp/

rsync同步时,会首先对比源和目的下的文件的校验码,只有当特征码不同时,才会传递。

重点说明:工作中通常都是用rsync+ssh密钥认证方式,目的是为了用免密码登录。

模式三、守护进程模式

安例:将ntp(132)和samba(131)上的数据备份到backup

准备工作

关闭selinux

关闭防火墙

配置时间同步

第一步:配置服务器端   配置backup上的rsync,让其工作在守护进程模式。

1、修改配置文件 (默认不存在)

[root@backup ~]# vim /etc/rsyncd.conf 

rsyncd.conf的基本构成

全局参数

[模块1]

模块参数……

[模块2]

模块参数……

全局参数

pid file:指定rsync进程的pid文件的路径和名称

lock file:指定rsync进程的锁文件的路径和名称

log file:rsync的日志文件路径和名称

uid:指定rsync进程以什么身份在后台运行(必须是系统用户)

gid:指定rsync进程以什么组身份在后台运行

port:端口号

模块参数

path:指定备份目录的路径

use chroot:是否将用户锁定在家目录中

max connections:指定可以进行同时连接的用户的最大数量

read only:只读

write only:只写

list:true|false :设置是否可以显示全部的模块列表

auth users:指定访问模块需要使用的用户名,这里的是虚拟用户。(不是存在于/etc/passwd)

secrets file:指定保存虚拟用户名和密码的数据库文件

hosts allow:指定可以访问模块或者rsync服务器端的IP地址

hosts deny:黑名单

补充:两个参数都没用的时候,那么所有用户都可以任意访问

只有allow,那么仅仅允许白名单的用户可以访问模块

只有deny,那么仅仅黑名单中的用户禁止访问模块

两个参数都存在,优先检查白名单,如果匹配成功,则允许访问,如果失败,就去检查黑名单。成功则禁止访问,如果都没有匹配成功,则允许访问。

timeout:指定空闲超时时间。

[root@backup ~]# vim /etc/rsyncd.conf 

uid = rsync

gid = rsync

use chroot = no

max connections = 100

timeout = 100

pid file = /var/lock/rsync.pid

lock file = /var/lock/rsync.lock

log file = /var/log/rsync.log

[mod1]

path = /rsync/samba

read only = false

hosts allow = 192.168.85.0/24

auth users = vuser1

secrets file = /rsync/rsync.passwd

list = false

[mod2]

path = /rsync/ntp

read only = false

hosts allow = 192.168.85.0/24

auth users = vuser2

secrets file = /rsync/rsync.passwd

list = false

2、创建目录

[root@backup ~]# mkdir -pv /rsync/{samba,ntp}

chown rsync.rsync /rsync/{samba,ntp}

3、创建运行rsync的系统用户

[root@backup ~]# groupadd -r rsync

[root@backup ~]# useradd -r -s /sbin/nologin -g rsync rsync

4、启动rsync

[root@backup ~]# rsync --daemon

[root@backup ~]# rsync --daemon

[root@backup ~]# failed to create pid file /var/lock/rsync.pid: File exists

补充:rsync默认配置文件/etc/rsyncd.conf

如果想使用其他位置的配置文件,可以--config=/path/to/confFile

5、查看rsync端口(默认873)

[root@backup ~]# netstat -an | grep 873

tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN     

tcp6       0      0 :::873                  :::*                    LISTEN 

6、创建虚拟用户文件以及虚拟用户

[root@backup ~]# cd /rsync/

root@backup rsync]# touch rsync.passwd

[root@backup rsync]# chmod 600 rsync.passwd   <<<<< 该文件的权限必须是600

[root@backup rsync]# vim rsync.passwd 

vuser1:123

vuser2:123

补充:虚拟用户就是这个文件中的记录

一个用户占一行,冒号前是用户名,冒号后是用户的密码

第二步:配置客户端:

使用格式

       rsync [options] [user@]host::moduleName /path/

rsync [options]  /path/[user@]host::moduleName

[root@ntp home]# rsync -avz /home/ vuser2@192.168.85.133::mod2

服务端

[root@backup ntp]# ll

客户端免密码

[root@ntp home]# vim /etc/rsync.passwd

123

rsyncd.conf   rsync.passwd  

[root@ntp home]# chmod 600 /etc/rsync.passwd 

使用rsync传递文件

[root@ntp home]# rsync -avz /home/ vuser2@192.168.85.133::mod2 --password-file=/etc/rsync.passwd 

说明:

--password-file 系统可以自动从该位置下指定密码

总结:

服务器端的配置

1、创建配置文件

2、创建密码文件,修改权限为600

3、创建系统用户

4、创建模块对应的目录,修改目录的属主组为系统用户。

5、启动Damon模式

客户端

1、创建虚拟用户密码文件,修改权限为600

2、向模块传递文件或者从目录拉取文件

如果出现错误

第一步:检查日志

第二步:检查selinux、iptables是否启动

第三步:检查虚拟用户的文件名称是否正确、权限是否正确

重启rsync 

[root@backup ntp]# killall rsync

没有killall 的话安装

[root@backup ntp]# yum install psmisc -y 

[root@backup ntp]# ss -tnl | grep 873

[root@backup ntp]# rsync --daemon

编写rsync服务管理脚本

[root@backup ntp]# cd /etc/init.d/

补充:

--delete:让客户端和服务器端的文件完全一致

--exclude:在进行文件传送的时候,排除指定的文件

排除实现方式:方式1:排除一个文件

[root@ntp home]# touch /home/{1..10}.txt

[root@ntp home]# rsync -avz /home/ --exclude=3.txt  vuser2@192.168.85.133::mod2

方式2:排除多个文件(客户端)

--exclude{ }

[root@ntp home]# touch /home/{11..15}.txt

[root@ntp home]# rsync -avz /home/ --exclude={11,12}.txt  vuser2@192.168.85.133::mod2

方式3:通配符

[root@ntp ~]# rsync -avz /home/ --exclude=*.txt  vuser2@192.168.85.133::mod2

排除实现方式(服务端)

在配置文件中添加一个关键字exclude,这里指定要排除文件列表,列表中的内容以空格为分隔符。

例子:exclude = q*  a.txt  *conf

完全同步的原理

在文件的传输过程中,发送方有的,会直接传输到接收方,发送方没有,但是接收方有的文件则会删除。

[root@ntp ~]# rsync -avc --delete /test/ vuser2@192.168.85.133::mod2

[root@ntp ~]# rsync -avc --delete /test/ vuser2@192.168.85.133::mod2

文件的实时同步

rsync+inotify

rsync+sersync

inotify软件

功能:可以实时监控指定目录下的文件,当文件发生了更改,则会触发事件,输出信息

监控的事件类型

创建

删除

修改

移动

……

安装inotify (客户端)

[root@ntp ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

[root@ntp ~]# yum install inotify-tools -y

[root@ntp ~]# rpm -ql inotify-tools

/usr/bin/inotifywait

/usr/bin/inotifywatch

/usr/lib64/libinotifytools.so.0

/usr/lib64/libinotifytools.so.0.4.1

/usr/share/doc/inotify-tools-3.14

/usr/share/doc/inotify-tools-3.14/AUTHORS

/usr/share/doc/inotify-tools-3.14/COPYING

/usr/share/doc/inotify-tools-3.14/ChangeLog

/usr/share/doc/inotify-tools-3.14/NEWS

/usr/share/doc/inotify-tools-3.14/README

/usr/share/man/man1/inotifywait.1.gz

/usr/share/man/man1/inotifywatch.1.gz

应用程序

/usr/bin/inotifywait:    真正实现文件监控程序

/usr/bin/inotifywatch :数据统计

inotify+rsync

inotifywait

选项

-r:递归,对目录中的文件做监控

-q:仅仅打印少量信息(打印监控事件)

-m:一直处于监控状态(默认是在前台监控)

-d:以守护进程的方式来运行(运行在后台)

-o file:将监控到的事件输出到一个文件中(默认是输出到标准输出)

-s:将错误信息输出到系统日志中(默认是将错误信息输出)

--excludei:忽略文件的大小写

-e <event>:指定要监控的事件

access:访问事件

modify:编辑事件

attrib:修改文件属性事件(修改文件的元数据)

close_write:当文件从写模式关闭的时候,会触发该事件

close_nowrite:当文件从只读模式下关闭的时候,会触发该事件

close:无论以什么方式打开文件,在关闭文件的时候,都会触发该事件

open:当文件被打开的时候,就会触发该事件

moved_to:当一个文件被移动到监控的目录下就会触发该事件

moved_from:当一个文件从监控目录下移走的时候,就会触发该事件

move:主要发生了文件的移动,就会触发该事件

moved_self:在监控目录下执行移动操作,就会触发该事件

create:创建文件的事件

delete:删除文件的事件

--timefmt<fmt>:指定输出发生这个时间点的显示格式

--format<fmt>: 指定的当发生事件以后所输出的信息,以及输出的个数

%f 输出记录发生事件的文件名

%w输出记录发生事件的文件所在的目录的绝对路径

%e:输出记录发生事件的名称(如果有多个事件,多个事件用空格分隔)

%Xe:输出记录发生事件的名称(如果有多个事件,多个事件用X分割)

%T:输出发生事件的时间(时间个格式由 --timefmt<fmt>)

[root@ntp ~]# inotifywait -mrq --timefmt "%F%T" --format '%T %w%f' -e create,delete,modify /test

2020-04-0419:27:26 /test/1

2020-04-0419:27:26 /test/2

2020-04-0419:27:26 /test/3

[root@ntp ~]# mkdir /test/{1,2,3}

[root@ntp ~]# inotifywait -mrq --timefmt "%F%T" --format '%T %w%f %e' -e create,delete,modify /test

2020-04-0419:30:28 /test/11 CREATE,ISDIR

2020-04-0419:30:28 /test/12 CREATE,ISDIR

2020-04-0419:30:28 /test/13 CREATE,ISDIR

[root@ntp ~]# mkdir /test/{11,12,13}

2020-04-0419:32:21 /test/a DELETE,ISDIR

2020-04-0419:32:33 /test/aa CREATE

[root@ntp ~]# rm -rf /test/a

[root@ntp ~]# touch /test/aa

开发inotify实时同步备份脚本

[root@ntp ~]# cat CheckFile.sh 

#!/bin/bash

#

prog="inotifywait"

events="create,delete,modify,attrib"

iopt="-mrq"

lpath="/test/"

rhost="192.168.85.133"

vuser="vuser2"

secfile="/etc/rsync.passwd"

ropt="-az --delete"

modName="mod2"

$prog $iopt --format "%w%f" -e $events $lpath | while read line 

do

rsync $ropt $lpath $vuser@$rhost::$modName --password-file=$secfile

done

测试:

[root@ntp test]# mkdir {1..10}

[root@ntp test]# touch {11..20}

[root@ntp test]# ls

1  10  11  12  13  14  15  16  17  18  19  2  20  3  4  5  6  7  8  9

[root@ntp test]# rm -rf *1*

[root@ntp test]# ls

2  20  3  4  5  6  7  8  9

[root@backup ntp]# ls

[root@backup ntp]# ls

1  10  11  12  13  14  15  16  17  18  19  2  20  3  4  5  6  7  8  9

[root@backup ntp]# ls

2  20  3  4  5  6  7  8  9

  • 分享:
评论
还没有评论
    发表评论 说点什么