rsync简介:
rsync是一个开源的快速备份工具,能够在不一样主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,在传输前执行压缩,所以很是适用于异地备份,镜像服务器等。rsync的官方站点是http://rsync.samba.org/. 做为一种最经常使用的文件备份工具,rsync是Linux和Unix系统默认安装的基本组件之一。html
[root@promote ~]# rpm -q rsync rsync-3.0.9-18.el7.x86_64
inotify简介:
Inotify 是一个 Linux 内核特性,它监控文件系统,而且及时向专门的应用程序发出相关的事件警告,好比删除、读、写和卸载操做等。c++rsync工具与inotify机制相结合,能够实现触发式备份(实时同步)。只要原始位置的文档发生变化,,就当即启动增量备份操做。web
主机 | IP | 软件 |
---|---|---|
rsync服务器 | 192.168.100.135 | rsync |
rsync客户机 | 192.168.100.140 | rsync、inotify |
关闭全部主机的防火墙和安全性策略,仅实验参考。算法
systemctl stop firewallde.service setenforce 0
以网站站点做为源目录/var/www/html和备份帐号backuper为例进行配置。vim
vim /etc/rsyncd.conf uid = nobody gid = nobody use chroot = yes #禁锢在源目录 address = 192.168.100.135 #监听地址 port 873 #监听端口 log file = /var/log/rsyncd.log #日志文件位置 pid file = /var/run/rsyncd.pid #存放进程ID的文件位置 hosts allow = 192.168.100.0/24 #容许访问的客户机地址 [wwwroot] #共享模块名称 path = /var/www/html #源目录的实际路径 comment = www.kgc.cn read only = yes #是否为只读 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 #同步时再也不压缩的文件类型 auth users = backuper #受权帐户 secrets file = /etc/rsyncd_users.db #存放帐户信息的数据文件
添加一行用户记录,以冒号分割。还需调整帐户权限,避免帐户泄露。安全
vim /etc/rsyncd_users.db backuper:abc123 chmod 600 /etc/rsyncd_users.db
mkdir -p /var/www/html touch /var/www/html/index.html
执行rsync --daemon命令就能够启动rsync服务。若要关闭rsync服务,能够采起kill进程的方式,如kill $(cat /var/run/rsyncd.pid),再删掉pid文件便可。bash
rsync --daemon
rsync --daemon
mkdir /myweb 格式一: rsync -avz backuper@192.168.100.135::wwwroot /myweb //密码abc123 格式二: rsync -avz rsync://backuper@192.168.100.135/wwwroot /myweb
rsync命令的基本用法服务器
-a 归档模式,表示以递归方式传输文件,并保持全部文件属性,等于-rlptgoD。
-z 对备份的文件在传输时进行压缩处理。
-H 保留硬链结。
-D 保持设备文件信息。
-A 保留ACL属性信息
--delete 删除那些目标位置有而原始位置没有的文件。
--checksum 打开校验开关,强制对文件传输进行校验。ide
[root@promote ~]# ls /myweb index.html
为了在同步过程当中不用输入密码,须要建立一个密码文件如/etc/server.pass,在执行同步时使用选项--password-file=/etc/server.pass指定便可。工具
vim /etc/server.pass abc123
[root@promote ~]# cat /etc/server.pass abc123 [root@promote ~]# chmod 600 /etc/server.pass //设置权限 [root@promote ~]# crontab -e 30 22 * * * rsync -az --delete --password-file=/etc/server.pass backuper@192.168.100.135::wwwroot /myweb //天天22点30分执行同步 [root@promote ~]# service crond start //启动计划任务 Redirecting to /bin/systemctl start crond.service [root@promote ~]# chkconfig crond on 注意:正在将请求转发到“systemctl enable crond.service”。
vim /etc/sysctl.conf fs.inotify.max_queued_events = 16384 //监控事件队列(16384) fs.inotify.max_user_instances = 1024 //最多监控实例数(1024 fs.inotify.max_user_watches = 1048576 //每一个实例最多监控文件数(1048576 sysctl -p
inotify-tools提供inotifywait和inotifywatch辅助工具程序,用来监控和汇总改动状况。
yum install gcc gcc-c++ -y //安装gcc编译环境
tar zxvf inotify-tools-3.14.tar.gz -C /opt/ cd /opt/inotify-tools-3.14 ./configure make && make install
yum install httpd -y
inotifywait -mrq -e modify,create,move,delete /var/www/html/
inotifywait命令选项:
- -e用来指定要监控那些事件
- -m表示持续监控
- -r表示递归整个目录
- -q简化输出信息
另外一个终端在目录路径下对文件进行建立和删除操做。
返回到原来的终端查看屏幕输出结果。
vim /opt/inotify.sh #!/bin/bash INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/" RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.100.135::wwwroot/" $INOTIFY_CMD | while read DIRECTORY EVENT FILE do if [ $(pgrep rsync | wc -l) -ge 0 ] ; then $RSYNC_CMD fi done chmod +x /opt/inotify.sh
vim /etc/rsyncd.conf [wwwroot] .... read only=No ....
chmod 777 /var/www/html chown -R nobody:nobody /var/www/html
[root@promote ~]# cd /opt/ [root@promote opt]# ./inotify.sh