rsync远程同步

一 rsync同步简介

  • 一款快速增量备份工具
    Remote Sync,远程同步
    支持本地复制,或者与其他SSH、rsync主机同步
  • 应用场景
    “推”
    即由客户端推送数据至服务器,比如个人电脑上传数据至云盘。
    “拉”
    即由客户端拉取服务器上的数据,比如利用个人电脑下载云盘文件。
  • rsync 包括如下的一些特性
    能更新整个目录树和文件系统;
    有选择性的保持符号链链、硬链接、文件属性、权限、设备以及时间等;
    传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
    能用rsh、ssh 或直接端口做为传输端口;
    支持匿名rsync 同步文件,是理想的镜像工具;
  • Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。
  • 在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客机的rsync同步操作的服务器称为备份源。

二 配置rsync源服务器

2.1 rsync同步源简介

  • 指备份操作的远程服务器,也称为备份源
    在这里插入图片描述

2.2 如何配置rsync源

  • 基本思路
    修改rsyncd.conf配置文件、独立的密码文件
    启用rsync的–daemon模式
  • 应用示例
    用户backuper,允许下行同步
    操作的目录为/var/www/html
  • 配置文件rsyncd.conf
    语法类似于Samba配置
    认证配置auth users、secrets file,不加则为匿名(nobody)
  • rsync账号文件
    采用“用户名:密码”的记录格式,每行一个用户记录
    独立的账号数据,不依赖于系统账号(安全)
  • 如何启动和关闭rsync
    启动rsync:rsync --daemon
    关闭rsync:kill $(cat /var/run/rsyncd.pid)

2.3 如何使用rsync备份工具

  • rsync命令的用法
    rsync [选项] 原始位置 目标位置
  • 常用选项
    -a:归档模式,递归并保留对象属性,等同于-rlptgoD
    -v:显示同步过程的详细信息
    -z:在传输文件时进行压缩
    -H:保留硬连接文件
    -A:保留ACL属性信息
    –delete:删除目标位置有而原始位置没有的文件
    –checksum:根据对象的校验和来决定是否跳过文件

三 rsync远程同步实验

3.1 实验环境

在这里插入图片描述

3.2 实验步骤

  • 源端服务器配置:
    确认rsync是否已经安装(Centos 7.6自带安装)
[root@localhost ~]# rpm -q rsync
rsync-3.1.2-4.el7.x86_64
  • 修改配置文件
[root@localhost ~]# vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes           #禁锢家目录
address = 14.0.0.10     #提供同步服务的地址
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 14.0.0.0/24   #允许同步的网段

[wwwroot]
path = /var/www/html   #同步的目录
comment = www.test.com
read only = yes      #只读模式开启
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2   #这些结尾的文件同步时不再压缩
auth users = backuper     
secrets file = /etc/rsyncd_users.db   #用户密码存放在secrets file中
  • 创建backuper用户的密码文件
[root@localhost ~]# touch /etc/rsyncd_users.db
[root@localhost ~]# vim /etc/rsyncd_users.db
backuper:abc123
  • 服务端的密码文件要600权限
[root@localhost html]# chmod 600 /etc/rsyncd_users.db
  • 启动服务
[root@localhost html]# rsync --daemon   
  • 查看状态
[root@localhost html]# netstat -ntap | grep rsync
  • 客户端验证同步功能:
    需要输密码的两种方式:

方式一

[root@localhost opt]# rsync -avz backuper@14.0.0.10::wwwroot /opt/
Password:
receiving incremental file list
./
index.html
index1.html
index2.html

方式二

[root@localhost opt]# rsync -avz rsync://backuper@14.0.0.10/wwwroot /opt/
Password:
receiving incremental file list
./
index.html
index1.html
index2.html
  • 免密方式同步文件
要先在客户端本地创建密码文件/etc/server.pass
[root@localhost etc]# vim server.pass
[root@localhost etc]# ll | grep server.pass
-rw-r--r--.  1 root root        7 9月  10 16:43 server.pass
[root@localhost etc]# chmod 600 server.pass
[root@localhost etc]# rsync -az --delete --password-file=/etc/server.pass backuper@14.0.0.10::wwwroot /opt/
[root@localhost opt]# ls
index1.html  index2.html  index.html

四 rsync实时同步

4.1 为什么要实时同步

  • 定期同步的不足
    执行备份的时间固定,延迟明显,实时性差
    当同步源长期不变化时,密集的定期任务是不必要的
  • 实时同步的优点
    一旦同步源出现变化,立即启动备份
    只要同步源无变化,则不执行备份

4.2 关于inotify

  • Linux内核的inotify机制
    从版本2.6.13开始提供
    可以监控文件系统的变动情况,并做出通知响应
    辅助软件:inotify-tools
    在这里插入图片描述

4.3 rsync+inotify实时同步

  • 调整inotify内核参数
    max_queue_events:监控事件队列大小
    max_user_instances:最多监控实例数
    max_user_watches:每个实例最多监控文件数
    监控数要大于监控目标的总文件数
  • 安装inotify-tools辅助工具
    inotifywait:用于持续监控,实时输出结果
    inotifywatch:用于短期监控,任务完成后再出结果
    示例:inotifywait -mrq -e modify,create,move,delete /opt/
    -m:持续进行监控
    -r:递归监控所有子对象
    -q:简化输出信息
    -e:指定要监控哪些事件类型
    modify:修改;create:创建;move:移动;delete:删除
  • 通过inotifywait触发rsync同步操作
    使用while、read持续获取监控结果
    根据结果可以作进一步判断,决定执行何种操作

4.4 rsync+inotify结合进行实时上行同步(上传)实验

实验环境
在这里插入图片描述
基于前面rsync同步实验继续
源端地址:14.0.0.10;安装软件:rsync
客户端地址:14.0.0.20;安装软件:rsync、inotify-tools

实验步骤:

  • 源端配置文件中将只读选项更改为no;更改配置文件后需要重启服务,详见下面的实验注意事项
[root@localhost ~]# vim /etc/rsyncd.conf
read only = no
  • 客户端更改内核参数,指定队列大小,最多监控实例数,每个实例最多监控文件数
[root@localhost opt]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@localhost opt]# sysctl -p
  • 安装inotify-tools工具
[root@slocalhost ~]# tar zxf inotify-tools-3.14.tar.gz 
[root@slocalhost ~]# cd inotify-tools-3.14/
[root@slocalhost inotify-tools-3.14]# yum install gcc gcc-c++ -y
[root@slocalhost inotify-tools-3.14]# ./configure 
[root@slocalhost inotify-tools-3.14]# make && make install
  • 测试inotifywait监控命令是否正常使用
[root@localhost ~]# inotifywait -mrq -e modify,create,move,delete /opt/(输完这条命令后再开一个终端在/opt目录下进行写入或者读写等操作)
/opt/ CREATE c.txt
/opt/ CREATE d.txt
  • 客户端上编写脚本,将inotify监控和rsync远程同步结合起来
[root@localhost ~]# vim inotify.sh
#!/bin/bash
INOTIFY="inotifywait -mrq -e modify,create,attrib,move,delete /opt"
RSYNC="rsync -azH --delete --password-file=/etc/server.pass /opt/  backuper@14.0.0.10::wwwroot/"
$INOTIFY | while read DIRECTORY EVENT FILE   #逐条读取监控记录
do
        if [ $(pgrep rsync | wc -l) -le 0 ];then
            $RSYNC
        fi
done
注意:将源端/var/www/html/目录设置权限为777,否则远程同步无法写入
  • 运行脚本,在客户端/opt目录下创建文件,查看源端/var/www/html目录是否同步到
    #在客户端/opt目录下创建文件b.txt,原来有a.txt
[root@localhost opt]# touch b.txt
  • 查看源端/var/www/html目录,新建的和原来就存在的文件都成功同步,且属主属组均为nobody用户
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ll
总用量 4
-rw-------. 1 nobody nobody 6 9月  10 21:07 a.txt
-rw-------. 1 nobody nobody 0 9月  10 21:07 b.txt

实验注意事项

  • 注意:kill pid号和kill -9 pid号的区别:后者不会删除pid文件,导致服务起不来
[root@localhost html]# cd /var/run/
[root@localhost run]# cat rsyncd.pid
14293
[root@localhost run]# kill 14293
[root@localhost run]# ll | grep rsyncd.pid
[root@localhost run]# rsync --daemon
[root@localhost run]# ll | grep rsyncd.pid
-rw-r--r--.  1 root           root              6 9月  10 16:39 rsyncd.pid
[root@localhost run]# cat rsyncd.pid
14957
[root@localhost run]# kill -9 14957   #kill -9 不会删除pid文件
[root@localhost run]# ll | grep rsyncd.pid
-rw-r--r--.  1 root           root              6 9月  10 16:39 rsyncd.pid
[root@localhost run]# rsync --daemon
failed to create pid file /var/run/rsyncd.pid: File exists
  • 使用如下命令进行上行同步(上传)时,本地目录最后要加上/,否则会将目录同步到对方目标文件夹下,而不仅仅是同步本地目录下的文件
    例如:
    #在客户端输入以下命令
rsync -azH --delete --password-file=/etc/server.pass /var/www/html backuper@14.0.0.10::wwwroot/
  • 源端查看/var/www/html同步结果,会发现是整个html目录一起同步过来了
[root@localhost html]# ls
html
[root@localhost html]# cd html/
[root@localhost html]# ls
index1.html  index.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值