rsync远程同步

关于rsync

一款快速增量备份工具(具有实时性)
Remote Sync,远程同步
支持本地复制,或者与其他SSH、rsync主机同步

官方网站:http://rsync.samba.org在这里插入图片描述
rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。

配置rsync源服务器

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

配置rsync源

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

应用示例
用户backuper,允许下行同步
操作的目录为/arlwww/html/

配置文件rsyncd.conf
需手动建立,语法类似于Samba配置
认证配置auth users、secrets file,不加则为匿名

rsync账号文件
采用“用户名:密码”的记录格式,每行一个用户记录
独立的账号数据,不依赖于系统账号

启用rsync服务(执行kill$(catlvarlrun/rsyncd.pid)关闭rsync服务)
通过–daemon独自提供服务

使用rsync备份工具

rsync命令的用法
rsync [选项] 原始位置 目标位置

常用选项
-a:         归档模式,递归并保留对象属性,等同于-rlptgoD
-v:         显示同步过程的详细(verbose)信息
-z:         在传输文件时进行压缩(compress)
-H:         保留硬连接文件
-A:         保留ACL属性信息
-p:         保留文件的权限标记
-t:         保留文件的时间标记
-g:         保留文件的属组标记
-o:         保留文件的属主标记
-delete:    删除目标位置有而原始位置没有的文件
-checksum:  根据对象的校验和来决定是否跳过文件
配置源的两种表示方法(本地服务)
格式1:用户名@主机地址::共享模块名
[root@localhost~]# rsync-avz backuper@192.168.4.200::wwwroot /root
格式2: rsync://用户名@主机地址/共享模块名
[root@localhost~]# rsync -avz rsync://backuper@192.168.4.200/wwwroot /root44

rsync源的免交互处理
使用 --password-file= 密码文件

rsync远程同步部署

环境:两台服务器,服务器(上面)作为同步源,开启rsync服务,服务器(下面)作为客户机,备份服务器A的共享目录,即同步源的下行同步。
在这里插入图片描述
配置rsync源服务器

关闭防火墙,核心防护
安装apache,并检查端口是否打开

检查rsync是否安装

[root@rsync ~]# rpm -q rsync
rsync-3.0.9-18.el7.x86_64

修改配置文件

[root@rsync ~]# vi /etc/rsyncd.conf
uid = nobody   //匿名用户
gid = nobody
use chroot = yes                      #禁锢在宿主目录中
address = 20.0.0.10                   #监听地址
port 873                              #端口号
pid file = /var/run/rsyncd.pid        #进程文件位置
log file = /var/log/rsyncd.log        #日志文件位置
hosts allow = 20.0.0.0/24             #允许地址范围
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2         #不再压缩这几种格式的文件
[wwwroot]   #共享目录的名称,可根据需要命名
path = /var/www/html                  #本地同步给客户端的目(也可以默认)
comment = www.wang.com   
read only = yes                       #只读,只允许客户端进行读操作
auth users = backuper                 #客户端登录rsync的用户名,可根据需要命名
secrets file = /etc/rsyncd_users.db   #用户密码存放位置

创建backuper用户的密码文件

[root@rsync ~]# vi /etc/rsyncd_users.db    #配置文件中指定的密码路径
 backuper:111111                                      #格式必须为 用户名:密码

给密码文件设置执行权限

[root@rsync ~]# chmod 600 /etc/rsyncd_users.db 

启动rsync

[root@rsync ~]# rsync --daemon
[root@rsync ~]# netstat -antp |grep rsync
tcp        0      0 20.0.0.10:873           0.0.0.0:*               LISTEN      14461/rsync      

安装httpd,有一个/var/www/html的共享目录,也可以自己创建

[root@rsync ~]# yum -y install httpd
[root@rsync ~]# echo "wang" > /var/www/html/index.html
[root@rsync ~]# systemctl start httpd
[root@rsync ~]# curl http://localhost
wang

客户机服务器
客户机需要有同步目录(用来存放备份rsync服务器的共享文件),这里也利用安装httpd,自动生成/var/www/html。
方法一:

[root@client ~]# rsync -avz backuper@20.0.0.10::wwwroot /opt
Password:  #输入在同步源设置的密码
receiving incremental file list   #可以看到文件的传输过程
./
index.html

sent 83 bytes  received 172 bytes  56.67 bytes/sec
total size is 17  speedup is 0.07
[root@client ~]# cat /opt/index.html          #查看是否成功
wang

方法二:

删除同步的文件再测试 //避免冲突
[root@client ~]# rm -rf /opt/index.html
[root@client ~]# cat /opt/index.html
cat: /opt/index.html: 没有那个文件或目录

同步
#rsync 选项 rsync://用户名@同步源IP::共享目录名 客户机自己的同步目录
[root@client ~]# rsync -avz rsync://backuper@20.0.0.10/wwwroot /opt
Password:
receiving incremental file list
./
index.html

sent 83 bytes  received 212 bytes  87.57 bytes/sec
total size is 17  speedup is 0.05
[root@client ~]# cat /opt/index.html
wang

免密方式登录
建立密码文件,并修改权限

创建免密登录文件
[root@client ~]# vi /etc/server.pass 
111111
[root@client ~]# chmod 600 /etc/server.pass
#delete 指的是源端没有的数据,而客户机端有的数据,需要把客户机端的数据删除
[root@client ~]# rm -rf /opt/index.html
[root@client ~]# rsync -avz --delete --password-file=/etc/server.pass backuper@20.0.0.10::wwwroot /opt
receiving incremental file list
deleting rh/
./
index.html

sent 138 bytes  received 372 bytes  224.64 bytes/sec
total size is 17  speedup is 0.02
[root@client ~]# cat /opt/index.html
wang

rsync+inotify实时同步

rsync实时同步
■定期同步的不足
●执行备份的时间固定,延迟明显、实时性差
●当同步源长期不变化时,密集的定期任务是不必要的

■实时同步的优点
●一旦同步源出现变化,立即启动备份
●只要同步源无变化,则不执行备份

关于inotify(监控软件,安装在客户机上)
Linux内核的inotify机制
从版本2.6.13开始提供
可以监控文件系统的变动情况,并做出通知响应
辅助软件:inotifv-tools
在这里插入图片描述
环境说明
在这里插入图片描述
配置rsync源服务器
因为要对同步源进行写入的操作,配置文件修改只读模式为no,并且共享目录权限要改为777

vi /etc/rsyncd.conf 
read only = no
[root@maneger ~]# chmod -R 777 /var/www/html/

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

[root@rsync ~]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384     #监控事件的最大队列数
fs.inotify.max_user_instances = 1024       #监控的最大实例数
fs.inotify.max_user_watches = 1048576     #监控的每实例的最大文件数

加载
[root@rsync ~]# sysctl -p
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

重新启动rsync服务,注意:kill pid号和kill -9 pid号的区别:后者不会删除pid文件,会导致服务起不来

[root@rsync ~]# pkill -9 rsync
[root@rsync ~]# netstat -anpt | grep rsync
[root@rsync ~]# rsync --daemon
[root@rsync ~]# failed to create pid file /var/run/rsyncd.pid: File exists
^C
[root@rsync ~]# rm -rf /var/run/rsyncd.pid   #必须要删除原来的pid文件,才能再启动
[root@rsync ~]# rsync --daemon
[root@rsync ~]# netstat -anpt | grep rsync
tcp        0      0 20.0.0.10:873     0.0.0.0:*               LISTEN      4227/rsync      

客户机服务器配置
客户端更改内核参数,指定队列大小,最多监控实例数,每个实例最多监控文件数(可以不写)

[root@rsync ~]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384     #监控事件的最大队列数
fs.inotify.max_user_instances = 1024       #监控的最大实例数
fs.inotify.max_user_watches = 1048576     #监控的每实例的最大文件数

加载
[root@rsync ~]# sysctl -p
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

解压缩inotify并安装

inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果
[root@client ~]# tar zxf inotify-tools-3.14.tar.gz 
[root@client ~]# cd inotify-tools-3.14/
[root@client inotify-tools-3.14]# ./configure 
[root@client inotify-tools-3.14]# make && make install

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

[root@client inotify-tools-3.14]# mkdir -p /var/www/html 
[root@client inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /var/www/html 

附加:

# -e 监控后面的几个对目录/var/www/html的操作
-m,  持续进行监控
-r,  递归监控所有子对象
-q,  简化输出信息
-e,  指定要监控哪些事件类型
#会持续监控,另起一个连接进行添加删除操作

执行完上面最后一条命令后处于监控状态,不能做输入操作,在开启一个新的终端设备

另一个终端文件测试
[root@client ~]# cd /var/www/html/
[root@client html]# touch 1.txt
[root@client html]# touch 2.txt
[root@client html]# rm -rf 2.txt
[root@client html]# mv 1.txt /opt

监控端查看
[root@client inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /var/www/html
/var/www/html/ CREATE 1.txt
/var/www/html/ CREATE 2.txt
/var/www/html/ DELETE 2.txt
/var/www/html/ MOVED_FROM 1.txt

客户端上编写脚本,将inotify监控和rsync远程同步结合起来

[root@client inotify-tools-3.14]# vi /opt/inotify.sh
#!/bin/bash
INOTIFY="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html"
RSYNC="rsync -azH --delete --password-file=/etc/server.pass /var/www/html backuper@20.0.0.10::wwwroot/"
$INOTIFY | while read DIRECTORY EVENT FILE   #逐条读取监控记录
do
        if [ $(pgrep rsync | wc -l) -le 0 ];then
            $RSYNC
        fi
done

[root@client inotify-tools-3.14]# chmod +x /opt/inotify.sh
[root@client inotify-tools-3.14]# cd /opt/


运行脚本
[root@client ~]# chmod +x inotify.sh
[root@client opt]# ./inotify.sh    #开始监控,停留此状态

另起一个连接验证,对目录进行操作
在客户端/var/www/html目录下创建文件,查看源端/var/www/html目录是否同步到

客户端/var/www/html目录下创建目录
[root@client html]# touch 1.txt
[root@client html]# touch 2.txt
[root@client html]# touch 3.txt
[root@client html]# touch 4.txt

查看源端/var/www/html目录,新建的和原来就存在的文件都成功同步,且属主属组均为nobody用户
[root@rsync ~]# cd /var/www/html/
[root@rsync html]# ll
总用量 0
-rw-r--r--. 1 nobody nobody 0 11月 28 20:45 1.txt
-rw-r--r--. 1 nobody nobody 0 11月 28 20:45 2.txt
-rw-r--r--. 1 nobody nobody 0 11月 28 20:47 3.txt
-rw-r--r--. 1 nobody nobody 0 11月 28 20:48 4.txt
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值