第二章 网络文件复制与同步
本节课所讲内容:
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 [email protected]:/root/
说明: scp命令 源文件 用户@目标主机IP:目录位置
拷贝文件夹:[root@node-3 ~]# scp -r /boot/grub/ [email protected]:/root/
说明: scp命令 参数 源文件夹 用户@目标主机IP:目录位置
执行完成都需要输入目录主机的相应用户的密码
如果是非22端口则命令变为:
[root@node-3 ~]# scp -P 2202 -r /boot/grub/ [email protected]:/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 [email protected]:/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/ [email protected]::backup
再配合crond做定时同步
[root@web ~]# crontab -e
添加如下行:
30 2 * /usr/bin/rsync -avz --delete --password-file=/etc/rsync.password /www/ [email protected]::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/ [email protected]::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行
修改31--34行,认证部分【rsync密码认证】
开启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地址访问