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目标文件/目录
  1. 本地的文件复制

    rsync /etc/hosts /tmp/ #对目标文件进行一个指定位置的备份

  2. 复制文件夹,及其子内容

-r 对子目录进行递归操作

递归的把/dzc文件夹中所有的子内容,进行拷贝

rsync -r /dzc/ /tmp/

递归把/dzc整个文件夹,及其字内容,都拷贝

rsync -r /dzc /tmp/

  1. 差异化删除数据

—delete参数,删除目标文件中,src没有的文件

rsync -r —delete /kong/ /tmp/

这种操作叫做差异化删除,如果文件中没有任何内容,相应的目标文件也会变得没有任何内容,原内容都会进行删除,如果文件夹中内有文件,目标文件也会变成和他一样文件,即做到了删除和复制

远程的数据传输命令

借助于ssh服务在两台机器之间进行数据传输,此时已经没有客户端、服务器之分,而是一种相对的关系

scp命令

  1. 登录在A机器,想要B机器的数据

    scp root@B:/opt/nigxin.sh /opt/nginx.sh.bak

  2. 登录在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远程传输命令

  1. 拉取远程主机的文件数据,拷贝到本地来

-e 指的是可以使用ssh方式进行加密,安全的传输
-a 压缩模式传输,且保持所有文件源属性
-v 详细输出的参数

在生产环境,使用ssh的免密登录来操作

rsync -av -e ‘ssh -p 22’ root@192.168.47.128:/tmp/hh.txt /tmp/

  1. 把本地的数据,推送到远程服务器的目录下

    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配置文件解析

  1. 确保服务器安装了rsync

    rpm -q rsync #查看是否存在rsync的安装软件 yum install rsync -y #老样子,没安装我们安装上

  2. 修改服务器配置文件

    vim /etc/rsyncd.conf #我们在最后写入如下参数,原有的不用管它,是一个书写的模板

image.png

rsync服务端部署操作

  1. 根据rsyncd.conf中定义的用户、目录等信息,进行创建

    useradd rsync -s /sbin/nologin -M mkdir -p /backup chown -R rsync.rsync /backup

  2. 配置用rsync进行复制验证的账号、密码、文件等信息

    echo “rsync_backup:chuange” > /etc/rsync.password chmod 600 /etc/rsync.password

  3. 启动rsync服务,以及检查服务器开机自启

    systemctl start rsyncd systemctl restart rsyncd systemctl status rsyncd systemctl enable rsyncd

  4. 检查rsync服务端状态,进程端口

    netstat -tunlp | grep rsync ps -ef | grep rsync

rsync客户端部署操作

  1. 检查客户端rsync安装情况
  2. 创建于rsync连接的账密文件

    echo “chuange” > /etc/rsync.password #这里我们要与服务端相对应

  3. 对密码进行文件授权

    chmod 600 /etc/rsync.password

  4. 除了使用这种密码文件的形式,rsync也支持使用变量的方式,省略指定密码验证

    export RSYNC_PASSWORD=chuange echo $RSYNC_PASSWORD

  5. 永久生成此变量

    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

实践操作

  1. 与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

  2. 针对第二个模块[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 = 文件

  1. 拉取服务端的数据,进行排除文件

    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 .

  2. 修改配置文件,添加参数,指定排除文件的类型

    … exclude = *.txt #添加此参数 [backup] ….

无差异数据复制

无差异数据复制,指的是无论是数据的拉取还是推送,都高度保持两边文件夹数据的一致性,也就是会删除其他多余的文件信息
语法参数:
—delete

  1. 本地式数据删除

    rsync -avzP —delete backup/ myweb/

  2. 远程两台机器,数据同步一致性

    数据无差异拉取,保证客户端本地和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使用该目录中的数据,再进行整体数据的传输和恢复,结束后删除该目录文件

案例

  1. 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守护进行,需要定制配置文件,监控目录数据的内容变化