一、rsync是什么?
rsync全称Remote Sync ,远程同步,是Linux/UNIX系统下的文件同步和数据传输工具,数据备份,它采用了“rsync算法”使一个客户机和远程文件服务器之间的文件同步。
可以将同一个服务器的数据从一个分区备份到另一个分区,也可以将本地系统的数据通过网络传输方式备份到任何一个远程主机上;
rsync可以在中断后恢复传输;
rsync只传输源文件和目标文件之间不一致的部分;rsync可以执行完整备份或增量备份。
scp,远程传输工具,send copy,类似于windows地复制,但是无法备份大量数据
想传目录,使用 “scp -r”
rsync:可以边复制,边统计,边比较
第一次全传
第二次计算哪些文件已传送,传送过的文件就不会再传送了
也就是说,rsync只会传输两边差异的文件
都是基于ssh协议的。
二、rsync的功能特性:
可以镜像保存整个目录树和文件系统;
可以增量同步数据,文件传输效率高,因而同步时间很短;
可以保持原文件的权限、时间、软硬链接等属性;
无需特殊权限即可安装;
快速:第一次同步时rsync会复制全部内容,但在下一次只传输修改过的文件;
压缩传输:rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽;
加密传输数据,保证了数据的安全性;
可以使用scp、ssh等方式来传输文件,也可以通过直接的socket链接;
支持匿名传输,以方便进行网站镜像;
三、运行模式和端口:
采用C/S模式(客户端/服务器模式)[就是一个点到点的传输,直接使用rsync命令]
端口:873(默认)
三、发起端和同步源(备份源)
发起端:在同步任务中,负责发起rsync同步操作的客户机,通知服务器我要备份你的数据
同步源(备份源):负责响应来自于客户机的rsync同步操作的服务器,需要备份的服务器。
服务端:运行rsyncd服务,一般来说,需要备份的服务器
客户端:存放备份数据
四、数据同步方式
推(push):一台主机负责把数据传送给其他主机,服务器开销很大,比较适合后端服务器少的情况
拉(pull):所有主机定时去找一主机拉数据,可能就会导致数据缓慢
推:目的主机配置为rsync服务器,源主机周期性的使用rsync命令吧要同步的目录推过去
(需要备份的机器是客户端,存储备份的机器是服务端)
拉:源主机配置为rsync服务器,目的主机周期性的使用rsync命令把要同步的目录拉过来
(需要备份的机器是服务端,存储备份的机器是客户端)
在同步过程中,同步源负责提供文档的原始位置,而发起端对该位置具有读取权限
拓扑图如下:
五、xinetd管理rsync工作原理
xinetd,超级互联网守护进程服务,管理服务
使用rsync来同步是先通过xinetd监听873号端口,如果rsync进来的是873号端口,那么xinetd就会通知它所管辖的rsync服务来做回应,接下来就是rsync两服务之间的通讯。
rsync服务依赖xinetd,是使用超级服务来管理的。
六、安装rsync:
1、yum安装
yum install -y xinetd rsync
rsync --daemon
netstat -anpt | grep 873
2、源码编译安装rsync软件包
#解压
tar zxvf rsync-3.1.3.tar.gz -C /opt
#切换目录
cd /opt/rsync-3.1.3
#配置
./configure
#编译及安装
make && make install
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中得到密码
总结:
常用的-avz
八、使用rsync备份数据:
对192.168.80.100网站根目录的/var/www/html目录备份到192.168.80.101的/web-back
源服务器:192.168.80.100
目标服务器:192.168.80.101
在源服务器和目标服务器上:
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:rget1 -R /web-back/
rsync -avz --delete /var/www/html/ [email protected]:/web-back
注:如果只想传输目录下的内容,在该目录后面加“/”,如果想连该目录一起传输,就不加“/”
以上是使用系统用户备份数据
九、非系统用户备份数据
使用系统配置文件/etc/rsyncd.conf来备份数据,创建备份账户,最后把rsync以deamon方式运行。
rsync.conf配置文件分为两部分:全局参数,模块参数
全局参数:对rsync服务器生效,如果模块参数和全局参数冲突,冲突的地方模块参数优先。
模块参数:定义需要通过rsync输出的目录定义的参数。
2.rsync配置文件详解
该配置文件在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:www123
修改密码文件权限
chmod 600 /etc/server.pass
pkill -9 rsync
systemctl start xinetd
systemctl enable xinetd
rsync --daemon --config=/etc/rsyncd.conf
netstat -anpt | grep 873
以上在目的服务器中配置
在源服务器中:
rsync -avz --delete /var/www/html/ [email protected]::wwwroot
无密码交互传输:
新建一个文件保存帐号密码,然后在rsync命令中使用--password-file指定此文件即可
service:/etc/init.d/
systemctl:/usr/lib/systemd/system/*.service
vi /etc/rsync.passwd
www123
chmod 600 /etc/rsync.passwd
rsync -avz --delete /var/www/html/ [email protected]::wwwroot --password-file=/etc/rsync.passwd
十、脚本实现定时自动备份
vi autobackup.sh
#!/bin/bash
rsync -avz --delete /var/www/html [email protected]::wwwroot --password-file=/opt/file
chmod +x autobackup.sh
echo '01 3 * * * sh /root/autobackup.sh &' >> /var/spool/cron/root
或者:
crontab -e
1 * * * * sh /root/autobackup.sh &