rsync服务的简介和配置详解
一、rsync概述
rsync是类unix系统下的数据镜像备份工具——remote sync。与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份、本地复制,远程同步等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
rsync 命令来同步系统文件之前要先登录remote 主机认证,认证过程中用到的协议有2种:ssh 协议和rsync协议。
二、rsync原理
rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主配置文件;Rsync可以通过rsh或ssh使用,也能以daemon模式去运行
在以daemon方式运行时Rsync server会打开一个873 端口,等待客户端去连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份
三、rsync特性
1、能更新整个目录和树和文件系统
2、有选择性的保持原来文件的符号链接、硬链接、文件属性、权限、设备以及时间等
3、对于安装来说,无任何特殊权限要求
4、优化的流程,文件传输效率高
5、能用rsh、ssh或直接端口作为传输入口端口
6、支持匿名rsync同步文件,是理想的镜像工具
四、ssh模式
1、服务器本地同步
实验环境准备:一台服务器(IP地址为192.168.115.120)
[[email protected] ~]# yum -y install rsync
[[email protected] ~]# mkdir -p /server/ssh
[[email protected] ~]# touch /server/ssh/{1..3}.txt
[[email protected] ~]# ls -l /server/ssh/
-rw-r--r-- 1 root root 0 2月 25 18:12 1.txt
-rw-r--r-- 1 root root 0 2月 25 18:12 2.txt
-rw-r--r-- 1 root root 0 2月 25 18:12 3.txt
1、同步目录下的文件
[[email protected] ~]# rsync -av /server/ssh/ /back/
将/server/ssh目录里的所有的文件同步至/back目录(不包含/server/ssh本身)
sending incremental file list
./
1.txt
2.txt
3.txt
2、同步目录下的文件及目录本身
[[email protected] ~]# rsync -av /server/ssh /back
将/server/ssh目录包括自己整个同步至/back目录
sending incremental file list
ssh/
ssh/1.txt
ssh/2.txt
ssh/3.txt
注意:rsync命令使用中,如果源参数的末尾有斜线,就会复制指定目录内容,而不复制目录本身;没有斜线,则会复制目录本身
2、局域网间同步
实验环境准备:一台服务器(IP地址为192.168.115.120)
一台服务器(IP地址为192.168.115.130)
上面已经在192.168.115.120服务器创建了目录/server/ssh,也创建好了几个文件,现在需要把这些文件同步到192.168.115.130服务器的/client/ssh目录下。
以下命令需要在192.168.115.130服务器上执行
[[email protected] ~]# yum -y install rsync
[[email protected] ~]# mkdir -p /client/ssh
1、远程文件同步到本地,需输入远程主机root密码
[[email protected] ~]# rsync -av 192.168.115.120:/server/ssh/ /client/ssh/
The authenticity of host '192.168.115.120 (192.168.115.120)' can't be established.
ECDSA key fingerprint is c7:79:b3:87:3f:cf:d9:18:34:e7:38:bd:2d:8c:db:36.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.115.120' (ECDSA) to the list of known hosts.
[email protected]'s password:
receiving incremental file list
./
1.txt
2.txt
3.txt
2、本地文件同步到远程,需输入远程主机root密码
[[email protected] ~]# rsync -av /etc/hosts 192.168.115.120:/server/ssh
[email protected]'s password:
sending incremental file list
hosts
3、本地整个目录同步到远程,需输入远程主机root密码
[[email protected] ~]# rsync -av /client/ssh 192.168.115.120:/server/ssh
[email protected]'s password:
sending incremental file list
ssh/
ssh/1.txt
ssh/2.txt
ssh/3.txt
3、局域网指定用户同步
实验环境准备:一台服务器(IP地址为192.168.115.120)
一台服务器(IP地址为192.168.115.130)
在192.168.115.120服务器执行以下命令
[[email protected] ~]# useradd user1
[[email protected] ~]# echo '123'|passwd --stdin user1
[[email protected] ~]# mkdir /home/user1/test
[[email protected] ~]# chown user1:user1 /home/user1/test/
在192.168.115.130服务器执行以下命令
1、把本地文件通过远程的指定普通用户同步到远程服务器
注意:同步的远程服务器目录的用户需要对目录有相应权限,否则报错
[[email protected] ~]# rsync -av /client/ssh/ '-e ssh -l user1' 192.168.115.120:/home/user1/test
[email protected]'s password:
sending incremental file list
./
1.txt
2.txt
3.txt
2、把远程服务器的目录通过普通用户同步到本地的/client/ssh目录
[[email protected] ~]# rsync -av 192.168.115.120:/home/user1/test '-e ssh -l user1 -p 22' /client/ssh/
[email protected]'s password:
receiving incremental file list
test/
test/1.txt
test/2.txt
test/3.txt
五、daemon模式
实验环境准备:一台服务器(IP地址为192.168.115.120)
一台客户机(IP地址为192.168.115.130)
1、daemon模式及配置文件的说明
(1)daemon模式配置文件
rsync以daemon方式运行的时候使用配置文件为rsyncd.conf
(2)使用daemon模式的时候,一定要分清楚服务端和客户端
与平时理解的服务端与客户端不太一样,被同步的一端为服务端,要把文件同步到另一端的源端为客户端
(3)rsyncd.conf文件格式
a、 rsyncd.conf配置文件由模块和参数组成,一个模块以写在方括号里的模块名称开始,直到下一个模块,模块里包含由“name = value”格式的参数。
b、文件是基于行的,每一行代表一个模块名或者参数
(4)常用参数的说明
rsync 服务运行方式需要配置 rsyncd.conf,其格式类似于 samba 的主配置文件
a、全局参数
在全局参数部分也可以定义模块参数,这时该参数的值就是所有模块的默认值
address 独立运行时,用于指定服务器运行的 IP 地址,默认本地所有IP
port 指定 rsync 守护进程监听的端口号,默认 873
pid file rsync 的守护进程将其 PID 写入指定的文件
log file 指定 rsync 守护进程的日志文件,而不将日志发送给 syslog
syslog facility 指定 rsync 发送日志消息给 syslog 时的消息级别
socket options 指定自定义 TCP 选项
lockfile 指定rsync的锁文件存放路径
timeout 超时时间
b、模块参数
模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的
1、基本模块参数
path 指定当前模块的同步路径,该参数是必须指定的
comment 给模块指定一个描述
2、模块控制参数
use chroot 在服务运行时要不要把他锁定在家目录,默认为 true
uid和gid 指定rsync运行用户和用户组,默认nobody
use chroot 是否让进程离开工作目录
max connections 最大并发连接数,0为不限制
lock file 指定支持 max connections的锁文件。默认/var/run/rsyncd.lock
list 指定列出模块列表时,该模块是否被列出。默认为 true
read only 只读选择,默认true
write only 只写选择,不让客户端从服务器上下载文件。默认false
ignore errors 忽略IO错误,默认true
ignore nonreadable 指定 rysnc 服务器完全忽略那些用户没有访问权限的文件。
dont compress 用来指定那些在传输之前不进行压缩处理的文件。
3、模块文件筛选参数
exclude 由空格隔开的多个文件或目录(相对路径),并将其添加到 exclude 列表中。
exclude from 指定包含 exclude 规则定义的文件名,服务器从中读取 exclude 列表定义
include 指定多个由空格隔开文件或目录(相对路径),并将其添加到 include 列表中。
include from 指定一个包含 include 规则定义的文件名,服务器从 中读取 include 列表定义
4、模块用户认证参数
auth users 执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开,默认为匿名方式
secrets file 指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用。文件权限必须是 600
strict modes 表示是否工作在严格模式下,严格检查文件权限等相关信息,默认为true
5、模块访问控制参数
hosts allow 指定哪些主机客户允许连接该模块。默认值为 *
hosts deny 指定哪些主机客户不允许连接该模块
说明:
a、二者都不出现时,默认为允许访问
b、只出现hosts allow,定义白名单,但没有被匹配到的主机由默认规则处理,即为允许
c、只出现hosts deny,定义黑名单,出现在名单中的都被拒绝
d、二者同时出现,先检查hosts allow,如果匹配就allow,否则检查hosts deny,如果匹配则拒绝,如是二者都不匹配,则由默认规则处理,即为允许
6、模块日志参数
transfer logging 使 rsync 服务器将传输操作记录到传输日志文件。默认值为false
log format 指定传输日志文件的字段。默认为:”%o %h [%a] %m (%u) %f %l”
设置了”log file”参数时,在日志每行的开始会添加”%t [%p]“;
可以使用的日志格式定义符如下所示:
%o 操作类型:”send” 或 “recv”
%h 远程主机名
%a 远程IP地址
%m 模块名
%u 证的用户名(匿名时是 null)
%f 文件名
%l 文件长度字符数
%p 该次 rsync 会话的 PID
%P 模块路径
%t 当前时间
%b 实际传输的字节数
%c 当发送文件时,记录该文件的校验码
2、服务启动方式
daemon模式启动的时候必须加参数--daemon
[[email protected] ~]# yum -y install rsync
[[email protected] ~]# rsync --daemon
[[email protected] ~]# netstat -antp|grep 873
tcp 0 0 192.168.115.120:873 0.0.0.0:* LISTEN 11755/rsync
3、rsync服务端配置
[[email protected] ~]# vim /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
address = 192.168.115.120
port 873
gid = root
use chroot = no
max connections = 5
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
#exclude = lost+found/
transfer logging = yes
timeout = 600
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[share]
path = /server/rsync
comment = it is a share file
gnore errors = yes
read only = no
write only = no
hosts allow = 192.168.115.0/24
hosts deny = 192.168.100.0/24
list = yes
auth users = user1
secrets file =/etc/rsync.passwd
4、创建相应的目录和密码文件,并设置密码文件的权限为600
[[email protected] ~]# mkdir /server/rsync 创建同步的目录
[[email protected] ~]# echo 'user1:123' > /etc/rsync.passwd 创建密码文件
[[email protected] ~]# chmod 600 /etc/rsync.passwd 设置密码文件权限为600
5、重新启动rsync服务方法
先关闭rsync进程 kill -s QUIT 进程号,再启动时会启动不成功,这时候要删除进程号的文件
[[email protected] ~]# netstat -antp|grep 873 查看端口已经启动
tcp 0 0 192.168.115.120:873 0.0.0.0:* LISTEN 11755/rsync
[[email protected] ~]# ps aux|grep rsync 查看进程号
root 11755 0.0 0.0 114644 376 ? Ss 21:30 0:00 rsync --daemon
root 11885 0.0 0.0 112664 972 pts/0 R+ 23:20 0:00 grep --color=auto rsync
[[email protected] ~]# kill -s QUIT 11755 停止进程并重启
[[email protected] ~]# rsync --daemon
[[email protected] ~]# failed to create pid file /var/run/rsyncd.pid: File exists 重启报错
[[email protected] ~]# rm -f /var/run/rsyncd.pid 删除进程文件
[[email protected] ~]# rsync --daemon 再次启动就会成功了
[[email protected] ~]# netstat -antp|grep 873 查看端口是否开启
tcp 0 0 192.168.115.120:873 0.0.0.0:* LISTEN 11892/rsync
6、在服务器创建两个文件,下面测试会用到
[[email protected] ~]# vim /server/rsync/1.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
[[email protected] ~]# vim /server/rsync/2.txt
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
7、客户端测试
(1)下行同步的两种方法
rsync -avz 用户名@服务器地址::共享模块名 /本地目录
rsync -avz rsync://用户名@服务器地址/共享模块名 /本地目录
[[email protected] ~]# yum -y install rsync
[[email protected] ~]# mkdir /client/rsync
把服务器文件同步到客户端(本地)方法1:
[[email protected] ~]# rsync -avz [email protected]::share /client/rsync/
Password:
receiving incremental file list
./
1.txt
2.txt
sent 97 bytes received 227 bytes 92.57 bytes/sec
total size is 130 speedup is 0.40
[[email protected] ~]# ls -l /client/rsync/
-rw-r--r-- 1 root root 64 2月 25 23:38 1.txt
-rw-r--r-- 1 root root 66 2月 25 23:39 2.txt
把服务器文件同步到客户端(本地)方法2
[[email protected] ~]# rsync -avz rsync://[email protected]/share /client/rsync/
Password:
receiving incremental file list
./
1.txt
2.txt
sent 97 bytes received 227 bytes 92.57 bytes/sec
total size is 130 speedup is 0.40
[[email protected] ~]# ls -l /client/rsync/
-rw-r--r-- 1 root root 64 2月 25 23:38 1.txt
-rw-r--r-- 1 root root 66 2月 25 23:39 2.txt
(2)上行同步的两种方法
rsync -avz /本地目录/* 用户名@服务器地址::共享模块名
rsync -avz /本地目录/* rsync://用户名@服务器地址/共享模块名
[[email protected] ~]# rsync -avz /client/rsync/* [email protected]::share
Password:
sending incremental file list
1.txt
2.txt
sent 138 bytes received 46 bytes 52.57 bytes/sec
total size is 130 speedup is 0.71
把客户端(本地)文件同步到服务器方法2:
[[email protected] ~]# rsync -avz /client/rsync/* rsync://[email protected]/share
Password:
sending incremental file list
sent 40 bytes received 8 bytes 13.71 bytes/sec
total size is 130 speedup is 2.71
上面没有同步是因为服务器有该文件,下面我们把服务器端的文件删除发现就会同步成功。
[[email protected] ~]# rsync -avz /client/rsync/* rsync://[email protected]/share
Password:
sending incremental file list
1.txt
2.txt
sent 138 bytes received 46 bytes 52.57 bytes/sec
total size is 130 speedup is 0.71
rsync相关参数说明:
-a 参数,相当于-rlptgoD,
-r 是递归
-l 是链接文件,意思是拷贝链接文件
-i 列出 rsync 服务器中的文件
-p 表示保持文件原有权限
-t 保持文件原有时间
-g 保持文件原有用户组
-o 保持文件原有属主
-D 相当于块设备文件
-z 传输时压缩
-P 传输进度
-v 传输时的进度等信息,和-P有点关系
(3)让客户端与服务器文件保持完全一致
[[email protected] rsync]# rsync -avz --delete [email protected]::share /client/rsync/
通过调用密码文件让客户端与服务器文件保持完全一致
[[email protected] ~]# echo "123"> /tmp/rsync.password
[[email protected] ~]# chmod 600 /tmp/rsync.password
[[email protected] ~]# rsync -avz --delete --password-file=/tmp/rsync.password [email protected]::share /client/rsync/
通过定时任务让客户端自动同步
[[email protected] ~]# crontab -e
10 0 * * * rsync -avz --delete --password-file=/tmp/rsync.password [email protected]::share /client/rsync/
[[email protected] ~]# crontab -l
8、免密码验证
(1)在客户端生成密钥对并把公钥文件上传到服务器
[[email protected] ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
9b:da:52:44:d3:10:26:d8:55:98:4c:30:d3:72:ff:ec [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
| o=**B. |
| . o=O . |
| + o |
| . . |
| .S o |
| .o o |
| .o . |
| .o E |
| ... |
+-----------------+
[[email protected] ~]# ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.
(2)验证从服务器下载文件到本地是否需要密码
[[email protected] ~]# rsync -avz [email protected]:/server/rsync /client/rsync/
receiving incremental file list
rsync/
rsync/1.txt
rsync/2.txt
sent 53 bytes received 179 bytes 464.00 bytes/sec
total size is 130 speedup is 0.56
可以看到,免密码验证已经成功了,从服务器下载文件到本地已经不需要密码了。
原文地址:http://blog.51cto.com/longlei/2082745