- rsync命令
- rsync命令的特点
- 本地的数据传输模式
- 递归的把/dzc文件夹中所有的子内容,进行拷贝
- 递归把/dzc整个文件夹,及其字内容,都拷贝
- 这种操作叫做差异化删除,如果文件中没有任何内容,相应的目标文件也会变得没有任何内容,原内容都会进行删除,如果文件夹中内有文件,目标文件也会变成和他一样文件,即做到了删除和复制
- 远程的数据传输命令
- rsync数据推拉模式
- rsync实践
- 在生产环境,使用ssh的免密登录来操作
- rsync守护模式传输
- rsync配置文件解析
- 推送数据
- 拉取数据
- rsync排错
- Rsync扩展
- 推送数据,本地推给服务端
- 拉取数据,拉取backup模块下的数据
- 推送数据
- 拉取数据
- 排除所有txt文件
- 数据无差异拉取,保证客户端本地和rsync服务端的数据一致
- 数据无差异推送,这个命令可能会误删备份服务器上的数据,注意参数使用
- 断点续传
- 推送服务并加上断点续传功能,如果突然断开了传输,数据则会保存在backup模块下名为tmp的目录下
- 实时数据备份实践
- 实时复制的软件介绍
rsync命令
全量数据备份,以及增量数据备份本地,远程的数据同步,一款优秀的工具
rsync可以类似于cp一样,本地的数据拷贝
也能像scp进行远程的数据拷贝
还支持守护进程方式数据拷贝
delta-transfer算法,实现增量复制
scp远程数据传输,只能实现全量数据传输
rsync命令的特点
- 可以实现cp效果,本地数据备份
- 实现远程数据同步复制,如scp效果
- 如rm效果,可以删除本地文件
- 也可以实现远程的数据查看,例如远程的ssh+ls命令执行
软件特性:
- rsync支持普通文件拷贝,支持特殊文件拷贝,link,c设备文件
- 还支持文件排列,可以指定不拷贝那些文件
- 还能实现数据拷贝后,属性不发生变化(stat命令查看)
- 支持增量数据备份
- rsync可以配合ssh实现安全的数据传输,rsync本身不支持数据加密
- rsync支持匿名用户传输
增量?全量传输
rsync在数据备份的时候,通过其quick check算法,检测数据、容量,最后的修改时间变化
rsync甚至可以复制单个文件中的内容变化
增量传输的原理就是,一边对比差异,一边对比差异进行数据复制,centos7上的3.x版本,效率更高本地的数据传输模式
类似于cp、ls、touch命令的增删改查,实现数据的增量备份
语法:rsync 可选参数 src源文件/源目录 dest目标文件/目录
本地的文件复制
rsync /etc/hosts /tmp/ #对目标文件进行一个指定位置的备份
复制文件夹,及其子内容
-r 对子目录进行递归操作
递归的把/dzc文件夹中所有的子内容,进行拷贝
rsync -r /dzc/ /tmp/
递归把/dzc整个文件夹,及其字内容,都拷贝
rsync -r /dzc /tmp/
- 差异化删除数据
—delete参数,删除目标文件中,src没有的文件
rsync -r —delete /kong/ /tmp/
这种操作叫做差异化删除,如果文件中没有任何内容,相应的目标文件也会变得没有任何内容,原内容都会进行删除,如果文件夹中内有文件,目标文件也会变成和他一样文件,即做到了删除和复制
远程的数据传输命令
借助于ssh服务在两台机器之间进行数据传输,此时已经没有客户端、服务器之分,而是一种相对的关系
scp命令
登录在A机器,想要B机器的数据
scp root@B:/opt/nigxin.sh /opt/nginx.sh.bak
登录在A机器,想要A机器的数据发送给B
scp /tmp/my.txt root@B:/tmp/
rsync数据推拉模式
远程的数据传输模式,有两种情况,推送or拉取
- 拉取:把远端服务器的数据,拉去到本地来
- 推送:把本地的数据,推送,上传发给远程的服务器
拉取pull
语法:rsync 参数 用户名@ip:源资料路径 本地路径
推送push
语法:rsync 参数 本地文件路径 用户名@ip:目的地路径
rsync实践
- 初始化的环境配置,先准备3台linux虚拟机,建议单独安装,不要克隆
- 选择NAT上网方式,只需ip地址不同即可
如:
192.168.47.128 web01 nginx web静态服务器
192.168.47.129 rsync01 rsync备份服务器
192.168.47.130 nfs01 nfs01文件共享服务器
三台虚拟机都要安装好rysnc服务 ==>> yum install rsync -y
rsync远程传输命令
- 拉取远程主机的文件数据,拷贝到本地来
-e 指的是可以使用ssh方式进行加密,安全的传输
-a 压缩模式传输,且保持所有文件源属性
-v 详细输出的参数
在生产环境,使用ssh的免密登录来操作
rsync -av -e ‘ssh -p 22’ root@192.168.47.128:/tmp/hh.txt /tmp/
- 把本地的数据,推送到远程服务器的目录下
rsync -av /tmp/cc.txt root@192.168.47.128:/tmp/
rsync守护模式传输
在生产环境中,使用的守护模式更多一点,rsync守护模式传输是在客户端与服务端之间的数据复制
- 服务端需要配置好守护进程,等待客户端远程的执行数据同步命令,然后实现数据的拉取、推送
语法:
- 拉取模式的语法
rsync 参数 user@ip::src dest #推荐用这个写法,效果是一样的
rsync 参数 rsync://user@ip:port/src dest #prot是端口号
- 推送模式的语法
rsync 参数 src user@host::dest
rsync 参数 src rsync://user@host:port/dest
rsync守护传输模式实践配置
- 检查三台机器的内核版本、系统环境、rsync软件包情况
uname -r cat /etc/redhat-release rpm -qa rsync
rsync守护进程数据传输原理解析
| 步骤 | rsync服务端操作 | 形象对比 |
|---|---|---|
| 1 | 明确rsync软件安装 | 明确自己是否有一个房间可以当做仓库 |
| 2 | 修改rsync的服务端配置文件,定义功能 | 设计,规划一个房间想要改造成仓库 |
| 3 | 创建rsync服务的虚拟用户 | 找一个仓库的管理员 |
| 4 | 创建rsync备份目录,以及用虚拟用户授权 | 明确仓库中有柜子可以用于存储东西,这个管理员有权限打开,关闭这个柜子 |
| 5 | 配置rsync秘钥文件,以及对秘钥文件授权600,user,group,other的权限 | 仓库的柜子需要保证安全,给他加个密码锁 |
| 6 | 启动rsync服务,开始工作 | 仓库开门营业 |
| 7 | 设置rsync开机启动 | 明确仓库每天的营业时间 |
rsync配置文件解析
确保服务器安装了rsync
rpm -q rsync #查看是否存在rsync的安装软件 yum install rsync -y #老样子,没安装我们安装上
修改服务器配置文件
vim /etc/rsyncd.conf #我们在最后写入如下参数,原有的不用管它,是一个书写的模板
rsync服务端部署操作
根据rsyncd.conf中定义的用户、目录等信息,进行创建
useradd rsync -s /sbin/nologin -M mkdir -p /backup chown -R rsync.rsync /backup
配置用rsync进行复制验证的账号、密码、文件等信息
echo “rsync_backup:chuange” > /etc/rsync.password chmod 600 /etc/rsync.password
启动rsync服务,以及检查服务器开机自启
systemctl start rsyncd systemctl restart rsyncd systemctl status rsyncd systemctl enable rsyncd
检查rsync服务端状态,进程端口
netstat -tunlp | grep rsync ps -ef | grep rsync
rsync客户端部署操作
- 检查客户端rsync安装情况
创建于rsync连接的账密文件
echo “chuange” > /etc/rsync.password #这里我们要与服务端相对应
对密码进行文件授权
chmod 600 /etc/rsync.password
除了使用这种密码文件的形式,rsync也支持使用变量的方式,省略指定密码验证
export RSYNC_PASSWORD=chuange echo $RSYNC_PASSWORD
永久生成此变量
echo “export RSYNC_PASSWORD=chuange” >> /etc/profile
实例:推拉数据
推送数据
rsync -avzP /my_rsync rsync_backup@192.168.47.132::backup —password-file=/etc/rsync.password
拉取数据
rsync -avzP rsync_backup@192.168.47.132::backup /opt/newtt —password-file=/etc/rsync.password
-a 保持文件属性不变
-v 显示传输的细节
-z 对传输的数据进行压缩传输,提升效率
-P 显示文件传输的进度信息
/my_rsync 和 /my_rsync/ 的区别,一个是整个文件夹,一个是文件夹内的所有子文件,注意好斜杠的使用
::backup 指的是在配置中设定的[backup]模块,实际根据模块来决定,设置的备份路径也是一样的,都可以,但是要对上
rsync排错
rsync服务端排错思路
- 检查rsync服务端的配置文件路径是否正确:/etc/rsyncd.conf
- 查看配置文件的 host allow , host deny 允许的ip网段是否允许客户端访问
- 查看配置文件中的path参数路径是否存在,权限是否正确(和配置文件UID参数对应)
- 查看rsync服务是否启动,端口、进程是否存活
- 查看iptables防火墙、selinux是否允许rsync服务通过,或是关闭
- 查看服务端rsync配置文件的密码文件,权限是否600,格式,语法是否正确,且和配置文件的secrect files参数对应
如果是推送数据,要查看配置rsyncd.conf中的用户对改rsync模块下的文件是否可以读取
rsync客户端排错
查看rsync客户端配置的密码文件权限是否600,密码文件格式是否正确,是否和服务端的密码一致
- 尝试telent连接rsync服务端的873端口,检测服务是否可以连接
- 客户端执行命令要检查细心
Rsync扩展
rsync多模块
修改rsyncd.conf主配置文件,在最底行加入如下信息
[myweb] comment = This is chaoge web static; path = /web_static/
修改完配置文件后,要创建目录与权限
mkdir -p /web_static chown -R rsync.rsync /web_static
重启rsync服务端
systemctl restart rsyncd
实践操作
与backup模块进行数据推拉
推送数据,本地推给服务端
rsync -avzP /test_data/test.txt rsync_backup@192.168.47.130::backup —password-file=/etc/rsync.password
拉取数据,拉取backup模块下的数据
rsync -avzP rsync_backup@192.168.47.130::backup/lianxi.txt /tmp
针对第二个模块[myweb]数据推拉
推送数据
rsync -avzP /tmp/web.tar.gz rsync_backup@192.168.47.130::myweb —password-file=/etc/rsync.password
拉取数据
rsync -avzP rsync_backup@192.168.47.130::myweb /my_rsync
排除文件
语法参数:
—exclude = 文件
拉取服务端的数据,进行排除文件
rsync —exclude=/lianxi —exclude=/lianxi2/lianxi.txt -avzP rsync_backup@192.168.47.130::myweb .
排除所有txt文件
rsync —exclude=*.txt -avzP rsync_backup@192.168.47.130::myweb .
修改配置文件,添加参数,指定排除文件的类型
… exclude = *.txt #添加此参数 [backup] ….
无差异数据复制
无差异数据复制,指的是无论是数据的拉取还是推送,都高度保持两边文件夹数据的一致性,也就是会删除其他多余的文件信息
语法参数:
—delete
本地式数据删除
rsync -avzP —delete backup/ myweb/
远程两台机器,数据同步一致性
数据无差异拉取,保证客户端本地和rsync服务端的数据一致
rsync -avzP —delete rsync_backup@192.168.47.130::backup .
数据无差异推送,这个命令可能会误删备份服务器上的数据,注意参数使用
rsync -avzP —delete /my_web/ rsync_backup@192.168.47.130::backup
—delete参数总结
rsync推送场景:数据备份,上传
本地有的资料,能够保证远程数据完全一致
在使用场景是备份,上传的情况下,一般不实用—delete参数,除非是nfs服务的实时同步,可能会要求客户端和服务端数据完全一致性
rsync拉取场景:代码下载,代码的发布
rsync无差异同步,还可以用于负载均衡下的,web服务器数据无差异同步
断点续传
rsync支持大文件断点续传,默认情况下,rsync传输中断后,将会删除所有传输了一部分的文件,重新传输,所以rsync也利用参数,保留已传输好的内容,可以继续传输
—partial
—partial-dir = DIR
保留已经传输下的部分文件,且将内容保存到一个目录中,而不是立即写入到目标文件,便于下次传输的时候,rsync使用该目录中的数据,再进行整体数据的传输和恢复,结束后删除该目录文件
案例
- rsync数据同步,加上断点续传参数,(如果数据传输到一半,突然中断,使用 —partial-dir=DIR 参数)且把已经传输的数据保存在指定的目录中,传输结束后,自动删除该目录
推送服务并加上断点续传功能,如果突然断开了传输,数据则会保存在backup模块下名为tmp的目录下
rsync -avzP —partial-dir=/tmp/ /my_rsync/test1 rsync_backup@192.168.47.130::backup
实时数据备份实践
企业网站和应用都得有完善的数据备份方案,目的都是为了保证数据不丢失。
定任务周期性的数据备份
需要周期性数据备份的数据类型一般有这集中
- 网站后台程序代码,运维配置文件,一般都会使用定时任务执行周期性的备份脚本,然后再通过rsync工具把数据备份到backup备份到服务器上
- 比如数据库文件,也是用定时任务配合mysql自身的备份命令,结合数据库备份,再通过rsync上传到备份服务器
实时数据备份
实时复制方案,是最适合企业重要的数据备份方案,用于用户提交的数据进行备份,大部分的文件后缀类型,都可以使用inotify + sersync + rsync 进行实时的数据备份
对于数据库文件,还会有更复杂的分布式备份方案,会将数据拆分成多份,然后进行数据备份操作
对于提交到数据库的数据,还会使用数据库比如主从复制,进行备份操作实时复制的软件介绍
inotify-tools 依赖于rsync守护进行,以及要部署复制脚本,监控目录数据的变化
sersync* 依赖于rsync守护进行,需要定制配置文件,监控目录数据的内容变化
