三、rsync数据备份
1. RSYNC概述:RSYNC是Remote Sync 远程同步的简称,与SCP的比较,SCP= 无法备份大量数据,类似windows的复制,而rsync=边复制 ,边统计,边比较,可以备份大量数据。
Rysnc特性和优点
可以镜像保存整个目录树和文件系统。
可以很容易做到保持原来文件的权限、时间、软硬链接等等。
无须特殊权限即可安装。
快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。
压缩传输:rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
支持匿名传输,以方便进行网站镜象。
选择性保持:符号连接,硬链接,文件属性,权限,时间等。
常见备份分类
完整备份,差异备份,增量备份
完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地
差异备份:备份上次完全备份以后有变化的数据(他针对的上次的完全备份,他备份过程中不清除存档属性)
增量备份:备份上次备份以后有变化的数据.(他才不管是那种类型的备份,有变化的数据就备份,他会清除存档属性)
运行模式和端口
采用C/S模式(客户端/服务器模式)
[ 就是一个点到点的传输,直接使用rsync命令 ] 端口873
发起端和备份源
四个名词的解释:
发起端:负责发起rsync同步操作的客户机叫做发起端,通知服务器我要备份你的数据
备份源:负责相应来自客户机rsync同步操作的服务器在备份源,需要备份的服务器
服务端:运行rsyncd服务,一般来说,需要备份的服务器
客户端:存放备份数据
数据同步方式
推push:一台主机负责把数据传送给其他主机,服务器开销很大,比较适合后端服务器少的情况
拉pull:所有主机定时去找一主机拉数据,可能就会导致数据缓慢
推:目的主机配置为rsync服务器,源主机周期性的使用rsync命令把要同步的目录推过去(需要备份的机器是客户端,存储备份的机器是服务端)
拉:源主机配置为rsync服务器,目的主机周期性的使用rsync命令把要同步的目录拉过来(需要备份的机器是服务端,存储备份的机器是客户端)
两种方案,rsync都有对应的命令来实现
Xinetd管理Rsync工作原理
使用rsync来同步是先通过xinetd监听873号端口,如果rsync进来的是873号端口,那么xinetd就会通知它所管辖的rsync服务来做回应,接下来就是rsync俩服务于之间的通讯。
Rsync服务安装
实验拓扑:
xiaolyu76(Server 192.168.31.76)====xiaolyu77(Client 192.168.31.77)
Rsync服务依赖Xinetd,是使用超级服务来管理的
yum 安装:
[root@xiaolyu76 ~]# yum install -y xinetd
[root@xiaolyu76 ~]# vim /etc/xinetd.d/rsync
[root@xiaolyu76 ~]# /etc/init.d/xinetd restart #重启xinetd。
[root@xiaolyu76 ~]# netstat -antup | grep 873 #查看873号端口是否是xinetd。
Rsync命令
rsync命令和scp命令很相似,可以man rsync看一下。
-a, --archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等
-r, --recursive 复制所有下面的资料,递归处理
-p, --perms 保留档案权限 ,文件原有属性
-t, --times 保留时间点,文件原有时间
-g, --group 保留原有属组
-o, --owner 保留档案所有者(root only)
-D, --devices 保留device资讯(root only)
-l, --links 复制所有的连接 ,拷贝连接文件
-z, --compress 压缩模式, 当资料在传送到目的端进行档案压缩.
-H, --hard-links 保留硬链接文件
-A, --acls 保留ACL属性文件,需要配合--perms
-P,-P参数和 --partial --progress 相同.只是为了把参数简单化,表示传进度
--version, 输出rsync版本
-v , --verbose 复杂的输出信息
-u, --update 仅仅进行更新,也就是跳过已经存在的目标位置,并且文件时间要晚于要备份的文件,不覆盖新的文件
--port=PORT, 定义rsyncd(daemon)要运行的port(预设为tcp 873)
--delete, 删除那些目标位置有的文件而备份源没有的文件
--password-file=FILE ,从 FILE 中得到密码
--bwlimit=KBPS, 限制 I/O 带宽
--filter “-filename”,需要过滤的文件
--exclude=filname,需要过滤的文件
--progress,显示备份过程
常用的 –avz
使用rsync备份数据
对xiaolyu76网站根目录的/var/www/html目录备份到xialyu77的/web-back
2. 用系统用户,实现rsync远程数据备份1. 建立测试用户
[root@xiaolyu76 ~]# useradd rget1 //测试用户,rget1用于下载
[root@xiaolyu76 ~]# echo rget1:123456 | chpasswd
[root@xiaolyu76 ~]# useradd rput1;echo rput1:123456 | chpasswd //测试用户,rput1用户上传、
对目录赋予ACL权限
[root@xiaolyu76 ~]# setfacl -R -m user:rput1:rwx /var/www/html/ //rput1用户可以对目录拥有读写权限
[root@xiaolyu76 ~]# setfacl -R -m default:user:rput1:rwx /var/www/html/ //设置默认情况下,rput1对目录/var/www/html下的所有文件拥有读写权限
[root@xiaolyu76 ~]# setfacl -R -m user:rget1:rwx /var/www/html/
[root@xiaolyu76 ~]# setfacl -R -m default:rget1:rwx /var/www/html/
[root@xiaolyu76 ~]# getfacl --omit-header /var/www/html
getfacl: Removing leading '/' from absolute path names
user::rwx
user:rget1:rwx
user:rput1:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:rget1:rwx
default:user:rput1:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
2. 数据的准备工作;
[root@xiaolyu76 ~]# cp -r /boot/* /var/www/html/ # /boot目录下的所有数据作为测试数据。
注意:因为我们这里在创建测试用户的时候,针对某一个用户赋予某一个目录的ACL默认权限,这实际上是用到了ACL的权限继承。ACL的权限继承只有在设置好目录的默认权限之后,在该目录下,新创建的文件才可以继承该目录的权限。所以一定要在创建用户和ACL权限设置完成后,再做测试数据的准备工作。
3.开始测试:
//boot目录下的所有数据作为测试数据
[root@xiaolyu77 ~]# rsync -avz --delete rget1@192.168.31.76:/var/www/html/ /web-back/
格式几乎同scp一模一样,所以在前面详细讲了scp的用法。
……
rsync: send_files failed to open "/var/www/html/initramfs-2.6.32-431.el6.x86_64.img": Permission denied (13)
……
……
rsync: send_files failed to open "/var/www/html/grub/grub.conf": Permission denied (13)
#几行报错,排错
同步数据出错排查:根据我们前面对acl文件的了解,显然acl文件出现权限问题,第一步就是getfacl查看实际权限。
[root@xiaolyu76 ~]# getfacl --omit-header /var/www/html/initramfs-2.6.32-431.el6.x86_64.img
[root@xiaolyu76 ~]# getfacl --omit-header /var/www/html/initramfs-2.6.32-431.el6.x86_64.img
[root@xiaolyu76 ~]# getfacl --omit-header /var/www/html/lost+found
显然,由于我们前面的分析,知道因为mask没有权限,所以rget1实际上没有任何权限。解决方法就是加上权限。
解决方法:添加权限。
[root@xiaolyu76 ~]# chmod 744 /var/www/html/initramfs-2.6.32-431.el6.x86_64.img
[root@xiaolyu76 ~]# getfacl --omit-header /var/www/html/initramfs-2.6.32-431.el6.x86_64.img
同理方法修改
/var/www/html/grub/grub.conf
/var/www/html/lost+found
[root@xiaolyu76 ~]# chmod 744 /var/www/html/grub/grub.conf
[root@xiaolyu76 ~]# chmod 744 /var/www/html/lost+found
再次客户端测试
[root@xiaolyu77 ~]# rm -rf /web-back/*
[root@xiaolyu77 ~]# rsync -avz --delete rget1@192.168.31.76:/var/www/html/ /web-back/