一、rsync服务器介绍
① rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。
②rsync软件适用于unix/linux/windows等多种操作系统平台
③ rsync是一个快速和非常方便的文件复制工具。它能本地复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制
④以其delta-transfer算法闻名。
⑤rsync监听端口:873
⑥rsync运行模式: c/s
主要是一款基于增备的工具
配置rsync源
基本思路:
1、建立rsyncd.conf配置文件、独立的账号文件
2、启用rsync的–daemon模式
账号文件
1、需要对应的配置文件模块(使用不同的账号+功能模块)就可以使用不同的同步策略/方式
2、在使用同步时,我们需要指定账号+功能模块来指定我们同步的策略
rsync命令用法
rsync [选项] 原始位置 目标位置
常用选项:
-a | 归档模式,递归并保留对象属性,等同于-rlptgoD |
---|---|
-v | 显示同步过程的详细信息 |
-z | 在传输文件时进行压缩 |
-H | 保留硬连接文件 |
-A | 保留ACL属性信息 |
-r | 递归模式,包含目录姬子目录中的所有文件 |
-l | 对于符号链接文件仍然复制为符号链接文件 |
-p | 保留文件的权限标记 |
-t | 保留文件的时间标记 |
-g | 保留文件的属组标记(仅超级用户使用) |
-o | 保留文件的属主标记(仅超级用户使用) |
-D | 保留设备文件及其他特殊文件 |
–delete | 删除目标位置有而原始位置没有的文件 |
–checksum | 根据对象的校验和来决定是否跳过文件 |
配置源的两种方法
用户名@主机地址::共享模块
rsync://用户名@主机地址 /共享模块名
rsync部署
实验环境
rsync | 192.168.59.129 |
---|---|
client | 192.168.59.128 |
1、关闭防火墙,安全 同步时间
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
ntpdate ntp.aliyun.com
2、安装rsync
yum -y install rsync
3、修改rsync配置文件
[root@rsync www]# vim /etc/rsyncd.conf #修改配置文件
##删除原本内容,添加以下内容
uid = root # 表示管理rsync的用户,默认是nobody
gid = root
use chroot = yes # 表示是否禁锢在源目录
address = 192.168.59.129 # 监听地址
port 873 # 监听端口
log file = /var/log/rsyncd.log # 日志文件位置
pid file = /var/run/rsyncd.pid # 存放进程id的文件位置
hosts allow = 192.168.59.0/24 # 允许访问的客户及地址
[wwwroot]
path = /var/www/html # 源目录的实际路径
comment = Document Root of www.ljm.com
read only = yes #是否为只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型
auth users = dyf #授权账户,多个账户以空格分隔
secrets file = /etc/users.db #存放账户信息的数据文件
vim /etc/user.db #为账户设置密码
dyf:abc123
[root@rsync ~]# chmod 600 /etc/user.db #为数据文件设置权限,保证安全性
[root@rsync ~]# mkdir -p /var/www/html #创建源目录并给予权限
[root@rsync ~]# chmod +r /var/www/html/
[root@rsync ~]# ls -ld /var/www/html/
drwxr-xr-x. 2 root root 6 八月 11 05:27 /var/www/html/
[root@rsync ~]# rsync --daemon #开启服务
[root@rsync ~]# netstat -antp | grep rsync
tcp 0 0 192.168.118.100:873 0.0.0.0:* LISTEN 88951/rsync
关闭服务(两种方式)
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
在共享目录创建文件创建文件
echo "ni hao" >> /var/www/html/1.txt
客户端同步
mkdir /aaa
cd /aaa
[root@client aaa]# rsync -avz dyf@192.168.59.129::wwwroot /aaa
Password:
receiving incremental file list
./
1.txt
设置客户端面交互
[root@client aaa]# echo "abc123" > /etc/server.pass
您在 /var/spool/mail/root 中有邮件
[root@client aaa]# chmod 600 /etc/server.pass
[root@client aaa]# rm -rf 1.txt
[root@client aaa]# rsync -avz --password-file=/etc/server.pass dyf@192.168.59.129::wwwroot /aaa
receiving incremental file list
./
1.txt
sent 46 bytes received 141 bytes 374.00 bytes/sec
total size is 21 speedup is 0.11
[root@client aaa]# ls
1.txt 2.txt
部署实时监控inotify+rsync
修改rsync配置文件
[root@rsync]# vim /etc/rsyncd.conf
read only = no //关闭只读,上行同步需要可写权限
[root@rsync]# kill `cat /var/run/rsyncd.pid`
[root@rsync]# netstat -antp | grep rsync
[root@rsync]# rsync --daemon
[root@rsync]# netstat -antp | grep rsync
tcp 0 0 192.168.220.101:873 0.0.0.0:* LISTEN 83693/rsync
客户端安装inotify
yum -y install gcc gcc-c++
cd /opt
[root@client opt]# tar -xzvf inotify-tools-3.14.tar.gz
[root@client opt]# cd inotify-tools-3.14/
[root@client inotify-tools-3.14]# ./configure && make && make install
修改inotify内核参数
[root@client opt]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 32768 #监控时间队列,默认为16384
fs.inotify.max_user_instances = 1024 #最多监控实例数,默认为128
fs.inotify.max_user_watches = 1048576 #每个实例最多监控文件数,默认为8192
#当要监控的目录、文件数据量较多或者变化频繁时,建议加大参数值
[root@client opt]# sysctl -p
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
可以查看参数
[root@client inotify-tools-3.14]# cat /proc/sys/fs/inotify/max_queued_events
32768
[root@client inotify-tools-3.14]# cat /proc/sys/fs/inotify/max_user_instances
1024
[root@client inotify-tools-3.14]# cat /proc/sys/fs/inotify/max_user_watches
1048576
执行实时命令inotifywait
[root@client inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /aaa
重启一个端口,观察
编写触发同步脚本
[root@client aaa]# vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /aaa/" //实时监控的命令
RSYNC_CMD="rsync -apzH --delete --password-file=/etc/server.pass /aaa/ dyf@192.168.59.129::wwwroot/" //远程同步命令
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then //先判断是否有同步操作在进行,如没有则同步
$RSYNC_CMD
fi
done
chmod +x /opt/inotify.sh //给与执行权限
chmod +x /etc/rc.d/rc.local //系统启动脚本
echo "/opt/inotify.sh" >> /etc/rc.d/rc.local //系统启动时加载inotify.sh脚本
测试