rsync同步文件

介绍

为了实现组件的高可用,比如gitlab或者禅道,一般会在不同机器分别安装gitlab,它们公用一个外接的数据库。但是gitlab在本地还会有一些数据生成,这些数据在各个gitlab之间也需要保持一致,可以采用rsync实现不同机器之间的文件同步。

安装

以禅道双节点为例,所有安装了禅道客户端的机器安装rsync,命令:

yum install -y rsync

主节点配置

切换到主禅道所在机器,修改rsync配置文件/etc/rsyncd.conf:

uid = nobody
gid = nobody
use chroot = no
max connections = 3
pid file = /var/run/rsyncd.pid
log file=/var/log/rsyncd.log
lock file=/var/run/rsyncd.lock
secrets file=/etc/rsync.pass
[forzbox] # 自定义模块名,可多个
path = /opt/zbox/app/zentaoep/www/data/upload/1 # 要同步的目录
comment = BACKUP CLIENT IS zbox
ignore errors
read only = yes
list = no
# 以下两项是socket连接认证
auth users = forzbox
secrets file = /etc/rsync.pass

这里配置的同步方式是通过rsync进程来复制数据的方式,还有别的同步方式后续会说到。还有一些配置项,如主机权限,目录筛选等可以自行百度。

主节点创建认证文件/etc/rsync.pass,填写内容为用户名密码,用户名是上边配置文件中自定义的,密码是自己定的,注意格式,且这个认证文件的权限要为600:

forzbox:pass123

从节点配置

从节点也创建认证文件/etc/rsync.pass,内容为密码即可,权限为600:

pass123

启动

主从节点启动服务:

systemctl start rsyncd && systemctl enable rsyncd

如果是启用了防火墙,还需要配置端口,默认是873。

从节点配置定时任务进行每5分钟自动同步(这里采用的同步方式是:从节点通过rsync进程拉取主节点的数据到本地),crontab -e之后:

*/5 * * * * rsync -vzrtp --progress --delete --password-file=/etc/rsync.pass [email protected]::forzbox /opt/zbox/app/zentaoep/www/data/upload/1 >> /root/crontab.log 2>&1

上述命令参数说明:

  • v:显示详细信息
  • z:传输过程中对数据进行压缩
  • r:递归
  • t:保留修改时间属性
  • p:保留文件权限属性
  • --progress:显示数据传输的进度信息
  • --password-file=FILE:指定密码文件
  • --delete:删除那些仅在目标路径中存在的文件(源路径中不存在)

3种同步方式

rsync的同步方式有3种。

本地复制

rsync [选项] SRC... [DEST]

选项为参数,SRC表示原路径,DEST表示目标路径,下同。

通过shell远程复制

  1. 下载数据

    rsync [选项] [user@]HOST:SRC... [DEST]     
    

    不加user@表示用root用户进行登陆远程主机下载数据到本地的DEST路径。

  2. 上传数据

    rsync [选项] SRC... [user@]HOST:DEST
    

    这里的SRC表示本地数据,DEST表示远端主机目录。

通过rsync进程远程复制

  1. 下载数据

    rsync [选项] [user@]HOST::SRC [DEST]
    

    这里双冒号后的SRC表示远端服务端的模块名。

    rsync [选项] rsync://[user@]HOST[:port]/SRC [DEST]   
    

    这里的SRC表示实际的同步目录名,这种方式可以指定端口。

  2. 上传数据

    rsync [选项] SRC [user@]HOST::DEST    
    

    上传本地客户端数据到远端服务端的DEST模块名指定的路径。

    rsync [选项] SRC rsync://[user@]HOST[:port]/DEST
    

    这里的DEST表示实际的同步目录名,这种方式可以指定端口。


参考:
https://www.cnblogs.com/regit/p/8074221.html

你可能感兴趣的:(devops)