目录
rsync远程同步
是一个开源的快速备份工具,可以在不同主机之间同步整个目录, 在远程同步中,一个是源端,还有一个是发起端 源端负责文件的原始位置,发起端和源端的文件同步 |
rsync同步速度很快,适合大文件,可以结合数据库同步使用。 |
上行同步 | 从客户端同步到源端 |
下行同步 | 从源端同步到客户端 |
1 | 拷贝文件,链接文件,拷贝设备 |
2 | 保持源文件或者目录的权限不变,如时间,软硬链接,所有者,所在组等均可以保持不变 |
3 | 可以实现增量同步,只同步发生变化的数据,数据传输效率很高 |
4 | 支持匿名认证登录 |
1 | 完整备份,第一次同步都是完整备份 |
2 | 第一次同步往后的同步,都是增量备份(差异备份),只同步变化的数据 |
-r | 递归模式,目录包含子目录里面的所有文件 |
-l | 复制链接文件,软链接 |
-v | 显示同步过程中的详细信息 |
-z | 传输文件时对文件进行压缩 |
-a | 归档模式,可以保留文件的权限,属性等等 |
-p | 保留文件的权限标记(所有者,所在组) |
-t | 保留时间标记(时间戳) |
-g | 保留文件的所在组(需要管理员权限) |
-o | 保留文件的所有者(需要管理员权限) |
-H | 保留硬链接 |
-D | 保留设备文件和其他特殊文件 |
--delete | 可以删除目标位置有,但是原始位置没有的文件(两边都有的数据保持不动,删除掉不同的数据) |
- #需要两台: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
-
- 上行同步 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
-
-