• Linux服务之Rsync


    Rsync简介

    • Rsync 是 Linux 系统下的数据镜像备份工具
    • 使用快速增量备份工具 Remote Sync 可以远程同步,可以在不同主机之间进行同步,可实现全量备份不增量备份,保持链接和权限,传输前执行压缩,
    • 非常适合用于架构集中式备份或异地备份等应用。

    Rsync进行数据备份

    与scp相比较

    • scp无法备份大规模的数据
    • Rsync边复制 边比较 边统计

    Rsync优点

    • 可以镜像保存这个目录树以及文件系统
    • 可以保存文件的权限 属性 硬链接等
    • 无需特殊权限即可安装
    • 只有在第一次同步的时候会复制全部的内容 下一次之后复制修改的内容
    • 在传输的过程中会进行文件压缩 传输更加高效 减少带宽

    Rsync特性

    • 安全:可以使用ssh scp进行文件传输
    • 支持匿名传输 以方便进行网站镜像
    • 选择性保持:符号链接 硬链接 文件属性 权限 时间等

    Rsync的运行原理

    • 采用C/S架构 本质是点到点传输 直接使用Rsync命令即可
    • 监听端口号837

    名词解释

    • 发起端:负责发送Rsync进行同步的机器 我要进行数据同步
    • 备份源:响应Rsync请求的机器 负责进行数据的备份
    • 服务端:运行 rsyncd 服务,一般来说,需要备份的服务器
    • 客户端:存放备份数据

    同步方式

    • 推 push:一台主机负责把数据传送给其他主机,服务器开销徆大,比较适合后端服务器少的情况。
    • 拉 pull:所有主机定时去找一台主机拉数据,可能就会导致数据缓慢。
    • 推 push:目的主机配置为 rsync 服务器,源主机周期性的使用 rsync 命令把要同步的目彔推过去(需要备份的机器是客户端,存储备份的机器是服务端)。
    • 拉 pull:源主机配置为 rsync 服务器,目的主机周期性的使用 rsync 命令把要同步的目彔拉过来(需要备份的机器是服务端,存储备份的机器是客户端)。

    Rsync使用方式

    语法格式

    格式: rsync 【选项】 源文件 目标文件
    

    常见选项

    -a

    --archive(存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于加了参数-rlptgoD

    -v

    Rsync同步数据的时候显示详细信息

    -p

    Rsync同步数据的时候保留文件的权限

    -t

    Rsync同步数据的时候保留文件的原有时间

    -g

    Rsync同步数据的时候保留文件的原有属组

    -0

    Rsync同步数据的时候保留文件的原有属主

    -D

    表示块设备文件信息

    -z

    Rsync同步数据的时候压缩传输数据

    -H

    表示硬连接文件

    -A

    Rsync同步数据的时候保留ACl权限

    -P

    显示传输进度

    -- delete

    当源服务器中某些文件被删除的时候 备份端文件同时进行删除

    实验验证

    # 基础备份
    客户端:IP 1.1.1.1
    备份端:IP 1.1.1.2
    
    [root@client ~]# cp -r /boot/grub2 /var/www/html/
    [root@client ~] rsync -azP /var/www/html/ 1.1.1.2:/root/web-pack  # 向服务端备份数据
    

    # 客户端添加新的文件向服务端进行备份
    [root@client ~]# touch /var/www/html/test.txt  # 创建新的文件
    [root@client ~] rsync -azP /var/www/html/ 1.1.1.2:/root/web-pack  # 向服务端备份数据
    

    # 当客户端进行数据删除的时候 备份端跟着删除
    [root@client ~]# rm -fr /var/www/html/test.txt
    
    [root@client ~]# rsync -zaP --delete  /var/www/html/ root@1.1.1.2:/root/web-pack
    

    # 不输入密码直接进行备份 主要适用于定时任务中 
    [root@client ~]# ssh-keygen  # 生成秘钥对
    
    [root@client ~]# ssh-copy-id root@1.1.1.2  # 传输秘钥对
    
    [root@client ~]# rsync -zaP  /etc/passwd root@1.1.1.2:/root
    
    

    Rsync服务

    安装 Rsync

    [root@server~]# yum -y install rsync xinetd  # rsnyc服务依赖于xinted
    
    [root@server ~]# rsync --daemon   # 以daemon模式启动
    
    [root@server ~]# netstat -antup | grep 873   # 查看启动的端口
    
    

    常见命令选项

    -a

    权限保存模式 保存传输文件的所有属性

    -r

    递归复制所有下面的资料

    -p

    保留文件原有权限 属性

    -t

    保留时间点 文件原有时间

    -g

    保留复制文件的属组

    -o

    保留复制文件的属主(root only)

    -D

    保留设备文件咨询 (root only)

    -l

    复制所有的连接 拷贝连接文件

    -z

    文件压缩进行传输

    -H

    保留硬链接文件

    -A

    保留ACl文件属性 需要配合--perms

    -p

    显示文件传输进度

    -v

    显示文件的传输过程

    -u

    仅仅进行更新 也就是跳过已经存在的目标位置

    --port

    知道rsync端口

    --delete

    删除备份文件有而源文件没有的文件

    --password-file

    从指定密码文件中获取密码

    -- filter

    需要过滤的文件

    --exclude

    需要过滤的文件

    -- progress

    显示备份过程

    服务搭建

    创建测试用户

    
    源文件端   IP:1.1.1.1
    备份文件端 IP:1.1.1.2
    
    [root@client ~] useradd rget1 && echo "123456" |passwd --stdin rget1  # 创建测试用户
    
    [root@server ~] useradd rget1 && echo "123456" |passwd --stdin rget1  # 创建测试用户
    

    源端服务器设置ACL文件权限

    [root@client ~] setfacl -R -m user:rget1:rwx /var/www/html/
    
    [root@client ~] setfacl -R -m default:rget1:rwx /var/www/html/
    
    [root@client ~] getfacl /var/www/html/
    
    

    备份端进行操作

    
    [root@server ~] ll web-pack/  # 查看文件详细属性
    
    [root@server ~] chown rget1:rget1 -R /root/web-back/  # 修改目录 属主 属组
    

    数据同步

    [root@source ~]# rsync -zav /var/www/html/ rget1@1.1.1.2:/root/web-back
    

    rsync服务使用非系统用户进行数据同步

    rsync.conf

    全局参数

    对 rsync 服务器生效,如果模块参数和全局参数冲突,冲突的地方模块参数最终生效。

    局部参数

    定义需要通过 rsync 输出的目彔定义的参数。

    创建配置文件

    
    uid = root #运行进程的身份。
    gid = root #运行进程的组。
    address =1.1.1.1 #监听 IP。
    port =873 #监听端口。
    hosts allow =1.1.1.0/24
    use chroot = yes
    max connections =5 #最大连接数。
    pid file =/var/run/rsyncd.pid #进程 PID,自劢生成。
    lock file =/var/run/rsync.lock #指 max connectios 参数的锁文件。
    log file =/var/log/rsyncd.log #日志文件位置。
    motd file =/etc/rsyncd.motd #客户端登陆后弹出的消息,需要创建。
    
    [wwwroot] #共享模块名称。
    path =/var/www/html #需要备份的路径。
    comment = used for web-data root #描述。
    read only = false #只读权限为假。
    list = yes #是否允讲查看模块信息。
    auth users = rsyncuser #备份的用户,和系统用户无关。
    secrets file =/etc/rsync.passwd #存放用户的密码文件,栺式是 用户名:密码。
    。
    

    创建提示信息以及非系统用户名称密码

    [root@source ~]# echo "Welcome to Backup Server" > /etc/rsyncd.motd  # 创建客户端提示信息
    
    [root@source ~]# echo rsyncuser:123456 > /etc/rsync.passwd  # 将非系统用户写入配置文件 格式:用户名:密码
    
    [root@source ~]# chmod 600 /etc/rsync.passwd  # 修改权限 必须为600或者700  否则身份验证出错
    

    启动服务

    [root@source ~]# systemctl start xinetd  # 启动服务
    
    [root@source ~]# rsync --daemon --config=/etc/rsyncd.conf  # 加载配置文件
    
    [root@source ~]# netstat -aunpt | grep 873  # 查看是否启动
    

    rsync+sersync 实现数据实时同步

    sersync的优点

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

    rsync+inotify-tools 不 rsync+sersync 架构的区别

    rsync+inotify-tools

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

    rsync+sersyn

    • sersync 可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字。
    • rsync 在同步时,只同步发生变化的文件或者目录 因此效率徆高。

    同步过程

    • 在同步服务器上开吭 sersync 服务, sersync 负责监控配置路径中的文件系统事件变化。
    • 调用 rsync 命令把更新的文件同步到目标服务器。
    • 需要在主服务器配置 sersync,在同步目标服务器配置 rsync server(注意:是 rsync 服务)

    同步过程与原理

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

  • 相关阅读:
    .net framework 3.5 beta 2 / vs 2008 beta 2 有问题!
    提交了 VS 2008 sp1 对 Linq to SQL 的 xml 字段类型支持的一个 bug
    如何在 vista 的 iis 7 上面配置 asp.net 1.1 开发环境
    Linq to sql 中如何进行 left join
    Silverlight 2 beta 2 中目前不支持共享 WCF 的客户端类型
    Scott Guthrie 写的 Silverlight 教程索引
    利用 Xml Literal 功能复制一段 Xml
    Silverlight 2 beta 2 bug 解决办法 (持续更新中)
    C++使用内存映射文件入门
    如何在C++项目中引用Lib文件(VS2005)
  • 原文地址:https://www.cnblogs.com/SR-Program/p/13175581.html
Copyright © 2020-2023  润新知