实验环境:
Rsync 服务器 : 192.168.199.130
client 客户端 : 192.168.199.131
实验目的
client能够远程获取rsync服务器的文件。
并且通过inotify机制监控client获取到文件,编写相关shell脚本;
让client的文件和rsync中的文件实时同步。
Rsync服务器端:
yum -y install httpd 通过httpd进行测试
yum -y install rsync
修改rsync配置文件
uid = nobody
gid = nobody
use chroot = yes #禁锢在源目录
address = 192.168.199.130 #监听地址
port 873 #监听端口号
log file = /var/log/rsyncd.log #日志文件位置
pid file = /var/run/rsyncd.pid #存放进程ID的文件位置
hosts allow = 192.168.199.0/24 #允许访问的客户机地址
[wwwroot] #共享模块名称
path = /var/www/html #源目录的实际路径
comment = Document Root of www.51xit.top
read only =no #是否只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不在压缩的文件类型
auth users =backuper #授权账户
secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件
创建授权的账号和密码
vi /etc/rsyncd_users.db
backuper:pwd123 ###账号backuper密码pwd123
chmod 600 /etc/rsyncd_users.db ###修改权限
在httpd站点中写入相关内容用于共享给client,更改站点权限
echo “1111” > /var/www/html/111.html
echo “2222” > /var/www/html/222.html
chmod 777 /var/www/html
关闭防火墙,启动rsync服务
systemctl stop firewalld
rsync --daemon ###启动服务
netstat -anpt |grep rsync ##检查873端口是否开启
tcp 0 0 192.168.5.129:873 0.0.0.0:* LISTEN 90024/rsync
客户端client:
创建abc文件夹用于接收rsync中的文件,
yum -y install rsync
mkdir /opt/abc
systemctl stop firewalld
更改abc文件夹权限
chmod 777 /opt/abc/
添加免交互
vi /etc/server.pass
pwd123
chmod 600 /etc/server.pass ##修改文件权限
下载监控软件inotify-tools并配置
yum install gcc gcc-c++ -y ##安装环境依赖
tar xzvf inotify-tools-3.14.tar.gz -C /opt ###解压
cd inotify-tools-3.14/
./configure ###编译并安装
make && make install
修改inotify参数
vi /etc/sysctl.conf
fs.inotify.max_queued_events = 32768 ###监控队列大小
fs.inotify.max_user_instances = 1024 ###最多监控实例数
fs.inotify.max_user_watches = 1048576 ###每个实例最多监控文件数
sysctl -p ####重新加载
编写shell脚本执行同步操作
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD=“inotifywait -mrq -e create,delete,move,modify,attrib /opt/abc/”
RSYNC_CMD=“rsync -azH --delete --password-file=/etc/server.pass /opt/abc/ backuper@192.168.199.130::wwwroot”
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
KaTeX parse error: Expected 'EOF', got '#' at position 11: RSYNC_CMD #̲echo "{FILE} was rsynced" >>/opt/inotify_rsync.log
fi
done
修改脚本权限
chmod +x /opt/inotify.sh
验证
在client上执行远程同步,获取rsync共享模块[wwwroot]中的文件到abc文件夹中
rsync -az --delete --password-file=/etc/server.pass backuper@192.168.199.130::wwwroot /opt/abc
开启客户端inotify监控,并执行 /opt/inotify.sh 脚本
inotifywait -mrq -e modify,create,move,delete /opt/abc ##开启对abc文件夹的监控
cd /opt ##执行shell脚本
./inotify.sh
重新开一个client终端,在/opt/abc中写入相关文件
vi /opt/abc/333.html
333
进入rsync服务器中,发现通过shell脚本已经将client中abc下的文件同步到rsync服务器中