Rsync服务部署

何为 rsync?
  rsync 全称 remote synchronize,即 远程同步。
  rsync 是 linux系统下的数据镜像备份工具,可用于本地文件复制,也可与其他 SSH、rsync 主机远程同步文件和目录。
  使用 rsync 进行数据同步时,第一次进行全量备份,以后则是增量备份,利用 rsync 算法(差分编码),只传输差异部分数据。
 
默认使用端口 873,可通过配置项目 port 进行修改。
3. 三种工作模式
(1)本地复制
将本地目录 /var/rsync-src/ 下的文件同步至本地目录 /var/rsync-dest/
rsync -r /var/rsync-src/ /var/rsync-dest/

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

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

 

将本地目录 /var/rsync-src/ 下的文件同步至远程主机 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/
使用 ssh 认证与传输的缺点是不安全:

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

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

(2)rsync 协议认证
  与 ssh 认证不同,rsync 协议认证不需要依赖远程主机的 sshd 服务,但需要远程主机开启 rsyncd 服务,本地 rsyncd 服务可不必开启。另外,rsync 协议认证不是直接使用远程主机的真实系统账号,而是虚拟账号和虚拟密码,且可实现无需手动输入密码,同时 rsync 协议认证需要配置模块对远程同步的目录进行限制。对比 ssh 认证,rsync 协议认证安全性更高。
  下面直接实践。(远程主机为服务端,本地主机为客户端)

服务器端部署

1. 配置文件  /etc/rsyncd.conf

max connections = 200
use chroot = no
uid = root
gid = adm
port = 61873
#定义目录和文件的默认权限,需要客户端不指定--perm -p 参数
#客户端同步方式: rsync -vzrt local_dir  remoteserver::TKWeb/
incoming chmod = Dug=rwx,Do=rx,Fug=rw,Fo=r
outputing chmod = Dug=rwx,Do=rx,Fug=rw,Fo=r
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
hosts allow = 192.168.1.1,192.168.1.2
hosts deny = *
secrets file = /etc/rsync.secrets 

[SCRIPTS]
        path = /data/server/scripts/
        comment = scripts
        ignore errors
        read only = no
	  list = false
	  auth users = script

[OPTPKG]
        path = /data/server/optpkg/
        comment = optpkg
        ignore errors
        read only = no
        list = false
        auth users = optpkg

 

2. 配置密钥文件 /etc/rsync.secrets

vim   /etc/rsync.secrets

script:xjXe7TjB3sut0t1D
optpkg:ahToyRwpSZGuZNXd

 

3. 修改密钥文件权限为600

chmod  600   /etc/rsync.secrets

 

4. 启动服务

rsync  --daemon

 

客户端访问

以 [SCRIPTS] 为例

export RSYNC_PASSWORD='xjXe7TjB3sut0t1D' 
rsync
-av --progress --inplace --port 61873 文件名字 script@10.110.100.100::SCRIPTS

rsync 如何实时同步?—— rsync + inotify! 

何为 inotify?
  Inotify 是 Linux 内核从 2.6.13 开始引入的特性,它是一个内核用于通知用户空间程序文件系统变化的机制。
  Inotify 监控文件系统操作,比如读取、写入和创建,基于事件驱动,可以做到对事件的实时响应,高效,而且没有轮询造成的系统资源消耗。

安装inotify

yum install inotify-tools -y
2. 命令
  inotify-tools 包含了两个命令:inotifywait 与 inotifywatch。
(1)inotifywait:在被监控的文件或目录上等待特定文件系统事件发生,执行后处于阻塞状态,适合在shell脚本中使用。
(2)inotifywatch:用于收集文件系统的统计数据,例如发生了多少次 inotify 事件,某文件被访问了多少次等等。
3. 内核参数
/proc/sys/fs/inotify/ 目录下包含三个文件,分别设置 inotify 相关的三个内核参数。
(1)max_queued_events:inotify 事件队列可容纳的事件数量,超出的事件被丢弃,但会触发队列溢出Q_OVERFLOW事件。
(2)max_user_instances:每个用户可运行的 inotifywait 或 inotifywatch 命令的进程数。
(3)max_user_watches:每个 inotifywait 或 inotifywatch 命令可以监控的文件数量。如果监控的文件数目巨大,需要根据情况适当增加此值。
 
4. 事件
inotify 监控的文件系统事件:
(1)access:文件被访问。
(2)modify:文件被修改。
(3)attrib:文件元数据被修改。
(4)open:文件被打开。
(5)create:在被监控的目录中创建了文件或目录。
(6)delete:删除了被监控目录中的某个文件或目录。
......(还有更多事件)
注意:
  对文件的某个操作往往会触发多个事件,用户应用程序需要自己防止做出重复响应。
 
更完美的方案? —— sersync!
  sersync 是金山的周洋基于 rsync + inotify-tools 开发的工具,它克服了 inotify 的缺陷,可以过滤重复事件减轻负担,并且自带 crontab 功能、多线程调用 rsync、失败重传等功能。
  当同步数据量不大时,还是建议使用 rsync + inotify,当数据量很大(几百G甚至1T以上)时,建议使用 rsync + sersync
posted @ 2022-10-29 17:47  羊脂玉净瓶  阅读(167)  评论(0)    收藏  举报