rsync实现文件服务器间文件同步

rsync介绍

rsync命令工具可以实现服务器间的文件同步(全量或者增量,比如使用–size-only来检查源端文件和目标端文件大小是否一致决定是否需要同步),由此同步的功能扩展,可以实现本机不同目录文件拷贝、快速删除海量文件等功能。但要注意,rsync不能实现远程服务器1和远程服务器2之间的文件同步,但是scp可以实现此功能。

rsync有几种工作模式

不管哪种模式,源文件都是在前面,目标文件在后面。
1)本地模式
语法:rsync [OPTION]… SRC [SRC]… DEST
如:rsync -av /tmp/test /data/test_bak/
2)远程shell模式(使用一个单冒号 :)
原理:启动一个shell程序(如rsh,ssh)
语法:
push模式(将本地文件push到远端):rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST
pull模式(从远端pull文件到本地):rsync [OPTION]… [USER@]HOST:SRC [DEST]
如:
rsync -av -e ‘ssh -p 18822’ /tmp/test1 10.144.54.186:/tmp/ #指定使用18822端口,因为有生产服务器使用的不是默认是22端口
3)rsync daemon模式(使用两个单冒号 ::)
原理:本地主机通过网络套接字连接远程主机上的rsync daemon
push模式:rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST
rsync [OPTION]… SRC rsync://[USER@]HOST[:PORT]/[DEST]
如:
pull模式:rsync [OPTION]… [USER@]HOST::SRC [DEST]
rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]
如:

rsync -av --delete --progress --password-file=/etc/rsync_passwd rsync_man@10.145.79.232::share_data/test1_dir /home/service/app

连接RSYNC DAEMON

rsync也可以不使用远程shell作为传输方式。这情况看下,将直接连接远程RSYNC守护进程,一般使
用的是TCP的873端口。(显然,这要求远程的RSYNC守护进程必须是已运行的,见下文"启动RSYNC服务以接受连接请求")
这种方式的rsync使用方式和远程shell方式一样,除了:
o 需要使用双冒号"::“分隔主机名和路径,或者使用rsync://的URL格式。
o “path"部分的第一个词语是一个模块名(译者注:如hostname::modname/file)。
o 远程RSYNC守护进程可能会输出你连接它的日期时间。
o 如果没有指定远程rsync服务的路径名,将列出rsync服务主机上可访问的路径。
o 如果没有指定本地目标地址,将列出远程rsync服务主机上指定的文件。
o 必须不能指定”–rsh”("-e")选项。
以下是拷贝远程模块名为"src"中的所有文件示例:
rsync -av host::src /dest
远程daemon上的某些模块可能需要身份验证。如果是这样,在连接时将会被询问输入密码。如果想要
避免被询问,可以通过设置环境变量RSYNC_PASSWORD的值为你要使用的密码,或者使用选项
“–password-file”。这非常适用于脚本中。
警告:在某些系统上,环境变量是对所有用户可见的,此时建议使用"–password-file"选项。
你可以通过web代理(web proxy)的方式与rsync daemon建立连接,只需设置环境变量RSYNC_PROXY的
值为hostname:port指向你的web代理。但要注意,web代理的配置必须得支持与873端口的代理连接。
你还可以使用代理程序与rsync daemon建立连接,只需设置环境变量RSYNC_CONNECT_PROG的值为你想
要运行的命令来代替建立套接字连接。环境变量的值中可能会包含"%H",它代表rsync命令中所指定
的主机名(因此如果想在值中包含一个"%“字符,需要使用”%%")。例如:
export RSYNC_CONNECT_PROG=‘ssh proxyhost nc %H 873’
rsync -av targethost1::module/src/ /dest/
rsync -av rsync:: //targethost2/module/src/ /dest/ (双冒号后面没有空格)
上面的命令中使用ssh在proxyhost上运行了nc命令,它将会转发所有数据到目标主机(%H)的873端口。

启动RSYNC服务以接受连接请求

要连接到一个rsync daemon,远程系统上的rsync daemon必须已经运行(或者像inetd一样,已经配置
了当特殊端口上有连接时会派生出rsync daemon)。关于如何启动一个能处理从套接字进来的连接的
daemon的完整信息,请看rsyncd.conf(5),这是rsync daemon的配置文件,它包含如何运行daemon的
非常详细的信息(包括独立模式(stand-alone)和inetd格式的配置)
如果你使用的是某种远程shell传输方式,则没有手动启动rsync daemon的必要。

使用rsync daemon模式的实例

本实例采取从服务端pull的方式拉取文件到客户端(服务端:10.90.122.231,客户端:10.90.19.243)
1.服务端配置

1.创建配置文件
mkdir -p /etc/rsync
cd /etc/rsync
touch rsyncd.conf     #必须
touch rsyncd.motd      #可选
touch rsyncd.secrets  #必须
chmod 600 rsyncd.secrets
chown root:root rsyncd.secrets  #用户必须和启动服务的用户保持一致


2.rsyncd.conf的配置:
## rsyncd.conf 文件的配置
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# 传输文件使用的用户和用户组,如果是从服务器=>客户端,要保证www用户对文件有读取的权限;如果是从客户端=>服务端,要保证www对文件有写权限。
uid = service
gid = service
# 允许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 = *
hosts deny = *
# 允许的客户端最大连接数
max connections = 4
# 欢迎文件的路径,非必须
motd file = /etc/rsync/rsyncd.motd
# pid文件路径
pid file = /etc/rsync/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

# 模块,可以配置多个,使用如: rsync_man@server_address::share_data
[share_data]
# 模块的根目录,同步目录,要注意权限
path = /tmp/zp/
# 是否允许列出模块内容
list = no
# 忽略错误
ignore errors
# 添加注释
comment = 
# 模块验证的用户名称,可使用空格或者逗号隔开多个用户名
auth users = rsync_man
# 模块验证密码文件 可放在全局配置里
secrets file = /etc/rsync/rsyncd.secrets
# 剔除某些文件或目录,不同步
exclude = lost+found/

3.rsyncd.motd 配置(欢迎提示语)非必须
++++++++++++++++++
sate zp : rsync start
++++++++++++++++++


4.rsyncd.secrets的配置
rsync_man:oppo123   #rsync_man 是虚拟的同步用户,oppo123  要与客户端保持一致


5.启动rsync服务
rsync --daemon --config=/etc/rsync/rsyncd.conf

2.客户端配置

配置免密(非必须,如果不配置,会提示输入密码)
 echo "oppo123" > /etc/rsync_passwd   #路径随意,保证启动同步的用户有权限读取即可
 chmod 600 /etc/rsync_passwd

3.客户端正式pull 来同步

rsync -av --delete --progress --password-file=/etc/rsync_passwd rsync_man@10.90.122.231::share_data /tmp/zp/

遇到的报错

1.file has vanished: "/crx-quickstart/repository/repository/datastore/tmp/upload2358902225285307139.tmp" (in server_data)
A: 这个报错表示,rsync同步开始时标记这个文件需要同步,真正去同步的时候,发现这个文件不存在了,可能是这个过程中,该文件被源端删除了。遇到这个错误,不影响rsync的备份结果,只不过rsync的执行码不会是0 ,而是23或者24。

参考文档

rsync官方网站: https://www.samba.org/ftp/rsync/rsync.html
rsync配置选项介绍(中文):https://www.cnblogs.com/f-ck-need-u/p/7221713.html
rsync介绍:https://blog.csdn.net/qq_32706349/article/details/91451053
rsync常见错误:http://blog.sina.com.cn/s/blog_4da051a60101h8am.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值