目录
rsync远程同步
|-----------------------------------------------------------------------------|
| 是一个开源的快速备份工具,可以在不同主机之间同步整个目录, 在远程同步中,一个是源端,还有一个是发起端 源端负责文件的原始位置,发起端和源端的文件同步 |
| rsync同步速度很快,适合大文件,可以结合数据库同步使用。 |
上行同步于下行同步
|------|-----------|
| 上行同步 | 从客户端同步到源端 |
| 下行同步 | 从源端同步到客户端 |
Rsync功能特点
|---|-----------------------------------------|
| 1 | 拷贝文件,链接文件,拷贝设备 |
| 2 | 保持源文件或者目录的权限不变,如时间,软硬链接,所有者,所在组等均可以保持不变 |
| 3 | 可以实现增量同步,只同步发生变化的数据,数据传输效率很高 |
| 4 | 支持匿名认证登录 |
同步方式
|---|----------------------------------|
| 1 | 完整备份,第一次同步都是完整备份 |
| 2 | 第一次同步往后的同步,都是增量备份(差异备份),只同步变化的数据 |
Rsync命令的选项
|----------|---------------------------------------------|
| -r | 递归模式,目录包含子目录里面的所有文件 |
| -l | 复制链接文件,软链接 |
| -v | 显示同步过程中的详细信息 |
| -z | 传输文件时对文件进行压缩 |
| -a | 归档模式,可以保留文件的权限,属性等等 |
| -p | 保留文件的权限标记(所有者,所在组) |
| -t | 保留时间标记(时间戳) |
| -g | 保留文件的所在组(需要管理员权限) |
| -o | 保留文件的所有者(需要管理员权限) |
| -H | 保留硬链接 |
| -D | 保留设备文件和其他特殊文件 |
| --delete | 可以删除目标位置有,但是原始位置没有的文件(两边都有的数据保持不动,删除掉不同的数据) |
实验
bash
#需要两台:test1 :192.168.233.71,test2:192.168.233.72
systemctl stop firewalld
setenforce 0
yum -y install rsync
#安装rsync软件
vim /etc/rsyncd.conf
uid = root
#所有者
gid = root
#所在组
use chroot = yes
#禁锢在源目录,每一次同步只能从源目录出发
address =192.168.233.71
#监听地址
port 873
#监听端口
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.233.0/24
#指定可以访问服务端的地址
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
#以上述后缀名为结尾的文件,同步时不再压缩
#配置共享模块和目录,用户名,密码
[test]
path = /opt/test
comment = test
read only = yes
#下行模式同步只需要开启yes,为只读模式,上行模式需要读,no为可以读也可以写
auth users = backuper
#指定用户名,可以自定义
secrets file = /etc/rsyncd_users.db
#认证的文件
wq!
vim /etc/rsyncd_users.db
#设置密码文件
backuper:123456
wq!
chmod 600 /etc/rsyncd_users.db
#这个文件只能给600,不能给777
mkdir test
#创建共享目录
chmod 777 test/
rsync --daemon
#独立监听启动,守护进程启动
netstat -antp | grep rsync
#看一下启动没
kill $(cat /var/run/rsyncd.pid)
#关闭rsync进程的方式
touch 123 /opt/test/
echo 666 > 123
test2
systemctl stop firewalld
setenforce 0
yum -y install rsync
rsync -avz backuper@192.168.233.71::test /opt
#rsync发起同步的命令,-avz为保留文件权限,v表示显示详细过程,z同步过程中对文件进行压缩,/opt为指定目录
#输入密码,第一次为全量备份,第二次为增量备份
二免密登录,免交互实现密码登录
test2(客户端)
echo "123456" > /etc/server.pass
#生成一个密码文件
chmod 600 /etc/server.pass
#给权限给密码文件
rsync -avz --pasword-file=/etc/server.pass backuper@192.168..233.71::test /opt
#免密
cat /opt/123
上行同步
bash
上行同步 test2
#将软件inotify-tools-3.14.tar.gz 放到/opt
#inotify通知接口,可以用来监控文件系统的各种变化情况,文件存取,删除,移动,修改都可以被监控
#inotify机制和rsync配合使用,既可以通知变化,也可以实现同步
tar -xf inotify-tools-3.14.tar.gz
cat /proc/sys/fs/inotify/max_queued_events
#16384 ,监控事件队列
cat /proc/sys/fs/inotify/max_user_instances
#128,最多监控的实例
cat /proc/sys/fs/inotify/max_user_watches
#8192,每个实例最多监控的文件
vim .etc/sysctl.conf
#最后添加
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
wq!
sysctl -p
cd inotify-tools-3.14/
./configure
make && make install
inotifywait -mrq -e modify,create,move,delete /opt/test/
#-m表示持续监控,-r递归整个目录,-q简化的输出信息提示,-e指定监控的事件,多个事件用逗号隔开
#开始监控,可以再开一台test2操作,监控有记录表示监控成功。
监控同步数据
mkdir data
touch gq wdf wh yst
chmod 777 data/
rsync -azH --delete --password-file=/etc/server.pass /opt/data backuper@192.168.233.71::test/
echo 123 > gq
#test 查看是否同步
#写个监控脚本
vim inotify.sh
#!/bin/bash
CMD="inotifywait -mrq -e modify,create,move,delete /opt/test/"
rsync_cmd="rsync -azH --delete --password-file=/etc/server.pass /opt/data backuper@192.168.233.71::test/"
$CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -gt 0 ]
then
$rsync_cmd
fi
done
wq!
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
wq!
#在文件数量较多的情况下,比如百万和千万级别的文件,用rm -rf * 速度很慢,用rsync可以实现快速删除大量文件
test1
touch {1..5000}.txt
mkdir /home/blank
rsync --delete-before -a -H -v --progress --stats /home/blank/ /opt/test1
#--delete-before指在传输过程中进行删除,-a归档模式,-H硬连接-v输出过程信息--progress显示传输过程--stats 给出文件的传输状态
cd /home/blank