1. 资源端服务器A操作
1. 设置rsync配置
编辑 /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
uid = nobody
port = 873
gid = nobody
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
motd file = /etc/rsyncd/rsyncd.motd
log file = /var/log/rsyncd.log
lock file = /var/run/rsync.lock
timeout = 900
[backup]
comment = this is module for backup
path = /root/rsync/
ignore errors
auth users = root
secrets file = /etc/rsyncd.pass
# exclude = lost+found/
# transfer logging = yes
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# [ftp]
# path = /home/ftp
# comment = ftp export area
#
#
2. 编辑密码
touch /etc/rsyncd.pass
echo "root:123" > /etc/rsyncd.pass
chmod 600 /etc/rsyncd.pass # 设定权限
service rsyncd start # 启动服务
netstat -tunlp # 确认进程
可观察到以下:
tcp6 0 0 :::873 :::* LISTEN 5485/rsync
3. 获得ssh密码
得到/root/.ssh/id_dsa
用于客户端连接,
ssh-keygen -t dsa -b 1024
2. 设置接收端服务器B
1. 设置ssh密码
echo "服务端A的id_dsa.pub" > /root/.ssh/id_dsa.pub
2. 设置rsync的连接密码
echo "root:123" > /etc/rsyncd.pass # 若报错可尝试去掉用户名root
chmod 600 /etc/rsyncd.pass # 设置权限
3. 测试链接获取数据
rsync -auv --delete --password-file=/etc/rsyncd/rsyncd.pass root@139.199.193.89::backup /root/backups
3. 设置脚本定时获取 crontab -e
1. `/root/rsync/demo.sh` 文件
!#/bin/bash
rsync -auv --delete --password-file=/etc/rsyncd/rsyncd.pass root@139.199.193.89::backup /root/backups
2. 编辑`crontab-e`
每隔10s获取一次数据
* * * * * sleep 10; bash /root/rsync/demo.sh
关于rsync传输的配置选项
-v, --verbose 详细模式输出。
-q, --quiet 精简输出模式。
-c, --checksum 打开校验开关,强制对文件传输进行校验。
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
-r, --recursive 对子目录以递归模式处理。
-R, --relative 使用相对路径信息。
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀。
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件。
-l, --links 保留软链结。
-L, --copy-links 想对待常规文件一样处理软链结。
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结。
--safe-links 忽略指向SRC路径目录树以外的链结。
-H, --hard-links 保留硬链结。
-p, --perms 保持文件权限。
-o, --owner 保持文件属主信息。
-g, --group 保持文件属组信息。
-D, --devices 保持设备文件信息。
-t, --times 保持文件时间信息。
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间。
-n, --dry-run现实哪些文件将被传输。
-w, --whole-file 拷贝文件,不进行增量检测。
-x, --one-file-system 不要跨越文件系统边界。
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节。
-e, --rsh=command 指定使用rsh、ssh方式进行数据同步。
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息。
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件。
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件。
--delete 删除那些DST中SRC没有的文件。
--delete-excluded 同样删除接收端那些被该选项指定排除的文件。
--delete-after 传输结束以后再删除。
--ignore-errors 及时出现IO错误也进行删除。
--max-delete=NUM 最多删除NUM个文件。
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输。
--force 强制删除目录,即使不为空。
--numeric-ids 不将数字的用户和组id匹配为用户名和组名。
--timeout=time ip超时时间,单位为秒。
-I, --ignore-times 不跳过那些有同样的时间和长度的文件。
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间。
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0。
-T --temp-dir=DIR 在DIR中创建临时文件。
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份。
-P 等同于 --partial。
--progress 显示备份过程。
-z, --compress 对备份的文件在传输时进行压缩处理。
--exclude=PATTERN 指定排除不需要传输的文件模式。
--include=PATTERN 指定不排除而需要传输的文件模式。
--exclude-from=FILE 排除FILE中指定模式的文件。
--include-from=FILE 不排除FILE指定模式匹配的文件。
--version 打印版本信息。
--address 绑定到特定的地址。
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件。
--port=PORT 指定其他的rsync服务端口。
--blocking-io 对远程shell使用阻塞IO。
-stats 给出某些文件的传输状态。
--progress 在传输时现实传输过程。
--log-format=formAT 指定日志文件格式。
--password-file=FILE 从FILE中得到密码。
--bwlimit=KBPS 限制I/O带宽,KBytes per second。
-h, --help 显示帮助信息。
rsync.conf 配置说明
- 用
yum install rsync
安装的配置文件路径为/etc/rsyncd.conf
- 配置文件 rsyncd.conf 由全局配置和若干模块配置组成。配置文件的语法为:
模块以 [模块名] 开始
参数配置行的格式是 name = value ,其中 value 可以有两种数据类型:
字符串(可以不用引号定界字符串)
布尔值(1/0 或 yes/no 或 true/false)
以 # 或 ; 开始的行为注释
\ 为续行符
全局参数
在文件中 [module] 之外的所有配置行都是全局参数。当然也可以在全局参数部分定义模块参数,这时该参数的值就是所有模块的默认值
参数 | 说明 | 默认值 |
---|---|---|
address | 在独立运行时,用于指定的服务器运行的 IP 地址。由 xinetd 运行时将忽略此参数,使用命令行上的 –address 选项替代。 | 本地所有IP |
port | 指定 rsync 守护进程监听的端口号。 由 xinetd 运行时将忽略此参数,使用命令行上的–port 选项替代。 | 873 |
motd file | 指定一个消息文件,当客户连接服务器时该文件的内容显示给客户。 | 无 |
pid file | rsync 的守护进程将其 PID 写入指定的文件。 | 无 |
log file | 指定 rsync 守护进程的日志文件,而不将日志发送给 syslog。 | 无 |
syslog facility | 指定 rsync 发送日志消息给 syslog 时的消息级别。 | daemon |
socket options | 指定自定义 TCP 选项。 | 无 |
模块参数
模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。可以根据自己的需要,来指定多个模块,模块中可以定义以下参数:
a. 基本模块参数
参数 | 说明 | 默认值 |
---|---|---|
path | 指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的。 | 无 |
comment | 给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。 | 无 |
b. 模块控制参数
参数 | 说明 | 默认值 |
---|---|---|
use chroot | 若为 true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限,并且不能备份指向 path 外部的符号连接所指向的目录文件。 | true |
uid | 指定该模块以指定的 UID 传输文件。 | nobody |
gid | 指定该模块以指定的 GID 传输文件。 | nobody |
max connections | 指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。 | 0(没有限制) |
lock file | 指定支持 max connections 参数的锁文件。 | /var/run/rsyncd.lock |
list | 指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为 false,可以创建隐藏的模块。 | true |
read only | 指定是否允许客户上传文件。若为 true 则不允许上传;若为 false 并且服务器目录也具有读写权限则允许上传。 | true |
write only | 指定是否允许客户下载文件。若为 true 则不允许下载;若为 false 并且服务器目录也具有读权限则允许下载。 | false |
ignore errors | 指定在 rsync 服务器上运行 delete 操作时是否忽略 I/O 错误。一般来说 rsync 在出现 I/O 错误时将将跳过 –delete 操作,以防止因为暂时的资源不足或其它 I/O 错误导致的严重问题。 | true |
ignore nonreadable | 指定 rysnc 服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些不应该被备份者获得的文件时是有意义的。 | false |
timeout | 该选项可以覆盖客户指定的 IP 超时时间。从而确保 rsync 服务器不会永远等待一个崩溃的客户端。对于匿名 rsync 服务器来说,理想的数字是 600(单位为秒)。 | 0 (未限制) |
dont compress | 用来指定那些在传输之前不进行压缩处理的文件。该选项可以定义一些不允许客户对该模块使用的命令选项列表。必须使用选项全名,而不能是简称。当发生拒绝某个选项的情况时,服务器将报告错误信息然后退出。例如,要防止使用压缩,应该是:"dont compress = *"。 | *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz |
c. 模块文件筛选参数
参数 | 说明 | 默认值 |
---|---|---|
path | 指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的。 | 无 |
exclude | 指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式 | 空 |
exclude from | 指定一个包含 exclude 规则定义的文件名,服务器从该文件中读取 exclude 列表定义。 | 空 |
include | 指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 include 列表中。这等同于在客户端命令中使用 –include 来指定模式 。 | 空 |
include from | 指定一个包含 include 规则定义的文件名,服务器从该文件中读取 include 列表定义。 | 空 |
注意事项
- 修改rsyncd.conf无需重启rysnc服务
/usr/bin/rsync --address=192.168.80.129 --daemon
- 修改全局配置(配置文件中的全局变量), 是需要重新启动rsync进程的, 而修改某个指定Modual的属性配置的时候, 则不需要重新启动rsync进程而即刻生效。 且当某个变量名在全局或者局部变量中都存在, 对该模块来说, 局部变量的值会覆盖全局变量的值
- –delete选项时, 两边的目录不能以/结尾, 因为shell会把扩展为该目录下的所有文件
- 使用 rsync 时,后面主机名与路径之间的冒号的个数, 一个冒号表示使用ssh协议进行数据传输, 两个冒号表示使用rsync协议进行数据传输。 在ssh协议传输模式下,远程主机不需要有rsync守护进程存在,
:
后面接的是远程主机的目录/文件名称(而不使用rsyncd.conf里面配置的module name), 可以使用相对路径或者绝对路径。 如果是本地发送到远程, 指定远程主机的目录可以不存在, 但是其上层目录必须存在(即: rsync -avrz ./lab/ xyz@192.168.23.88:/usr/local/app/test/xx, 这里192.168.23.88上的/usr/local/app/test目录必须存在)。 在rsync协议传输模式下, moudle里面配置的path必须存在, 否则报错。 - rsync不允许“远程”同步到“远程”, 只能是“远程”到本地, 或者是“本地”到“远程”, 而scp是允许远程到远程的数据同步的, 比如 scp -r mqq@192.168.23.77:/usr/local/app/test mqq@192.168.23.88:/usr/local/app