Rsync命令文件定时同步

Rsync 是一个开源的快速备份工具,是LinuxUNIX操作系统默认安装的组件之一,可在不同主机间镜像同步整个目录,并支持增量备份文件传输,保持链接和权限采用优化的同步算法,传输前执行压缩,适用于异地备份,镜像服务器等应用

Rsync 官网地址:rsync.samba.org/

1. Environment

  • 服务器2台

    Centos7_x86_64( 源服务器)Rsync同步源:10.10.10.21

    Centos7_x86_64(目的服务器)Rsync客户端:10.10.10.36

2. 安装rsync

  • 在线安装

    yum -y install rsync
    
  • 离线安装

    # 离线环境下载安装包
    # rpm下载工具
    yum install rsync zip unzip
    
    # 下载freetype-devel及其依赖
    mkdir -pv /home/rpm-rsync
    yumdownloader rsync zip unzip --resolve --destdir=/home/rpm-rsync
    
    # 目录压缩成zip文件
    zip -r /opt/rpm-rsync.zip /home/rpm-rsync
    
    # 上传依赖rpm-rsync.zip 至 /opt/
    cd /opt
    
    # 解压到指定目录
    unzip -d /home /opt/rpm-rsync.zip
    
    # 从本机目录 /home/rpm-rsync 安装rsync包及依赖
    yum localinstall /home/rpm-rsync/*.rpm -y
    

3. rsync备份工具

  • 基本用法

    大多数的备份程序要求指定原始位置、目标位置,rsync 命令其实跟 cp 命令相似。

    比如:将文件/etc/fstab、目录/boot/grub同步备份到/opt目录下。

    -r:选项表示递归整个目录、-l:选项表示备份链接文件。

    rsync /etc/fstab /opt
    rsync -rl /etc/fstab /boot/grub /opt
    
  • rsync命令格式

    基本格式:rsync [选项] 原始位置 目标位置
    
  • rsync 命令常用备份选项

    -r:递归模式,包含目录及子目录中的所有文件。

    -l:对于符号链接文件仍复制为符号链接文件。

    -v:显示同步过程的详细信息。

    -a:归档模式,保留文件的权限、属性等信息,组合选项等于-rlptgoD

    -z:在传输文件时进行压缩。

    -p:保留文件的权限标记。

    -t:保留文件的时间标记。

    -g:保留文件的属组标记。(仅超级用户使用

    -o:保留文件的属主标记。(仅超级用户使用

    -H:保留硬连接文件。

    -A:保留 ACL 属性信息。

    -D:保留设备文件及其他特殊文件。

    -- delete:删除目标位置有而原始位置没有的文件。

    --checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。

    配置源的表示方法

    执行远程同步任务时,rsync 命令需指定同步源服务器中的资源位置。

    两种表示方法

    • 用户名@主机地址::共享模块名(两个冒号分隔形式)
    • rsync://用户名@主机地址/共享模块名(URL 地址形式)

    使用真实用户测试rsync服务

    如果ssh端口修改了,需加上端口。

    命令格式rsync -参数 文件 -e ‘ssh -p 端口号’ 用户名@ip:目录路径

    # rsync -avz abc '-e ssh -p 22' root@linuxserver.com:/tmp     // 实操命令格式
    root@linuxserver.com's password:                              //输入 linuxserver 设备的 root 密码
    sending incremental file list
    abc
    
    sent 64 bytes  received 31 bytes  27.14 bytes/sec
    total size is 0  speedup is 0.00
    
  • 示例

    源服务器 -> 目的服务器

    # 源服务器10.10.10.21上运行
    rsync -rav --progress <源目录>/ -e 'ssh -p 22' root@<目的IP>::<目的目录>/
    # rsync -rav --progress /home/tmp/ -e 'ssh -p 22' root@10.10.10.36::/home/tmp/
    

    目的服务器 <- 源服务器

    # 目标服务器10.10.10.36上运行
    rsync -rav --progress -e 'ssh -p 22' root@<源IP>::<源目录>/ <目的目录>/
    # rsync -rav --progress -e 'ssh -p 22' root@10.10.10.21::/home/tmp/ /home/tmp/
    

5. 定时同步

在实际生产环境中的备份工作,通常都是重复性的,那么我们可以设置个定时任务来完成备份操作。比如:每天凌晨04:00对服务器的tmp共享模块同步,并下载到本地/mnt/jacktian目录下,通过crond服务来完成。

这种同步过程中,我们不想输入密码,那么需创建一个密码文件,保存rsync_backup用户的密码。

  • 创建rsync密码文件

    # rsync密码文件
    mkdir -pv /home/rsync_config/
    # 编辑密码文件
    vim /home/rsync_config/rsync_<IP>.password
    # vim /home/rsync_config/rsync_10_10_10_21.password
    # vim /home/rsync_config/rsync_10_10_10_36.password
    
  • 保存用户密码

    <user>:<password>
    # rsync_backup:123.com
    # root:env015439
    # root:UdQHxmZ5
    
  • 赋予权限

    chmod 600 /home/rsync_config/rsync_<IP>.password
    # chmod 600 /home/rsync_config/rsync_10_10_10_21.password
    # chmod 600 /home/rsync_config/rsync_10_10_10_36.password
    
  • 在执行 rsync 同步时使用选项--password-file=/etc/rsync.password指定。

    每分钟一次* * * * *

    30分钟一次0 0/30 * * *

    每小时一次0 0 0/1 * * ?

    12小时一次0 0 0/12 * *

    每天凌晨2点一次0 0 2 ? *

    crontab -e 00 04 * * * /usr/bin/rsync -az --delete --password-file=/home/rsync_config/rsync_10_10_10_21.password@rsync_backup@<源IP>::<源目录>/ <目的目录>/
    
    service crond restart
    chkconfig crond on
    
  • 运行命令

    源服务器 -> 目的服务器

    # 源服务器上运行
    rsync -rav --progress <源目录>/ --password-file=rsync_<IP>.password@root@<目的IP>::<目的目录>/
    # rsync -rav --progress /home/tmp/ --password-file=/home/rsync_config/rsync_10_10_10_36.password@root@10.10.10.36::/home/tmp/
    

    目的服务器 <- 源服务器

    # 目标服务器上运行
    rsync -rav --progress --password-file=/etc/rsync_<IP>.password@root@<源IP>::<源目录>/ <目的目录>/
    # rsync -rav --progress --password-file=/home/rsync_config/rsync_10_10_10_21.password@root@10.10.10.21::/home/tmp/ /home/tmp/