C/C++教程

数据同步之rsync

本文主要是介绍数据同步之rsync,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
何为 rsync?   rsync 全称 remote synchronize,即 远程同步。   rsync 是 linux系统下的数据镜像备份工具,可用于本地文件复制,也可与其他 SSH、rsync 主机远程同步文件和目录。   使用 rsync 进行数据同步时,第一次进行全量备份,以后则是增量备份,利用 rsync 算法(差分编码),只传输差异部分数据。     如何 rsync? 1. 安装
yum install rsync

2. 配置

rsyncd 服务配置文件 /etc/rsyncd.conf: 默认使用端口 873,可通过配置项目 port 进行修改。 3. 三种工作模式 (1)本地复制 将本地目录 /var/rsync-src/ 下的文件同步至本地目录 /var/rsync-dest/
rsync -r /var/rsync-src/ /var/rsync-dest/

(2)将本地数据同步到远程(push)

将本地目录 /var/rsync-src/ 下的文件同步至远程主机 10.101.11.11 目录 /var/rsync-dest/
rsync -r /var/rsync-src/ username@10.101.11.11:/var/rsync-dest/

(3)将远程数据同步到本地(pull)

将远程主机 10.101.11.11 目录 /var/rsync-dest/ 下的文件同步至本地目录 /var/rsync-dest/
rsync -r username@10.101.11.11:/var/rsync-dest/ /var/rsync-dest/

4. 两种认证协议

  rsync 进行远程同步时需要认证远程主机的账号密码,支持两种认证方式:ssh 协议认证与 rsync 协议认证。 (1)ssh 认证   rsync 默认使用 ssh 协议进行远程登录和数据传输。远程主机需要开启 sshd 服务,rsync 在传输数据之前会先与远程主机进行一次 ssh 登录认证,然后通过 ssh 隧道进行数据传输。只需数据同步双方安装 rsync,但不必启动 rsyncd 服务。   可用 -e 选项指定协议:
rsync -r -e ssh /var/rsync-src/ username@10.101.11.11:/var/rsync-dest/

  也可省略 -e:

 

rsync -r /var/rsync-src/ username@10.101.11.11:/var/rsync-dest/

 

  使用 ssh 认证与传输的缺点是不安全:

<1>登录认证使用的账号是远程主机可登录的系统账号,且需要手动输入密码;

<2>同步数据不受目录限制。

(2)rsync 协议认证   与 ssh 认证不同,rsync 协议认证不需要依赖远程主机的 sshd 服务,但需要远程主机开启 rsyncd 服务,本地 rsyncd 服务可不必开启。另外,rsync 协议认证不是直接使用远程主机的真实系统账号,而是虚拟账号和虚拟密码,且可实现无需手动输入密码,同时 rsync 协议认证需要配置模块对远程同步的目录进行限制。对比 ssh 认证,rsync 协议认证安全性更高。   下面直接实践。(远程主机为服务端,本地主机为客户端) <1>rsyncd 配置(远程) 这里定义了一个模块,名为 wjt-rsync。 path:模块 wjt-rsync 对应的真实目录 /var/rsync-dest。此处是对客户端可操作目录的限制。 auth users:用于数据认证与传输的虚拟账号 jet,客户端以虚拟账号 jet 登录成功后,会转换成配置项 uid 指定的系统用户身份 rsync,以该身份完成对目标目录的读写操作。此处是对客户端操作权限的限制。 secrets file:虚拟账号与密码设置文件。 fake super:true 表示 uid 可以不为 root。 read only:指定当前模块是否只读,false 表示可读写,即可上传文件,true 表示只读,不可上传文件,默认为 true。 write only:true 表示不能下载,false 表示可下载,默认为 false。 <2>创建用户与组(远程)
useradd rsync -s /sbin/nologin -M

<3>设置虚拟账号密码(远程)

echo "jet:123456" > /etc/rsyncd.passwd chmod 600 /etc/rsyncd.passwd

<4>修改同步目录属主(远程)

chown -R rsync.rsync /var/rsync-dest

<5>开启 rsyncd 服务(远程)

systemctl start rsyncd

<6>请求同步(本地)

rsync -r /var/rsync-src/ jet@10.101.11.11::wjt-rsync

可通过配置本地密码文件实现无需手动输入密码:

echo 123456 > /etc/rsync.jet.passwd
chmod 600 /etc/rsync.jet.passwd
rsync -r /var/rsync-src/ jet@10.101.11.11::wjt-rsync --password-file=/etc/rsync.jet.passwd

或者通过环境变量进行设置:(变量名是固定的)

export RSYNC_PASSWORD=123456
rsync -r /var/rsync-src/ jet@30.102.74.67::wjt-rsync

5. 更多功能选项

(1)-a:归档模式,表示递归传输并保持文件属性。 (2)-v:显示同步过程中详细信息(文件列表)。可以使用"-vvvv"获取更详细信息。 建立链接: 开始传送增量文件列表:(部分截图) 开始传送文件数据:(部分截图) 同步完成,输出统计信息: (3)-z:传输时进行压缩提高效率。 (4)-n:模拟执行,不会真正执行。 (5)--delete:删除只存在于目标目录、不存在于源目录的文件。 (6)--exclude:排除某些文件或目录,不参与操作。 (7)--include:指定必须参与操作的文件或目录,--include必须在--exclude之前。 (8)--link-dest:基准目录,指定基准目录以后,rsync 会将源目录与基准目录之间变动的部分同步到目标目录。那些没变动的文件则会生成硬链接,硬链接指向上一次备份的对应文件,这与全量备份类似,但其数据量小很多(使用 rsync 实现全量备份的大致做法:使用备份时间命名区分多次备份的多个目标目录,每次备份之前,先将基准目录设置为上一次备份的目标目录,恢复时直接找到对应时间点的目录,里面的文件即是当时全部的文件数据)。 (9)--bwlimit:限速传输,单位 MB/s。 ......(还有更多功能选项)


 

                                             

这篇关于数据同步之rsync的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!