前言
本博客内容仅为记录博主思路,仅供参考,一切以自己实践结果为准。
一、概念/应用环境
- 开源的备份工具,能够同步整个目录树
- 支持增量备份,传输前会进行压缩
- 适用于异地备份、镜像服务器备份
- 定期同步/检测同步(通过脚本达到目的)
二、搭建/操作实例
2.1 下行同步
#配置源端(开启下行同步)
systemctl stop firewalld
setenforce 0
rpm -q rsync
#查看rsync是否安装,默认安装,未安装则yum install -y rsync.x86_64安装
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
address = 192.168.13.10
port = 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.13.0/24
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[wwwroot]
#这个模块名需要记住,命令中定义路径的参数就是模块名
path = /var/www/html
#同步的路径指向
comment = Document Root of www.han.comread
read only = yes
auth users = backuper
secrets file = /etc/rsyncd_users.db
#配置以上配置文件
vim /etc/rsyncd_users.db
backuper:abc123
#创建保存rsync远程连接密码的文件(与rsync.conf中secrets file对应)
chmod 600 /etc/rsyncd_users.db
#远程同步rsync已配置完毕(此时只是开启了下行同步)
#创建目录分享文件测试
mkdir -p /var/www/html
touch /var/www/html/test.txt
chmod +r /var/www/html/
ls -ld /var/www/html/
rsync --daemon
#启动rsync服务
#在另外一台主机上执行同步(密码为/etc/rsyncd_users.db中的配置的密码)
rsync -avz backuper@192.168.13.10::wwwroot /test/
2.2 上行同步
#在开启下行同步的情况基础上,开启上行同步(rsync+inotify)
vim /etc/rsyncd.conf
read only = no
#关闭只读
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
rsync --daemon
netstat -anpt | grep rsync
#重启服务以重新加载配置
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p
tar zxvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14
./configure
make && make install
#此时可用命令进行指定目录指定状态监控:inotifywait -mrq -e modify,create,move,delete /var/www/html
#此时上行同步已经配置完毕
2.3 测试/删除
cd /mnt
touch {
1..100}.sh
ls
#此时/mnt目录下有100个文件
rsync --delete-before -a -H -v --progress --stats /var/www/html/ /mnt
#将/var/www/html/目录的内容同步到/mnt/目录中,并且因为添加了--delete-before选项,所以会先删除/var/www/html/没有的文件
#测试2(在源主机:192.168.13.20操作)
cd /mnt
touch {
1..100}.sh
ls
#此时/mnt目录下有100个文件
rsync --delete-before -a -H -v --progress --stats backuper@192.168.13.10::wwwroot/ /mnt
#将主机1的/var/www/html/目录的内容同步到/mnt/目录中,并且因为添加了--delete-before选项,所以会先删除主机1的/var/www/html/没有的文件
三、监控脚本
#可以编写一个脚本,使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录
#如果监控到变化,则启动脚本进行同步
#!/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/ [email protected]::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
#如果rsync未在执行,则立即启动
$RSYNC_CMD
fi
done
chmod +x /opt/inotify.sh
chmod 777 /var/www/html/
chmod +x /etc/rc.d/rc.local
echo '/opt/inotify.sh' >> /etc/rc.d/rc.local
#加入开机自动执行
三、结语
- 不难,主要是自己操作一遍,才有印象