rsync远程同步

文章目录

    • 一、关于rsync
    • 二、配置rsync源
      • (一)基本思路
      • (二)应用实例
    • 三、rsyncmingde用法
    • 四、实验一:使用rsync实现手动远程同步
    • 五、rsync实时同步
    • 六、实验二:使用rsync实现自动同步

一、关于rsync

  • 一款快速增量备份工具
  1. Remote Sync,远程同步
  2. 支持本地复制,或者与其他SSH、rsync主机同步
  3. 官网:http://rsync.samba.org

二、配置rsync源

(一)基本思路

  • 建立rsyncd.conf配置文件、独立的账号文件
  • 启用rsync的–daemon模式

(二)应用实例

  • 用户backer,允许下行同步
  • 操作的目录为:/var/www/html/
  • 配置文件rsyncd.conf
  1. 需手动建立,语法类似于Samba配置
  2. 认证配置auth users、secrets file,不加则为匿名
  • rsync账号文件
  1. 采用“用户名:密码”的记录格式,每行一个用户记录
  2. 独立的账号数据,不依赖于系统账号
  • 启用rsync服务
  1. 通过–daemon独自提供服务
  2. 执行kill $(cat /var/run/rsyncd.pid) 关闭rsync服务

三、rsyncmingde用法

rsync [选项] 原始位置 目标位置
  • 常用选项
  1. -a:归档模式,递归并保留对象属性,等同于 -rlptgoD
  2. -v:显示同步过程的详细(verbose)信息
  3. -z:在传输文件时进行压缩(compress)
  4. -H:保留硬链接文件
  5. -A:保留ACL属性信息
  6. –delete:删除目标位置有而原始位置没有的文件
  7. –checksum:根据对象的校验来决定是否跳过文件
  • 配置源的两种表示方法
格式1:用户名@主机地址::共享模块名
格式2:rsync://用户名@主机地址/共享模块名
格式一:rsync -avz [email protected]::wwwroot /opt
格式二:rsync -avz rsync://[email protected]/wwwroot /opt
  • rsync同步操作示例

下行rsync源:wwwroot共享->/myweb

rsync -zva --delete [email protected]::wwwroot /opt

四、实验一:使用rsync实现手动远程同步

  • 实验环境:VMware Workstation 15.5、Xshell 6、Centos7.6
  • 实验步骤

①在源站(A机)上操作

1、关闭防火墙组件

systemctl stop firewalld && setenforce 0

2、编辑rsync配置文件

vim /etc/rsyncd.conf

添加或修改成如下内容:
uid = nobody
gid = nobody
use chroot = yes
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.50.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        ## 用户密码文件存放路径

3、创建密码文件

vim /etc/rsyncd_users.db
写入密码(格式:用户:密码):backuper:123456

4、为了不让他人访问修改权限(只有属主可以查看)

chmod 600 /etc/rsyncd_users.db

5、启动rsync服务

rsync --daemon

查看状态:
[root@localhost opt]# netstat -natp | grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      16706/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      16706/rsync 

6、为了验证试验结果,我们在源站上安装一个http服务并写入站点文件

yum -y install httpd   ## 安装

vim /var/www/html/index.html    ## 创建站点文件
写入内容:test web

②在同步站(B机)上操作

1、使用命令同步源站内容到/opt目录下

rsync -avz [email protected]::wwwroot /opt
或
rsync -avz rsync://[email protected]/wwwroot /opt

[含义]:
1. -a:归档模式,递归并保留对象属性
2. -v:显示同步过程的详细(verbose)信息
3. -z:在传输文件时进行压缩(compress)

2、查看同步过来的文件内容

[root@localhost opt]# cat /opt/index.html    ## 可以看到已经同步过来了
test web

另外,如果在shell脚本中使用同步命令必定会涉及到免交互会比较麻烦,所以可以使用免交互功能,只需要在同步站点创建一个密码文件即可

vim /etc/server.pass   ## 创建密码文件(路径随意)
123456     ## 写入密码

chmod 600 /etc/server.pass     ## 设置权限只能属主操作该文件

执行免交互同步命令:
rsync -zva --password-file=/etc/server.pass [email protected]::wwwroot /opt

五、rsync实时同步

  • 定期同步的不足
  1. 执行备份的时间固定,延迟明显、实时性差
  2. 当同步源长期不变化时,密集的定期任务是不必要的
  • 实时同步的优点
  1. 一旦同步源出现变化,立即启动备份
  2. 只要同步源无变化,则不执行备份
  • 为了解决这个问题可以使用Linux内核提供额inotifu机制
  1. 从版本2.6.13开始提供
  2. 可以监控文件系统的变动情况,并做出通知响应
  3. 用到的辅助软件:inotifu-tools
  • 调整inotifu内核参数
  1. max_queue_events:监控事件队列大小
  2. max_user_instances:最多监控实例数
  3. max_user_watches:每个实例最多监控文件数
  • inotify-tools工具参数
  1. inotifywait:用于持续监控,实时输出结果
  2. inotifywatch:用于短期监控,任务完成后再出结果
  3. 命令选项:
-m:持续进行监控
-r递归监控所有子对象
-q:简化输出信息
-e:指定要监控哪些事件类型

六、实验二:使用rsync实现自动同步

  • 实验步骤:(接上一个实验)

1、在B机上安装http服务

yum -y install httpd

2、关闭防火墙

systemctl stop firewalld && setenforce 0

/var/www/html/ CREATE b
/var/www/html/ CREATE c
/var/www/html/ MODIFY c

3、安装编译环境

yum -y install gcc gcc-c++

4、调整内核参数

vim /etc/sysctl.conf   ## 编辑配置文件

fs.inotify.max_queued_events = 16384        ## 监控事件队列大小
fs.inotify.max_user_instances = 1024            ## 最多监控实例数
fs.inotify.max_user_watches = 1048576         ## 每个实例最多监控文件数

使用命令:sysctl -p  使配置立即生效

5、解压缩软件(先上传到/opt目录下)并进行配置与安装

tar zxvf inotify-tools-3.14.tar.gz -C /opt

cd /opt/inotify-tools-3.14    ## 进入软件目录

./configure   ## 进行配置

make && make install   ## 编译及安装

6、测试inotify软件是否可以正常监控

inotifywait -mrq -e modify,create,move,delete /var/www/html   ## 执行命令后会进入监听模式,无法操作,所以需要另开一个终端页面操作

PS:
-m:持续进行监控
-r递归监控所有子对象
-q:简化输出信息
-e:指定要监控哪些事件类型

随机创建文件并写入内容测试inotify是否可以监控操作动作:
cd /var/www/html
touch b 
echo "123" > c

另一个终端输出信息,说明软件工作正常:
[root@localhost inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /var/www/html
/var/www/html/ CREATE b
/var/www/html/ CREATE c
/var/www/html/ MODIFY c

7、编写一个shell脚本,通过inotifuwait触发rsync同步操作

vim /opt/inotify.sh   ## 创建脚本

在脚本中写入:

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ [email protected]::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ];then
       $RSYNC_CMD
    fi
done

PS:注意!192.168.50.135 IP是A机的

chmod +x /opt/inotify.sh    ## 为脚本添加执行权限

8、因为涉及到读写操作,所以需要把A、B机的/var/www/html/目录的权限放开

chmod 777 /var/www/html/   ## 分别在A、B机上进行操作

9、现在进行测试,看能否自动同步

在B机上创建一个web.txt文件:touch /var/www/html/web.txt
再将刚才创建的b、c文件删除:rm -rf /var/www/html/b
                        rm -rf /var/www/html/c
                        
切换到A机上查看html目录下文件:
[root@localhost opt]# ls /var/www/html/
web.txt     ## 可以看到这个web.txt文件已经同步过来了

你可能感兴趣的:(rsync,rsync)