快速入门rsync远程同步

时间:2020-9-12 作者:admin

文章目录

一、rsync同步简介

●一款快速增量备份工具

  Remote Sync,远程同步
  支持本地复制,或者与其他SSH、rsync主机同步

●应用场景

  “推”
     即由客户端推送数据至服务器,比如个人电脑上传数据至云盘。
   “拉”
     即由客户端拉取服务器上的数据,比如利用个人电脑下载云盘文件。

●rsync 包括如下的一些特性

 1. 能更新整个目录树和文件系统;
 2. 有选择性的保持符号链链、硬链接、文件属性、权限、设备以及时间等;
 3. 传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
 4. 能用rsh、ssh 或直接端口做为传输端口;
 5. 支持匿名rsync 同步文件,是理想的镜像工具;

Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。
在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客机的rsync同步操作的服务器称为备份源。

二、配置rsync源服务器

2.1rsync同步源简介
指备份操作的远程服务器,也称为备份源
快速入门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实验环境

快速入门rsync远程同步

3.2实验步骤

源端服务器配置:
1.确认rsync是否已经安装(Centos 7.6自带安装)

[root@localhost ~]# rpm -q rsync
rsync-3.1.2-4.el7.x86_64

2.修改配置文件

[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中

3.创建backuper用户的密码文件

[root@localhost ~]# touch /etc/rsyncd_users.db
[root@localhost ~]# vim /etc/rsyncd_users.db
backuper:abc123

4.服务端的密码文件要600权限

[root@localhost html]# chmod 600 /etc/rsyncd_users.db

5.启动服务

[root@localhost html]# rsync --daemon   

6.查看状态

[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 910 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
快速入门rsync远程同步

4.3rsync+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.4rsync+inotify结合进行实时上行同步(上传)实验

实验环境:

快速入门rsync远程同步
基于前面rsync同步实验继续
源端地址:14.0.0.10;安装软件:rsync
客户端地址:14.0.0.20;安装软件:rsync、inotify-tools

实验步骤:

1.源端配置文件中将只读选项更改为no;更改配置文件后需要重启服务,详见下面的实验注意事项

[root@localhost ~]# vim /etc/rsyncd.conf
read only = no

2.客户端更改内核参数,指定队列大小,最多监控实例数,每个实例最多监控文件数

[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

3.安装inotify-tools工具

[root@slave ~]# tar zxf inotify-tools-3.14.tar.gz 
[root@slave ~]# cd inotify-tools-3.14/
[root@slave inotify-tools-3.14]# yum install gcc gcc-c++ -y
[root@slave inotify-tools-3.14]# ./configure 
[root@slave inotify-tools-3.14]# make && make install

4.测试inotifywait监控命令是否正常使用

[root@localhost ~]# inotifywait -mrq -e modify,create,move,delete /opt/(输完这条命令后再开一个终端在/opt目录下进行写入或者读写等操作)
/opt/ CREATE c.txt
/opt/ CREATE d.txt

5.客户端上编写脚本,将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,否则远程同步无法写入

6.运行脚本,在客户端/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 910 21:07 a.txt
-rw-------. 1 nobody nobody 0 910 21:07 b.txt

实验注意事项:

1.注意: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 910 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 910 16:39 rsyncd.pid
[root@localhost run]# rsync --daemon
failed to create pid file /var/run/rsyncd.pid: File exists

2.使用如下命令进行上行同步(上传)时,本地目录最后要加上/,否则会将目录同步到对方目标文件夹下,而不仅仅是同步本地目录下的文件
例如:
#在客户端输入以下命令

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
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。