rsync是什么

rsync全称Remote Sync ,远程同步,是Linux/UNIX系统下的文件同步和数据传输工具,数据备份,它采用了“rsync算法”使一个客户机和远程文件服务器之间的文件同步。

作用

可以将同一个服务器的数据从一个分区备份到另一个分区,也可以将本地系统的数据通过网络传输方式备份到任何一个远程主机上;

优点

rsync可以在中断后恢复传输

rsync的功能特性

可以镜像保存整个目录树和文件系统; 可以增量同步数据,文件传输效率高,因而同步时间很短; 可以保持原文件的权限、时间、软硬链接等属性; 无需特殊权限即可安装; 快速:第一次同步时rsync会复制全部内容,但在下一次只传输修改过的文件; 压缩传输:rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽; 加密传输数据,保证了数据的安全性; 可以使用scp、ssh等方式来传输文件,也可以通过直接的socket链接; 支持匿名传输,以方便进行网站镜像;

xinetd管理rsync工作原理

xinetd,超级互联网守护进程服务,管理服务 使用rsync来同步是先通过xinetd监听873号端口,如果rsync进来的是873号端口,那么xinetd就会通知它所管辖的rsync服务来做回应,接下来就是rsync两服务之间的通讯。 rsync服务依赖xinetd,是使用超级服务来管理的。

环境

两台服务器 分别安装rsync服务和xinetd 原服务器:192.168.80.100 目的服务器:192.168.80.101

安装rsync

yum install -y xinetd rsync 开启服务 rsync --daemon 检查是否开启服务 netstat -anpt | grep 873

rsync主要命令选项

-r:递归模式,对子目录以递归模式处理 -l:--links 保留软链结 -v:--verbose 详细模式输出 -a:--archive 权限保存模式,表示以递归方式传输文件,并保持所有文件属性,相当于-rlptgoD -z:--compress 压缩模式,对备份的文件在传输时进行压缩处理 -p:--perms 保持文件权限,文件原有属性。 -o:--owner 保持文件原有属主信息。 -g:--group 保持文件原有属组信息。 -D:--devices 保持设备文件信息。 -t:--times 保持文件时间信息。 -A:保持ACL属性信息 -D:保留设备文件及其其他特殊文件 --delete:删除目标位置有而原始位置没有的文件 --password-file=FILE,从FILE中得到密码 例如:rsync -avz --delete /var/www/html/ rget1@192.168.80.101:/web-back 注:通常avz一起使用

开始同步

对192.168.80.100 网站根目录的/var/www/html目录备份到192.168.80.101的/web-back 在源服务器和目标服务器上: useradd rget1;echo rget1:123456|chpasswd //创建用户并设置密码

创建同步文件目录

mkdir -p /var/www/html/

给文件目录单用户授权

setfacl -R -m u:rget1:rwx/var/www/html/

设置默认权限

setfacl -R -m default:rget1:rwx /var/www/html

查看权限

getfacl /var/www/html

给同步目录添加文件

cp -rf /etc/b* /var/www/html

在目标服务器 创建一个同步目录

mkdir /web-back

修改归属

chown rget1:rget -R /web-back/

在源服务器推送数据

rsync -avz --delete /var/www/html/ rget1@192.168.80.101:/web-back 目的服务器同步目录: 注:如果只想传输目录下的内容,在该目录后面加“/”,如果想连该目录一起传输,就不加“/”. 以上是使用系统用户备份数据

非系统用户备份数据

使用系统配置文件/etc/rsyncd.conf来备份数据,创建备份账户,最后把rsync以deamon方式运行。 rsync.conf配置文件分为两部分:全局参数,模块参数 全局参数:对rsync服务器生效,如果模块参数和全局参数冲突,冲突的地方模块参数优先。 模块参数:定义需要通过rsync输出的目录定义的参数。

在目的服务器上配置rsyncd.conf 配置文件详解

该配置文件在centos 6.x版本中没有,在centos 7.x才有 vi /etc/rsyncd.conf  uid = root #用户ID gid = root #用户组ID address = 192.168.80.100 #监听地址 port = 873 #监听端口 hosts allow = 192.168.80.0/24 #黑名单 use chroot = yes #禁锢家目录
max connections = 10 #最大并发连接数,默认0(无限制) strict modes = yes #是否检查口令文件的权限,yes时必须为root用户权限 pid file = /var/run/rsyncd.pid #守护进程PID路径 lock file = /var/run/rsync.lock #指定支持max connections的锁文件 log file = /var/run/rsyncd.log #日志输出文件路径 motd file = /etc/rsyncd.motd #指定消息文件,当客户连接服务器时给文件的内容显示给客户,默认没有该文件   [www] #自定义模块名称 path = /web-back/ #需备份的文件或目录,真实系统路径 comment = ftp area #描述文字 ignore errors #可以忽略一些无关的I/O错误 read only = false #false:客户端可以上传文件 yes:只读 write only = false #false:客户端可以下载文件 yes:不能下载 hosts allow = * #*:允许连接任何主机 hosts deny = 192.168.100.10 #禁止连接rsync服务器的IP list = yes #客户端请求可以使用的模块列表时,该模块是否被列出 uid = root
gid = root auth users = backup #用户名backup,与系统用户没有任何关系 secrets file = /etc/server.pass #只有定义了auth users项,该文件才起作用,默认没有此文件,须手动创建(文件格式为:"用户名:密码")

创建motd文件

echo "welcome to backup server" > /etc/rsyncd.motd

创建密码文件(文件格式:user:pass)

vi /etc/server.pass backup:123456

修改密码文件权限

chmod 600 /etc/server.pass

重启服务

pkill -9 rsync systemctl start xinetd systemctl enable xinetd rsync --daemon --config=/etc/rsyncd.conf 注:启动时有可能报pid错误 如果报pid错误就把pid文件删除 netstat -anpt | grep 873 以上在目的服务器中配置

在源服务器中:

rsync -avz --delete /var/www/html/ backup@192.168.80.101::www 192.168.80.101是目的服务器地址

无密码交互传输:

在原服务器中创建一个密码文件 vi /etc/server.pass 注:文件要和目的文件一样

实时同步

rsync -avz --delete /var/www/html/ backup@192.168.80.102::www --password-file=/etc/server.pass

脚本实现定时自动备份

vi autobackup.sh #!/bin/bash rsync -avz --delete /var/www/html backup@192.168.80.101::www --password-file=/opt/file

授权

chmod +x autobackup.sh

周期计划

crontab -e 1 * * * * sh /root/autobackup.sh &

配置sersync+rsync实现实时同步

环境

一台装sersync服务 一台装rsync服务 sersync服务器(数据源,源服务器):192.168.80.100 rsync服务器(备份端,目标服务器):192.168.80.101

1、为什么要用rsync——sersync架构

(1)sersync是基于inotify开发的,类似于inotify-tools的工具 (2)sersync可以记录下被监听目录中发生变化的(包括增加,删除,修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录

2、rsync+inotify-tools与rsync+sersync架构的区别

(1)rsync+inotify-tools a、inotify只能记录下被监听的目录发生了变化(增、删、改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来 b、rsync在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此效率很低

(2)rsync+sersync a、sersync可以记录被监听目录中发生变化的(增、删、改)具体某个文件或者目录的名字; b、rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。

3、同步过程

(1)在同步服务器上开启sersync服务,sersync负责监控配置路径中的文件系统时间变化; (2)调用rsync命令把更新的文件同步到目标服务器; (3)需要在主服务器配置sersync,在同步目标服务器配置rsync server(注:是rsync服务)

4、同步过程和原理

1)用户实时的往sersync服务器上写入更新文件数据; (2)此时需要在同步主服务器上配置sersync服务; (3)在另一台服务器开启rsync守护进程服务,以同步拉取来自sersync服务器上的数据;

通过rsync的守护进程服务后可以发现,实际上sersync就是监控本地的数据写入或更新时间;然后,在调用rsync客户端的命令,将写入或更新时间对应的文件通过rsync推送到目标服务器上。

部署:

1,下载sersync

wget https://github.com/wsgzao/sersync/raw/master/sersync2.5.4_64bit_binary_stable_final.tar.gz

2、解压

tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /opt mv /opt/GNU-Linux-x86 /opt/sersync cd sersync confxml.xml #配置文件 sersync2 #启动文件 cp confxml.xml confxml.xml.bak //做一个备份

配置:

vi confxml.xml 24行 <localpath watch="/var/www/html"> #监听目录 25行 <remote ip="192.168.80.101" name="www" /> #远程地址,远程目录 31行 <auth start="true" users="backup" passwordfile="/etc/rsync.passwd" />

启动

cd /opt/sersync/ ./sersync2 -d -r -o ./confxml.xml

目的服务器

watch ls -lh //以全屏方式显示ls -lh文件