Rsync

一、Rsync介绍

1、什么是Rsync

Rsync是一款开源的,快速的,多功能的,可实现全量及增量(类似cp)也可以实现删除的功能(rm)的本地或服务器和服务器之间的远程数据同步备份的优秀工具。

2、Rsync的特性

(1)支持拷贝特殊文件,如链接文件、设备等

(2)拥有排除的功能(tarfind),相当于打包命令tar

它的复制可以排除某个文件再复制;

(3)可以做到保持原文件或目录的权限,时间,软硬链接,属主、组等属性均不改变,相当于cp -p

4)还可以实现增量同步,只拷贝对方没有的东西,提高效率(tar -N

5可实现通过rcprshssh等方式来配合传输文件(rsync本身不对数据加密)

6可以通过socket(进程监听的方式接受数据)传输文件和数据(服务端和客户端)

7支持匿名或认证性质的加密传输。

3、企业中的应用

两台服务器之前进行数据同步,定时任务、数据备份(crond+rsync

工作中rsync会把宽带占满,需要加限速参数, --bwlimit=100 dbfile

二、Rsync的三种模式

1、本地间类似cp命令的复制方式

简单说就是本地间的数据同步。

 

2、网络间两台不同IP服务器间数据传输

简单说就是网络间的数据同步

 

3、socket进程监听方式启动rsync sercer

简单说就是xshell监听进程,开一个进程,接收数据。(sercer端和客户端的形式)

某一个时间点,设定定时任务,把我们需要做备份的数据推送到备份服务器上;但是我们在推送的时候,并不需要有目标路径的(其他两种要有),直接推到监听的端口上,但是数据放哪里,备份服务器说的算。客户端只需要把数据推送到服务端的端口上。

 

三、RSYNC实际用法

1#第一模式#本地传输数据同步

rsync /etc/hosts /tmp

本地间的数据同步,(cp的用法一样);但是不会提示你是否覆盖,只把不一样的数据同步过去。

 

1rsync的三个参数

 

2rsync增量同步 (给你加我没有的)

目录对目录,文件对文件

只把对方没有的东西推送过去,优点是速度快,但是rsync要有一个比对的过程。

 

3)完全同步 --delete (你多出来的给你删掉)

rsync -avz --delete

以源数据为主,把目标多余的东西删除,为了跟源文件数据同步(实现了rm的功能)

 

 

2#第二模式#网络间两台不同IP服务器间数据传输

1)先安装支持远程连接支持的环境包

 

yum -y install openssh-clients     (scp)

 

reync -avz /root/benet/ root@192.168.200.103:/tmp

然后需要知道对方的root密码 (root是对方的用户名)

2)增量复制(只复制,不影响对方;不同步)

scp benet2/test 192.168.200.103:/tmp/

默认以超级用户登陆对方机器  IP前面可以不加东西,不写就默认root

3)把对方的文件复制回来

scp root@192.168 200.76 :/etc/hosts .

(4)增量复制和完全复制rsync

reync -avz /root/benet/ root@192.168.200.103:/tmp

reync -avz /root/benet/ root@192.168.200.103:/tmp --delete

 

3#第三模式#传输到对方指定端口(默认22,也可以指定端口)

远程连接配置文件 /etc/ssh/sshd config(修改端口最好是1000以上的,因为1000以下的都是被设定好的,容易起冲突,导致服务无法重新启动)

##一旦修改了配置文件,需要重新启动这个服务

rsync -avzP -e ‘ssh -p 22’ /etc/ root@192.168.197.129:/tmp/

这个命令可以指定端口,如果对方是22端口,就不用-e及后面的参数;P是不改变原文件属性

4#第三模式过程#多组服务器之前,以socket进程监听方式启动rsync sercer

1)首先服务端要启动一个配置文件(默认不存在)

先创建/etc/rsyncd.conf  (配置文件)

vim打开

2)在里面输入内容

uid = rsync  (程序用户)

gid = rsync  (组用户)

use chroot = no  (不打开安全设置)

max connections=200 (我允许200个客户端同时向我推送数据)

timeout = 300  (超时时间:最多300)

pid file = /var/run/rsyncd.pid   PID文件保存的路径)(##每个进程都有PID文件,启动以后默认生产一个含有PID号的文件,脚本看本地有没有PID这个文件,如果服务启动就会生成这个文件,如果服务关闭,pid文件就会删除。(如果这个文件这个服务就是启动,如果不存在,这个服务就是没启动))   kill `cat pid文件的路径`  (方便的杀)

 

lock file = /var/run/rsyncd.lock  (如果多个进程同时打开同一个目录或文件,要有先后顺序;进程锁)

log file = /var/log/rsyncd.log (日志文件)

[backup]   (模块,下面的配置只对这个模块生效;上面的是全局配置。)

path = /backup/  (客户端向我推送的数据,我默认放在这个目录下)

ignore errors  (错误时候忽略)

read only = false (只读关闭,变成读写模式)

list = false  (客户端能不能以列表的方式看服务端目录里都有什么,不行)

hosts allow = 192.168.154.0/24  (允许哪些IP地址过来;直接开个网段)

host deny = 0.0.0.0/24 (不允许哪些IP地址连接,本机所有IP地址)40代表本机任意IP地址)如果是 0.0.0.0/32 全没有,加上前面的host deny 所有都不拒绝

auth users = rsync_backup (配置文件里创建一个虚拟账号:rsync_backup)

secrets file = /etc/rsync.password  (密码设置的位置)

 

(3)复制版本

uid = rsync

gid = rsync

use chroot = no

max connections=200

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/log/rsyncd.log

[backup]

path = /backup/

ignore errors

read only = false

list = false

hosts allow = 192.168.154.0/24

host deny = 0.0.0.0

auth users = rsync_backup

secrets file = /etc/rsync.password

四、服务端设置过程

1)客户端要告诉server端,我要推送给配置文件的哪个模块;

服务端会按照那个模块的配置的路径去放数据,比如backup模块;推送到这个模块,就存放在那个模块设置的存储位置path = /backup

2)服务端要对客户端有一个验证模块下的用户名和密码

(为了安全,不能什么客户端都能连接得进来!!)必须要指定服务端设置的账号和密码才能让客户端连接进来。(rsync_backup   /etc/rsync.password)模块里设置的这个虚拟账号和虚拟密码。

3sercer做了一个映射;

rsync在做事时候是以程序用户的身份在做事,验证过来的用户,只有rsync服务承认这个用户。

rsync服务一直在监听socket(某个端口),一旦有某个用户连接,rsync进行虚拟账号验证,就启动一个子进程,然后做了一个映射,用户输入的虚拟账号映射成了LINUXrsync系统账号,后续的子进程做事,是以rsync设定的程序用户在做事,但是在客户端请求登陆过来的时候,是以虚拟账号验证的;这种好处是:就算虚拟账号被公开,也登陆不了Linux系统,这是一个安全措施。

这个虚拟账号只有socket进程知道,你连过来以后socket进程给你转换成了系统的程序用户登陆账号。

4)备份服务器创建一个程序用户

useradd -M -s /sbin/nologin rsync

5)让rsync能用往/backup目录里写东西

chown rsync.rsync /backup  更改属主

(6)启动rsync服务

rsync --daemon (启动守护进程)

netstat -antup | grep rsync 看后台是否启动

7)创建rsync虚拟账号和密码

因为配置文件里写的密码指向一个路径,所以我们要创建这个文件

vim /etc/rsync.password

里面写:

rsync_backup:123456  (账号:密码 )

7)将账号密码文件权限设置为600(否则会失败)

chmod 600 /etc/rsync.password

600代表只能root账号看和写,其他人不能看

8)加入开机启动

echo “rsync --daemon” >> /etc/rc.local

五、客户端设置

1、创建一个密码文件(只需要密码文件)

echo “123456” > /etc/rsync.password

chmod 600 /etc/rsync.password

2、手动模拟推送

rsync -avz /root/www rsync_backup@192.168.200.84::backup

直接写虚拟账号,后面两个冒号接模块名,不需要路径

3、一次性推送(脚本用)不需要输入密码

rsync -avz /root/www rsync_backup@192.168.200.84::backup --password-file=/etc/rsync.password

后面直接跟自己这边的密码文件,就不用输入密码了。

客户端只写密码

六、要点

服务端:

1/etc/rsyncd.conf

2/etc/rsync.password

3、密码文件权限600

4、创建/backup数据目录

5、数据目录属主程序用户

6、常见程序用户

7、启动rsync --daemon

8、端口873

客户端:

创建一个密码文件(只写密码就行)

文件权限600

双方必须要关闭防火墙和se  LINUX

service iptables stop   防火墙关闭

selenforce 0     seLinux关闭

企业应用要点

在传送大量小文件时候,容易造成当机;解决方法是先打包

传送大文件失败时候(可能网络问题)可以用续传参数,或者把服务端的隐藏文件删除(因为它提前占用大小)

原文地址:https://www.cnblogs.com/kakajiang/p/10009730.html