第二章 网络文件复制与同步 本节课所讲内容: 2.1、网络文件复制与同步的方法 2.2、rsync+crond定时同步文件 2.3、rsync+inotify实时同步文件 2.4、rsync+sersync实时同步文件 正文部分: 2.1网络文件复制与同步的方法 2.1.1、常见备份分类 完整备份,差异备份,增量备份 完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地 差量备份:备份上次完全备份以后有变化的数据 增量备份:备份上次备份以后有变化的数据 2.1.2、rsync+inotify/rsync+sersync实时同步文件区别 1)inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来; 2)sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字 2.1.3、常用网络文件复制SCP简介 1)scp:基于openssl的网络文件拷贝 拷贝文件:[root@node-3 ~]# scp api.sql root@192.168.26.72:/root/ 说明: scp命令 源文件 用户@目标主机IP:目录位置 拷贝文件夹:[root@node-3 ~]# scp -r /boot/grub/ root@192.168.26.72:/root/ 说明: scp命令 参数 源文件夹 用户@目标主机IP:目录位置 执行完成都需要输入目录主机的相应用户的密码 如果是非22端口则命令变为: [root@node-3 ~]# scp -P 2202 -r /boot/grub/ root@192.168.26.72:/root/ 说明: scp命令 目标主机端口 参数 源文件夹 用户@目标主机IP:目录位置

为了便于让读者理解设置以下场景: WEB服务器:192.168.26.73 备份服务器:192.168.26.72 需求: 需要将WEB服务器的网站目录与数据库目录定时备份 数据库备份到:/www/backup/database 网站目录备份到:/www/backup/site 需要将备份文件打包压缩存放 数据库备份文件保存7天,网站备份文件保存10天 定时同步到192.168.26.72服务器 /www/backup/database与/www/backup/site目录下 定期备份数据库与web文件夹脚本

dbbackup.sh内容如下: 第一行:#!/bin/bash 第二行:/usr/bin/mysqldump -u root –p123456 api | gzip > /www/backup/database/api_$(date +%H%M).sql.gz 第三行:scp -P 2222 -C -l 1024 -r /www/backup/database/api_$(date +%H%M).sql.gz root@对端IP地址:/www/backup/database/本机IP后两位 第四行:find /www/backup/database -mtime +7 -name *.sql.gz -exec rm -rf {} ; 第五行:find /www/backup/database/对端IP后两位/ -mtime +0 -name *.sql.gz -exec rm -rf {} ; 说明: -C:启动压缩机制 -l 1024 :限制速度 以k/bps为单位 源服务器与目标服务器相互做过ssh互联免密登陆

webbackup.sh内容如下: 第一行:#!/bin/bash 第一行:tar -zcf /www/backup/site/web_$(date +%Y%m%d).tar.gz /www/wwwroot/web &> /dev/null 第三行:scp -P 2222 -C -l 5120 -r /www/backup/site/web_$(date +%Y%m%d).tar.gz root@192.168.26.72:/www/backup/site/26.73/ 第三行:rm -rf /www/backup/site/web_$(date +%Y%m%d -d '10 days ago').tar.gz 第三行:rm -rf /www/backup/site/26.72/web_$(date +%Y%m%d -d '10 days ago').tar.gz

2.2、rsync+crond定时同步文件 2.2.1、rsync安装 [root@web ~]# yum -y install xinetd rsync [root@web ~]# systemctl restart rsyncd && systemctl enable rsyncd [root@web ~]# netstat -tunlp | grep 873 tcp 0 0 192.168.26.73:873 0.0.0.0:* LISTEN 2207/rsync [root@backup ~]# yum -y install xinetd rsync [root@backup ~]#systemctl restart rsyncd && systemctl enable rsyncd [root@backup ~]# netstat -tunlp | grep 873 tcp 0 0 192.168.26.73:873 0.0.0.0:* LISTEN 2207/rsync 2.2.2、rsync配置 目标服务器: [root@backup ~]# mkdir /www [root@backup ~]# ll /www total 0 [root@backup ~]# vim /etc/rsyncd.conf 内容如下: uid = root gid = root use chroot = yes max connections = 200 timeout = 300 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [backup] path = /www/ ignore errors read only = false list = false hosts allow = 192.168.26.72/32 hosts deny = * auth users = rsync_backup secrets file = /etc/rsync.password

[root@backup ~]# vim /etc/rsync.password 内容如下:冒号前是用户名,冒号后是密码 rsync_backup:rsync_backup [root@backup ~]# chmod 600 /etc/rsync.password [root@backup ~]# rsync --daemon [root@backup ~]# ps -ef |grep rsync root 10468 1 0 16:28 ? 00:00:00 /usr/bin/rsync --daemon --no-detach root 10522 10385 0 16:35 pts/0 00:00:00 grep --color=auto rsync 如果再修改配置文件,需要systemctl restart rsyncd

源服务器: [root@web ~]# mkdir /www [root@web ~]# cp -ar /boot/grub2/* /www/ [root@web ~]# ll /www/ total 40 -rw-r--r--. 1 root root 64 May 19 2018 device.map drwxr-xr-x. 2 root root 24 May 19 2018 fonts -rw-r--r-- 1 root root 4541 Aug 29 2018 grub.cfg -rw-r--r--. 1 root root 4477 May 19 2018 grub.cfg.1526688789.rpmsave -rw-r--r--. 1 root root 1024 Aug 29 2018 grubenv drwxr-xr-x. 2 root root 8192 May 19 2018 i386-pc drwxr-xr-x. 2 root root 4096 May 19 2018 locale [root@web ~]# vim /etc/rsync.password 内容如下: rsync_backup [root@web ~]# chmod 600 /etc/rsync.password [root@web ~]# rsync --daemon 2.2.3、测试从源服务器到目标服务器是否同步 [root@web ~]#rsync -arvz --delete --password-file=/etc/rsync.password /www/* rsync_backup@192.168.26.73::backup 再配合crond做定时同步 [root@web ~]# crontab -e
添加如下行: 30 2 * * * /usr/bin/rsync -avz --delete --password-file=/etc/rsync.password /www/ rsync_backup@192.168.26.73::backup &> /dev/null 执行完成后再查看目标服务器文件夹: [root@backup ~]# ll /www total 44 -rw-r--r-- 1 root root 64 May 19 2018 device.map drwxr-xr-x 2 root root 24 May 19 2018 fonts -rw-r--r-- 1 root root 4541 Aug 29 2018 grub.cfg -rw-r--r-- 1 root root 4477 May 19 2018 grub.cfg.1526688789.rpmsave -rw-r--r-- 1 root root 1024 Aug 29 2018 grubenv drwxr-xr-x 2 root root 12288 May 19 2018 i386-pc drwxr-xr-x 2 root root 4096 May 19 2018 locale 说明同步成功

2.3、rsync+inotify实时同步文件 rsync安装如上,在此不再废话,直接进入实战操作: 2.3.1在源服务器上安装inotify对源文件夹监控,做好同步 [root@web ~]#wget https://github.s3.amazonaws.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz [root@web ~]#tar -zxvf inotify-tools-3.14.tar.gz && cd inotify-tools-3.14/ [root@web ~]#./configure --prefix=/usr/local/inotify && make -j 2 && make install [root@web ~]#vim inotify.sh 内容如下: #!/bin/bash host01=192.168.26.73 #目标服务器的ip地址 src=/www #需要同步的目录 dst=backup #目标服务器的rsync服务的模块名 user=rsync_backup #目标服务器的rsync服务的虚拟用户 rsync_passfile=/etc/rsync.password #本地调用rsync服务的密码文件 inotify_home=/usr/local/inotify #inotify的安装目录 #judge if [ ! -e "$src" ]
|| [ ! -e "${rsync_passfile}" ]
|| [ ! -e "${inotify_home}/bin/inotifywait" ]
|| [ ! -e "/usr/bin/rsync" ]; then echo "Check File and Folder" exit 9 fi ${inotify_home}/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src
| while read file do cd $src && /usr/bin/rsync -avz --delete --password-file=/etc/rsync.password /www/ rsync_backup@192.168.26.73::backup &> /dev/null done exit 0

[root@web ~]#chmod +x inotify.sh && /usr/bin/sh /root/inotify.sh & [root@web ~]#echo ' /usr/bin/sh /root/inotify.sh &' >> /etc/rc.local && chmod +x /etc/rc.local 通过增加、删除、修改等操作源服务器/www目录,可以看到会触发规则 [root@backup ~]# ll /www/ total 60 -rw-r--r-- 1 root root 64 May 19 2018 device.map drwxr-xr-x 2 root root 24 May 19 2018 fonts -rw-r--r-- 1 root root 4541 Aug 29 2018 grub.cfg -rw-r--r-- 1 root root 4477 May 19 2018 grub.cfg.1526688789.rpmsave -rw-r--r-- 1 root root 1024 Aug 29 2018 grubenv -rw-r--r-- 1 root root 9 May 6 17:43 host.conf -rw-r--r-- 1 root root 7 May 6 17:43 hostname ......

2.4、rsync+sersync实时同步文件 2.4.1、rsync+inotify-tools与rsync+sersync架构的区别?  a、inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;  b、sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快)因此效率很高 注意事项 1.  在同步源服务器上开启sersync服务,sersync负责监控配置路径中的文件系统事件变化; 2.  调用rsync命令把更新的文件同步到目标服务器; 3.  需要在源服务器配置sersync,在同步目标服务器配置rsync server(注意:是rsync服务) 2.4.2、源服务器部署sersync服务 1)上传到源服务器/opt目录 [root@web opt]# ll total 712 -rw-r--r-- 1 root root 727290 May 6 22:46 sersync2.5.4_64bit_binary_stable_final.tar.gz [root@web opt]#tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz [root@web opt]#mv GNU-Linux-x86 sersync [root@web opt]#cd sersync && cp confxml.xml confxml.xml.bak [root@web opt]#vim confxml.xml
更改优化sersync配置文件:  修改24--28行 <sersync> <localpath watch="/www"> #本地同步目录 <remote ip="192.168.26.73" name="backup"/> #rsync模块名称

修改31--34行,认证部分【rsync密码认证】 <rsync> <commonParams params="-artuz"/> <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/> <userDefinedPort start="false" port="874"/><!-- port=874 --> <timeout start="false" time="100"/><!-- timeout=100 --> <ssh start="false"/> 开启sersync守护进程同步数据 [root@web opt]#/opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml &

2.4.3、测试及相关设置 2.4.3.1、测试是否目录同步 在源服务器192.168.26.72 /www 目录 增删改目录文件, 看目标服务器192.168.26.73 /www目录的变化 [root@backup www]# watch ls -l 2.4.3.2、设置sersync监控开机自动执行 [root@web opt]#vim /etc/rc.d/rc.local  #编辑,在最后添加一行 /opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml & #设置开机自动运行脚本 [root@web opt]#chmod +x /etc/rc.d/rc.local  2.4.3.3、添加脚本监控sersync是否正常运行

[root@web opt]#vim  /opt/check_sersync.sh  #编辑,添加以下代码 #!/bin/sh sersync="/opt /sersync/sersync2" confxml="/opt /sersync/confxml.xml" status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l) if [ $status -eq 0 ]; then $sersync -d -r -o $confxml & else exit 0; fi

[root@web opt]#chmod +x /opt /check_sersync.sh  #添加脚本执行权限 把这个脚本加到任务计划,定期执行检测 [root@web opt]#crontab -e */5 * * * * /usr/bin/sh /opt /check_sersync.sh &> /dev/null

补充: 一、多实例情况  1、配置多个confxml.xml文件(比如:www、bbs、blog....等等)  2、根据不同的需求同步对应的实例文件 /usr/local/sersync/sersync2  -d -o /usr/local/sersync/www_confxml.xml /usr/local/sersync/sersync2  -d -o /usr/local/sersync/bbs_confxml.xml 二、如何获得中国所有的IP地址段 说明:把关键字‘CN’更换为‘KR’则是为韩国所有地址段 #!/bin/bash wget -c http://ftp.apnic.net/stats/apnic/delegated-apnic-latest -O /usr/local/src/delegated-apnic-latest sorce=cat /usr/local/src/delegated-apnic-latest if [ ! -s $source ] then exit 0 else cat /usr/local/src/delegated-apnic-latest | awk -F '|' '/CN/&&/ipv4/ {print $4 "/" 32-log($5)/log(2)}' >> /usr/local/src/chinaiplist.txt fi

以上可以在nginx发布的网站中用到,把些IP加入到配置文件引用blackip.conf中,就可以不让有些国家的IP地址访问