【大数据】文件同步工具Rsync
2021/11/18 6:14:43
本文主要是介绍【大数据】文件同步工具Rsync,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
简介
Rsync 是一款开源的,快速的,多功能的,可实现全量及增量(差异化备份)的本地或远程数据同步备份的优秀工具。
Rsync软件适用于Unix、Linux、Windows等多种操作系统。
它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代cp
和mv
命令
官网:https://rsync.samba.org/
文件实时同步推荐使用Syncthing,Syncthing与rsync相比安装、使用都很方便,且具有web界面无需使用inotify监控即可实现文件实时同步。
syncthing使用教程:https://blog.csdn.net/qq_44276741/article/details/121390471
安装
# Debian $ sudo apt-get install rsync # Red Hat $ sudo yum install rsync # Arch Linux $ sudo pacman -S rsync
传输的双方都必须安装 rsync。
远程同步基本用法
列出本地/aaa/目录下的文件列表
rsync /aaa/
列出远程主机上/bbb/目录下的文件列表
rsync remote_host:/bbb/
将本地内容同步到远程服务器。
rsync -av source remote_host:destination
将远程内容同步到本地。
rsync -av username@remote_host:source destination
-a参数表示存档模式,保存所有的元数据,比如修改时间、权限、所有者等,并且软链接也会同步过去。 -v参数表示输出细节 -vv表示输出更详细的信息 -vvv表示输出最详细的信息
源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,不带尾随斜线表示的是整个目录包括目录本身,带上尾随斜线表示的是目录中的文件,不包括目录本身。
实现实时传输
两台服务器都如下配置
安装rsync
yum -y install rsync
配置/etc/rsyncd.conf文件
vi /etc/rsyncd.conf # rsync 守护进程的用户 uid = root # 运行 rsync 守护进程的组 gid = root # 允许 chroot,提升安全性,客户端连接模块,首先 chroot 到模块 path 参数指定的目录下,chroot 为 yes 时必须使用 root 权限,且不能备份 path 路径外的链接文件 use chroot = yes # 只读 read only = no # 只写 write only = no # 设定白名单,可以指定IP段(172.18.50.1/255.255.255.0),各个Ip段用空格分开 hosts allow = 192.168.1.27 hosts deny = * # 允许的客户端最大连接数 max connections = 4 # 欢迎文件的路径,非必须 #motd file = /etc/rsyncd.motd # pid文件路径 pid file = /var/run/rsyncd.pid # 记录传输文件日志 transfer logging = yes # 日志文件格式 log format = %t %a %m %f %b # 指定日志文件 log file = /var/log/rsync.log # 剔除某些文件或目录,不同步 exclude = lost+found/ # 设置超时时间 timeout = 900 ignore nonreadable = yes # 设置不需要压缩的文件 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # 模块,可以配置多个 [test] # 模块的根目录,同步目录,要注意权限 path = /srv/docker # 是否允许列出模块内容 list = no # 忽略错误 ignore errors # 添加注释 comment = ftp export area # 模块验证的用户名称,可使用空格或者逗号隔开多个用户名 auth users = root # 模块验证密码文件 可放在全局配置里 secrets file = /etc/rsyncd.secrets
编辑 /etc/rsyncd.secrets
文件
vi /etc/rsyncd.secrets root:123456 chmod 600 /etc/rsyncd.secrets
启动
rsync --daemon --config=/etc/rsyncd.conf
加入开机自启
echo 'rsync --daemon --config=/etc/rsyncd.conf' >> /etc/rc.d/rc.local
创建密码文件 /etc/rsyncd.pass
vi /etc/rsyncd.pass 123456 chmod 600 /etc/rsyncd.pass
远程传输命令
#远程到本地 rsync -avz --delete root@192.168.1.27::test /srv/docker/ --password-file=/etc/rsyncd.pass #本地到远程 rsync -avz --delete /srv/docker/ root@192.168.1.27::test --password-file=/etc/rsyncd.pass
安装inotify
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum install -y inotify-tools
inotify常用命令
1、创建事件
inotifywait -mrq /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e create
2、删除事件
inotifywait -mrq /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e delete
3、修改事件
inotifywait -mrq /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e close_wr
实时传输脚本
脚本一(建议使用)
#!/bin/bash path=/srv/docker Server=192.168.1.27 User=root module=test monitor() { /usr/bin/inotifywait -mrq /srv/docker/ --format '%w%f' -e create,modify,delete,attrib,close_write,move $1 | while read line; do rsync -avz --delete /srv/docker/ ${User}@${Server}::${module} --password-file=/etc/rsyncd.pass done } monitor $Path;
脚本二
#!/bin/bash path=/srv/docker Server=192.168.1.27 User=root module=test monitor() { /usr/bin/inotifywait -mrq /srv/docker/ --format '%w%f' -e create,modify,delete,attrib,close_write,move $1 | while read line; do if [ -f $line ]; then rsync -avz --delete ${User}@${Server}::${module} /srv/docker/ --password-file=/etc/rsyncd.pass else cd $1 && rsync -avz --delete /srv/docker/ ${User}@${Server}::${module} --password-file=/etc/rsyncd.pass fi done } monitor $Path;
这篇关于【大数据】文件同步工具Rsync的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享