1.1什么Rsync?

       Rsync 是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。
        Rsync 软件使用于/unix/linux/windows 等多种操作系统平台。
下面是官方的英文简单描述:rsync-a fast,versatile,remote(and local)file-copying tool
来自:http://www.samba.org/ftp/rsync.html


1.2 Rsync 简介
Rsync 英文全称为Remote synchronization 从软件的名称就可以看出来,Rsync 具有可以使用本地
和远程两台主机直接的数据快速复制同步镜像、远程备份的功能,这个功能类似ssh 带的scp 命令,但又
优于scp 命令的功能,scp 每次都是全量及增量的复制数据,这又类似cp 命令,但同样也优于cp 命令,cp
每次都是全量拷贝,而Rsync 可以增量拷贝。
提示:
利用Rsync 还可以实现删除文件和目录的功能,这又相当于rm 命令!一个rsync 相当于scp,cp,rm,但是
还优于他们每个命令


1.2.1 Rsync功能
主要作用:
在两台计算机之间进行数据同步
重要功能:
1. 如果是远程拷贝的话,相当于scp 功能,scp 就是加密的拷贝。
2. 如果是本地拷贝的话,相当于cp 命令
3. 如果是删除文件的话,相当于rm 命令
rsync 可以是一个网络服务port、socket(服务)在同步备份数据时,默认情况下,rsync 通过其独特的"quick check"算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可以根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据。
提示:
传统的cp,scp 工具拷贝每次均为完整拷贝,而rsync 除了可以完整拷贝外,还具备增量拷贝功能,因此,从同步数据的性能及效率上,rsync 工具更胜一筹。


1.2.2 Rsync 的特性
1. 支持拷贝特殊文件如链接文件,设备等。
2. 可以有排除指定文件或目录同步的功能,相当于打包命令tar 的排除功能。
3. 可以做到保持源文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变(-p)
4. 可以实现增量同步,即只同步发生变化的数据,因此数据传输效率很高,tar -N。
5. 可以使用rcp,rsh,ssh 等方式来配合传输文件(Rsync 本身不对数据加密)
6. 可以通过socket(进程方式)传输文件和数据(服务器和客户端)
7. 支持匿名或认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份及镜像。


1.3 rsync 命令说明
提示:
rsync 命令是客户端命令
Rsync 参数:
参数 描述
-a 保持属性不变,-a --归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl
-v 详细模式输出,传输时的进度等信息。
-z 传输时进行压缩提高传输效率
-e --rsh=COMMAND 使用的信道协议,指定替代rsh 的sheel 程序,设置传输隧道 如:ssh -p 22
-P --progress 显示同步的过程及传输时的进度等信息。
-r --recursive 对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r
-t --times 保持文件时间信息
-o --owner 保持文件属主信息
-p --perms 保持文件权限
-g --group 保持文件属组信息
-D --devices 保持设备文件信息
-l --links 保持软硬链接
排除参数:
--exclude=PATTERN 指定排除不需要传输的文件模式
--exclude-from=file (文件名所在的目录文件)
--exclude=abc 排除一个文件
--exclude={a,c} 排除多个文件
--compress-level=NUM 可按级别压缩


1.4 Rsync服务器配置(守护进程)工作模式
1. 四台服务器运行rsync --version 查看版本号 (CRT 交互窗口)

[root@Rsync-SERVER-14 /]# rsync --version #查看rsync 版本号
rsync version 3.0.6 protocol version 30
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, symtimes
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.

2. 配置Rsync 服务文件(rsyncd.conf)

[root@Rsync-SERVER-14 /]# rpm -qa |grep rsync #查看是否安装了rsync
rsync-3.0.6-12.el6.i686
[root@Rsync-SERVER-14 /]# touch /etc/rsyncd.conf #默认rsync 配置文件不存在需要手动创建
[root@Rsync-SERVER-14 /]# ls /etc/rsyncd.conf
/etc/rsyncd.conf
[root@Rsync-SERVER-14 /]# vim /etc/rsyncd.conf #编辑rsyncd.conf 文件添加内容
#Rsync server
#Created by Jonny 21:30 2015-10-28
##rsyncd.conf start ##
uid = rsync #客户端连到服务器用户具备什么权限,客户端就具备这个用户的权限
gid = rsync #客户端连到服务器组具备什么权限,客户端就具备这个组的权限
use chroot = no #当程序出现漏洞的时候,开启给一个空目录,出现漏洞的时候,把漏洞定向到空目
录
max connections = 2000 #客户端连接数,同时连接2000 个
timeout = 600 #超时时间,客户端连服务器600 秒都不做任何操作就会断掉连接
pid file = /var/run/rsyncd.pid #rsync 的进程号放/var/run/rsyncd.pid,好处是将来不用看进程直
接看pid 就可以管理rsync 服务
lock file = /var/run/rsyncd.lock #lock file 指定支持max connections 参数的锁文件,默认值是
/var/run/rsyncd.lock
ignore errors #忽略错误
read only = false #只读是假的,可读写 true(真)
list = false #列表是假,不能看服务器有什么true(真)
hosts allow = 192.168.1.0/24 #允许IP 段
hosts deny = 0.0.0.0/32 #阻止网段
auth users = rsync_backup #认证用户(虚拟用户)
secrets file = /etc/rsync.password #存放用户和密码的文件(格式 用户:密码)
######################################
[backup] #共享模块名称
comment = backup server by Jonny 21:35 2015-10-28 #注释说明
path = /backup #共享模块路径
更多的配置man rsyncd.conf

3. 启动rsync 服务

[root@Rsync-SERVER-14 /]# rsync –daemon #启动rsync 服务
[root@Rsync-SERVER-14 /]# ps -ef |grep rsync|grep -v grep #查看rsync 服务是否正常
root 3457 1 0 07:40 ? 00:00:00 rsync --daemon
[root@Rsync-SERVER-14 /]# netstat -lntp |grep rsync #查看rsync 的服务侦听情况
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
3457/rsync
tcp 0 0 :::873 :::* LISTEN
3457/rsync
[root@Rsync-SERVER-14 /]# lsof -i ":873" #根据端口号查看rsync 服务
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 3457 root 3u IPv4 18925 0t0 TCP *:rsync (LISTEN)
rsync 3457 root 5u IPv6 18926 0t0 TCP *:rsync (LISTEN)
[root@Rsync-SERVER-14 /]# ss -lntup |grep rsync #ss 也可以查看rsync 服务
tcp LISTEN 0 5 :::873 :::*
users:(("rsync",3457,5))
tcp LISTEN 0 5 *:873 *:*
users:(("rsync",3457,3))

4.创建Rsync用户

[root@Rsync-SERVER-14 /]# useradd rsync -M -s /sbin/nologin #创建rsync 虚拟用户

5.创建共享目录

[root@Rsync-SERVER-14 /]# mkdir /backup #创建共享模块的目录

6.授权rsync用户

[root@Rsync-SERVER-14 /]# chown -R rsync /backup #设置/backup 目录属主为rsync
[root@Rsync-SERVER-14 /]# ls -ld /backup/ #检查是否设置好
drwxr-xr-x. 2 rsync root 4096 Oct 26 07:48 /backup/

7.创建密码文件

[root@Rsync-SERVER-14 /]# echo "rsync_backup:oldboy" >/etc/rsync.password  #创建密码文件
[root@Rsync-SERVER-14 /]# cat /etc/rsync.password        #检查是否创建好rsync_backup:oldboy
[root@Rsync-SERVER-14 /]# chmod 600 /etc/rsync.password  #因为是密码文件,所有设置权限600
[root@Rsync-SERVER-14 /]# ls -ld /etc/rsync.password     #检查是否设置好
-rw-------. 1 root root 510 Oct 26 07:19 /etc/rsync.password

1.5 Rsync客户端配置

1. 需要创建密码文件输入里面的密码需要跟服务器一样,因为当客户端连接服务器的时候,服务器会跟客户端要密码,要的就是跟服务器相同的密码。

[root@NFS-SERVER-11 ~]# echo "oldboy" >/etc/rsync.password
[root@NFS-SERVER-11 ~]# chmod 600 /etc/rsync.password

2. 客户端推送文件到服务器

提示:
推拉都是客户端操作的

[root@NFS-SERVER-11 /]# rsync -avzP /etc/hosts rsync_backup@192.168.1.14::backup
--password-file=/etc/rsync.password
sending incremental file list
hosts
158 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
sent 120 bytes received 27 bytes 294.00 bytes/sec
total size is 158 speedup is 1.07

3.Rsync服务器查看是否推送到/backup/

[root@Rsync-SERVER-14 /]# ls /backup/
11 hosts

4. 客户端向服务器拉取数据

[root@NFS-SERVER-11 ~]# rsync -avz rsync_backup@192.168.1.14::backup /tmp/
--password-file=/etc/rsync.password
receiving incremental file list
./
11
hosts
test/
test/hosts
sent 128 bytes received 410 bytes 1076.00 bytes/sec
total size is 316 speedup is 0.59
[root@NFS-SERVER-11 ~]# ls /tmp/
hosts