rsync [选项] 原始位置 目标位置
格式1:用户名@主机地址::共享模块名
格式2:rsync://用户名@主机地址/共享模块名
格式一:rsync -avz [email protected]::wwwroot /opt
格式二:rsync -avz rsync://[email protected]/wwwroot /opt
下行rsync源:wwwroot共享->/myweb
rsync -zva --delete [email protected]::wwwroot /opt
①在源站(A机)上操作
1、关闭防火墙组件
systemctl stop firewalld && setenforce 0
2、编辑rsync配置文件
vim /etc/rsyncd.conf
添加或修改成如下内容:
uid = nobody
gid = nobody
use chroot = yes
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.50.0/24
添加同步模块:
[wwwroot] ## 模块名
path = /var/www/html ## 同步源目录
comment = www.test.com ## 描述
read only = yes ## 源站只读
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 ## 不进行压缩的文件格式
auth users = backuper ## 用户定义
secrets file = /etc/rsyncd_users.db ## 用户密码文件存放路径
3、创建密码文件
vim /etc/rsyncd_users.db
写入密码(格式:用户:密码):backuper:123456
4、为了不让他人访问修改权限(只有属主可以查看)
chmod 600 /etc/rsyncd_users.db
5、启动rsync服务
rsync --daemon
查看状态:
[root@localhost opt]# netstat -natp | grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 16706/rsync
tcp6 0 0 :::873 :::* LISTEN 16706/rsync
6、为了验证试验结果,我们在源站上安装一个http服务并写入站点文件
yum -y install httpd ## 安装
vim /var/www/html/index.html ## 创建站点文件
写入内容:test web
②在同步站(B机)上操作
1、使用命令同步源站内容到/opt目录下
rsync -avz [email protected]::wwwroot /opt
或
rsync -avz rsync://[email protected]/wwwroot /opt
[含义]:
1. -a:归档模式,递归并保留对象属性
2. -v:显示同步过程的详细(verbose)信息
3. -z:在传输文件时进行压缩(compress)
2、查看同步过来的文件内容
[root@localhost opt]# cat /opt/index.html ## 可以看到已经同步过来了
test web
另外,如果在shell脚本中使用同步命令必定会涉及到免交互会比较麻烦,所以可以使用免交互功能,只需要在同步站点创建一个密码文件即可
vim /etc/server.pass ## 创建密码文件(路径随意)
123456 ## 写入密码
chmod 600 /etc/server.pass ## 设置权限只能属主操作该文件
执行免交互同步命令:
rsync -zva --password-file=/etc/server.pass [email protected]::wwwroot /opt
-m:持续进行监控
-r递归监控所有子对象
-q:简化输出信息
-e:指定要监控哪些事件类型
1、在B机上安装http服务
yum -y install httpd
2、关闭防火墙
systemctl stop firewalld && setenforce 0
/var/www/html/ CREATE b
/var/www/html/ CREATE c
/var/www/html/ MODIFY c
3、安装编译环境
yum -y install gcc gcc-c++
4、调整内核参数
vim /etc/sysctl.conf ## 编辑配置文件
fs.inotify.max_queued_events = 16384 ## 监控事件队列大小
fs.inotify.max_user_instances = 1024 ## 最多监控实例数
fs.inotify.max_user_watches = 1048576 ## 每个实例最多监控文件数
使用命令:sysctl -p 使配置立即生效
5、解压缩软件(先上传到/opt目录下)并进行配置与安装
tar zxvf inotify-tools-3.14.tar.gz -C /opt
cd /opt/inotify-tools-3.14 ## 进入软件目录
./configure ## 进行配置
make && make install ## 编译及安装
6、测试inotify软件是否可以正常监控
inotifywait -mrq -e modify,create,move,delete /var/www/html ## 执行命令后会进入监听模式,无法操作,所以需要另开一个终端页面操作
PS:
-m:持续进行监控
-r递归监控所有子对象
-q:简化输出信息
-e:指定要监控哪些事件类型
随机创建文件并写入内容测试inotify是否可以监控操作动作:
cd /var/www/html
touch b
echo "123" > c
另一个终端输出信息,说明软件工作正常:
[root@localhost inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /var/www/html
/var/www/html/ CREATE b
/var/www/html/ CREATE c
/var/www/html/ MODIFY c
7、编写一个shell脚本,通过inotifuwait触发rsync同步操作
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/ [email protected]::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ];then
$RSYNC_CMD
fi
done
PS:注意!192.168.50.135 IP是A机的
chmod +x /opt/inotify.sh ## 为脚本添加执行权限
8、因为涉及到读写操作,所以需要把A、B机的/var/www/html/目录的权限放开
chmod 777 /var/www/html/ ## 分别在A、B机上进行操作
9、现在进行测试,看能否自动同步
在B机上创建一个web.txt文件:touch /var/www/html/web.txt
再将刚才创建的b、c文件删除:rm -rf /var/www/html/b
rm -rf /var/www/html/c
切换到A机上查看html目录下文件:
[root@localhost opt]# ls /var/www/html/
web.txt ## 可以看到这个web.txt文件已经同步过来了