rsync远程同步:是一个开源的快速备份工具。可以在不同主机之间同步整个目录。
在远程同步中,一个是源端,还有一个是发起端
源端负责文件的原始位置,发起端和源端的文件同步。
rsync的特点:
拷贝文件,连接文件,设备
可以保持源文件或者目录的权限不变 时间,软硬连接,所有者,所在组等句可以保持不变
可以实现增量同步。只同步发生变化的数据,数据传输效率很高
支持匿名认证
同步方式:
rsync是linux系统自带的软件
rsync命令的选项:
-r:递归模式,目录包含子目录里面的所有文件
-l:复制链接文件(软连接)
-v:显示同步过程中的详细信息
-z:传输文件时进行压缩
-a:归档模式,可以保留文件的权限,属性等等
-p:保留文件的权限标记(所有者 所在组)
-t:保留时间标记(时间戳)
-g:保留文件的所在组(管理员权限)
-o:保留文件的所有者(管理员权限)
-H:保留硬链接
-D:保留设备文件和其他特殊文件
--delete:删除目标位置有,但是原始位置没有的文件
下行同步:
从源端同步到客户端
上行同步:
从客户端同步到源端
rsync同步速度很快,适合同步大文件,可以结合数据库同步使用
tes1:源端 192.168.120.70 test2:发起端 192.168.120.110
下行同步
源端-------发起端
test1
修改配置文件
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = yes
#禁锢在源目录
address = 192.168.120.70
#监听地址
port 873
#监听端口
log file = /var/log/rsyncd.log
# max connections = 4
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.120.0/24
#指定可以访问服务端的地址
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.120.0/24
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
#以上述后缀名为结尾的文件,同步时不再压缩
#配置共享模块和目录,用户名,密码。
[test]
path = /opt/test
comment = test
read only = yes
auth users = backuper #用户名随便起
secrets file = /etc/rsyncd_users.db
vim /etc/rsyncd_users.db
backuper:123456
chmod 600 /etc/rsyncd_users.db
mkdir test
chmod 777 test
重启
rsync --daemon
netstat -antp | grep rsync
关闭服务
kill $(cat /var/run/rsyncd.pid)
第二种关闭服务方法
这种方必须要删进程号
rm -rf /var/run/rsyncd.pid
kill -9 进程号
到test2(发起端)
rsync -avz [email protected]::test /opt
rsync: 发起同步的命令
-avz:保留文件权限,v:显示详细过程 z:同步过程中对文件进行压缩
192.168.120.70::test:模块名称,不是目录名
免密交换
test2:
echo "123456" > /etc/server.pass
chmod 600 /etc/server.pass
rsync -avz --password-file=/etc/server.pass [email protected]::test /opt
监控
test2:
把工具拖进来
解压
cd /opt
tar -xf inotify-tools-3.14.tar.gz
cat /proc/sys/fs/inotify/max_queued_events
监控事件队列
cat /proc/sys/fs/inotify/max_user_instances
最多监控的实例
cat /proc/sys/fs/inotify/max_user_watches
每个实例最多监控的文件
vim /etc/sysctl.conf
底行添加
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p
cd /opt/inotify-tools-3.14/
./configure
make && make install
测试监控
test2:
mkdir -p /opt/test
inotifywait -mrq -e modify,create,move,delete /opt/test
[modify (修改)、create (创建)、move (移动)、delete (删除)、attrib (属性更改)]
-m:表示持续监控
-r:递归整个目录
-q:信息提示
-e:指定监控的事件,多个事件用逗号隔开
再开个test2
cd /opt/test
touch 123
echo 123 > 123
mv 123 456
rm -rf 456
inotify通知接口,可以用来监控文件系统的各种变化情况,文件存取,删除,移动,修改都可以被监控
inotify机制和rsync配合使用。既可以通知变化,也可以实现同步。
上行同步
test1
vim /etc/rsyncd.conf
read only = no #关闭只读,上行同步需要可以写
重启服务
kill $(cat /var/run/rsyncd.pid)
rsync --daemon
netstat -antp | grep rsync
test2
cd /opt
mkdir data
cd data
touch gq wdf wh yst
cd ..
chmod 777 data
rsync -azH --delete --password-file=/etc/server.pass /opt/data [email protected]::test
--delete:删除目标位置有,但是原始位置没有的文件
如果目标位置没有,原始位置有,那就是复制
test1:
查看结果
通过脚本实现监控与同步
vim inotify.sh
#!/bin/bash
CMD="inotifywait -mrq -e modify,create,move,delete /opt/data/"
rsync_cmd="rsync -avz --password-file=/etc/server.pass /opt/data [email protected]::test"
$CMD | while read DIRECTORY EVENT FILE
do
if[ $(pgrep rsync | wc -l) -le 0 ]
then
$rsync_cmd
fi
done
~
chmod 777 inotify.sh
chmod +x /etc/rc.d/rc.local
echo '/opt/inotify.sh' >> /etc/rc.d/rc.local
crontab -e -u root
* * */2 * * /opt/inotify.sh
在文件数量较多的情况下,比如百万和千万级别的文件,rm -rf * 速度很慢
rsync可以实现快速删除大量文件
mkdir -p /opt/test1
cd test1
touch {1..50000}.txt
mkdir /home/blank
rsync --delete-before -a -H -v --progress --stats /home/blank /opt/test1
--delete-before:在传输的过程中进行删除
-a:归档
-H:硬链接
-v:输出过程信息
--progress:显示传输过程
--stats:给出文件的传输状态