rsync介绍

rsync全称remote sync,是一种更高效、可以本地或远程同步的命令,之所以高效是因为rsync会对需要同步的源和目的进度行对比,只同步有改变的部分,所以比scp命令更高效,但是rsync本身是一种非加密的传输,可以借助-e选项来设置具备加密功能的承载工具进行加密传输

rsync的工作模式

rsync有四种工作模式分为:

1、shell模式,也称作本地模式

2、远程shell模式,此时可以利用ssh协议承载其数据传输过程

3、列表模式,其工作方式与ls相似,仅列出源的内容:-nv

4、服务器模式,此时,rsync可以工作在守护进程,能够接收客户端的数据请求;在使用时,可以在客户端使用rsync命令把文件发送到守护进程,也可以像服务器请求获取文件

rsync命令选项

-n:测试,在不确定命令是否能按照意愿执行时,务必要实现测试

-v:详细输出模式,--verbose

-q:--quiet,静默模式

-c:--checksum,开启校验功能,强行对文件传输进行校验

-r:--recursive,递归复制

-a: --archives.归档,保留文件的原有属性相当于rlptgoD的选项组合wKioL1gEMvXRMZ5SAAAitet95ug281.png-p:--perms 保留文件的权限

-t: --times 保留文件的时间戳

-l:--links 保留文件的符号链接

-g:--group保留文件的属组

-o:--owner 保留文件的属主

-D:--devices 保留设备文件

-e ssh:表示使用ssh协议作为继承

-z:对文件压缩后传输

--progress:显示进度条

根据同步的方向不同,分为推、拉两种方式,其命令用法为:wKiom1gEMvbRkULxAABsJHLg7sA575.png

此处需要注意的地方有两点:

1、如果使用命令时只指定源而不指定目标,仅会将源以列表的形式显示而不同步

2、rsync命令使用中,如果源参数的末尾有斜线,只会复制指定目录的内容,而不复制目录本身,没有斜线,则会复制目录本身,包括目录

wKioL1gEMvbBhYW8AAAqN1fsmoE538.png

wKioL1gEMvbwOMcEAABNBYjmafE850.png

rsync生产环境使用方式

在中小企业的生产环境中经常有这么一种需求,A服务器上的某些重要文件需要每天备份到B服务器上,此时就可以使用rsync+crontab来进行备份,其步骤为:wKiom1gEMvfQYbxZAABOT_yvU74642.png

1、配置rsync服务器端

yum -y install xinetd   rsync是位于xinetd守护进程中

2、vim /etc/rsyncd.conf 创建rsync的配置文件wKioL1gEMvfgz6MaAAArMUDk9-g415.png

3、配置文件分为全局配置段模块配置段,注意配置文件内的设置项使用格式wKiom1gEMvegErnxAAAlocZSUVU295.png

#Global Parameters

pid file = /var/run/rsyncd.pid  设置rsync运行时pid文件的位置

log file = /var/log/rsyncd.log  设置rsync运行时log文件的位置

lock file = /var/run/rsyncd.lock  设置rsync运行时lock文件的位置

uid = nobody

gid = nobody

uid和gid这两个选项的作用是指定在运行rsync时以哪个用户来替代root,nobody是系统默认值,不存在于系统用户中,如果此处设置为nobody,则在模块配置段依然需要指定一个系统用户来运行rsyncwKiom1gEMvjTE_0NAABeLInSDKY030.png

ignore errors = yes 是否忽略错误

list = no 是否允许列出名单

#Module Parameters

[module_name] 服务器模式下rsync目的名称(DES)使用的是模块名称

path = /path/to/some_dir

uid = root

gid = root

如果全局配置段的uid和gid设置时不是nobody而是使用的一个系统账户,在模块配置段这两个选项可以不添加这两个选项

max connections = 5 最大连接用户数

timeout = 300 超时时间

read only = false 只读,适用于Client端pull场景

write only = false 只写,适用于Client端push场景

auth users = username 允许链接该模块的用户,该用户是虚拟用户可以不存在wKioL1gEMvjS8GtzAABrRjLW6G0588.png

secrets file = /etc/rsync.passwd  用户密码(auth user)的存放文件

strict modes = yes 检查secrets file文件的权限是否满足要求wKiom1gEMviQRr58AABHNDMV6DI511.png

use chroot = no 是否禁锢用户家目录

max connections = 4 最大连接数

hosts allow = ipaddress/netmask   白名单

hosts deny = ipaddress/netmask   黑名单

此处需要注意:

(1)默认规则为允许访问,二者都不出现时

(2)只出现hosts allow:定义白名单;但没有被匹配到的由默认规则处理,即为允许

(3)只出现hosts deny:定义黑名单;出现在名单中的都被拒绝

(4)二者同时出现,先检查hosts allow,如果匹配就allow,否则,检查hosts deny 如果匹配则拒绝,如二者均无匹配,则使用默认的,即允许

4、为auth user用户创建secrets file文件存放账号和密码,

vim /etc/rsync.passwd    账号可以不存在,密码可以任意设置wKioL1gEMvjSKIsCAAAExbkKs_k395.png

5、因为开启了strict modes = yes,所以要修改/etc/rsync.passwd文件权限

chmod 600 /etc/rsync.pass

6、将rsync服务设为开机启动并启动该服务,rsync侦听在873端口

chkconfig rsync on

service xinetd startwKioL1gEMvnjWaIiAABIy2n6qJI240.png

7、使用命令测试是否可以正常同步wKiom1gEMvmgfZJGAAAcvmGxFVo759.png

testuser与password就是步骤4中定义在rsync.passwd文件中的用户和密码,test目标则是Module Parameters中定义的模块名称

使用password-file文件登录

大部分的备份我们需要结合crontab来执行自动备份,此时就需要rsync在使用时结合password-file文件来免密码登录,操作步骤为:

1、vim /etc/rsync.passwd 创建存放密码的password-file文件来,此处注意的是该文件内容不同于服务器端,仅保存使用rsync命令时的用户的密码wKiom1gEMvnTb8UFAAACti3KGTw976.png

2、安全起见还是需要修改/etc/rsync.passwd文件权限

chmod 600 /etc/rsync.pass

3、再次进行测试,使用--password-file指明存放密码的文件位置,步骤1中的密码此时就是testuser的密码,该用户名和密码需要与服务器端/etc/rsync.passwd文件中的用户名和密码匹配wKioL1gEMvnAYu1OAAA4l7WpVqo632.png

4、使用crontab -e 命令设置周期性任务,周期性任务保存在/var/spool/cron/user_name文件中,或者使用crontab -l可以查看wKiom1gEMvqScYwBAAAVhdfYMow896.png

如果没有 --delete 选项,源服务器上已删除的部分再执行下一次周期任务时依然会继续保留在目标服务器上,目标服务器只同步源服务器新增的部分wKioL1gEMvqh-mI0AAA9U9Nx9IY607.png

增加 --delete 选项会将源和目标服务器上有差异的部分删除掉wKioL1gEMvrgohclAAA05ZTAP5E001.png