一、Rsync介绍
1、什么是Rsync
Rsync是一款开源的,快速的,多功能的,可实现全量及增量(类似cp)也可以实现删除的功能(rm)的本地或服务器和服务器之间的远程数据同步备份的优秀工具。
2、Rsync的特性
(1)支持拷贝特殊文件,如链接文件、设备等
(2)拥有排除的功能(tar、find),相当于打包命令tar
它的复制可以排除某个文件再复制;
(3)可以做到保持原文件或目录的权限,时间,软硬链接,属主、组等属性均不改变,相当于cp -p
(4)还可以实现增量同步,只拷贝对方没有的东西,提高效率(tar -N)
(5)可实现通过rcp、rsh、ssh等方式来配合传输文件(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的用法一样);但是不会提示你是否覆盖,只把不一样的数据同步过去。
(1)rsync的三个参数
(2)rsync增量同步 (给你加我没有的)
目录对目录,文件对文件
只把对方没有的东西推送过去,优点是速度快,但是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地址)(4个0代表本机任意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)模块里设置的这个虚拟账号和虚拟密码。
(3)sercer做了一个映射;
rsync在做事时候是以程序用户的身份在做事,验证过来的用户,只有rsync服务承认这个用户。
rsync服务一直在监听socket(某个端口),一旦有某个用户连接,rsync进行虚拟账号验证,就启动一个子进程,然后做了一个映射,用户输入的虚拟账号映射成了LINUX的rsync系统账号,后续的子进程做事,是以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关闭
企业应用要点
在传送大量小文件时候,容易造成当机;解决方法是先打包
传送大文件失败时候(可能网络问题)可以用续传参数,或者把服务端的隐藏文件删除(因为它提前占用大小)