rsync远程同步(rsync源服务器+inotify实时同步)

一、rsync介绍

  • Remote Sync,远程同步,它是一个开源的快速增量备份工具,可以在不同主机之间镜像同步整个目录树。
  • 支持增量备份、保持连接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用
  • 支持本地复制,或者与其他SSH、rsync主机同步
  • rsync 与scp FTP等工具备份的机制的优越性在于rsync 同步备份是先比较在拷贝变化过的数据,这样更节省资源,如有1T的数据只有1K的数据改变,则rsync 基本上备份只要同步1k 的数据而 scp 是个傻瓜式的拷贝,全部拷贝。

1.1、rsync 服务的模式

  • 1、ssh方式进行同步
  • 2、C/S 方式,rsync 有服务器端daemon模块 和rsync 客户端

1.2、rsync服务原理

在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责相应来自客户机的rsync同步操作的服务器称为同步源。
在同步过程中,同步源负责提供文档的原始位置,发起端应对该位置有读取权限。
如下图:
在这里插入图片描述

  • rsync是一款快速增量备份工具,支持:
1)本地复制;
(2)与其他SSH同步;
(3)与rsync主机同步。

稍后从这三个方面来演示怎么使用rsync备份工具。

1.3、配置rsync源思路

配置rsync源服务器大致分为三步:
(1)建立rsync配置文件;
(2)为备份账户创建数据文件;
(3)启动rsync服务。

二、搭建rsync服务

准备两台虚拟机,一台作为同步源,一台用于客户机发起同步。

2.1、建立rsync配置文件

同步源服务器:

[root@localhost ~]# yum -y install httpd
#如果虚拟机是最小化安装,还需要rsync包安装。
[root@localhost ~]# yum -y install rsync

[root@localhost ~]# vi /etc/rsyncd.conf           ####在同步源服务器上配置
 uid = nobody
 gid = nobody
 use chroot = yes                                 ####禁锢在源目录
 address = 10.0.0.40                              ####监听地址.
 port 873                                         ####监听端口号
 log file = /var/log/rsyncd.log                   ####日志文件位置
 pid file = /var/run/rsyncd.pid                   ####存放进程ID的文件位置
 hosts allow = 10.0.0.0/24                        ####允许访问的客户机地址
[wwwroot]                                         ####共享模块名称
 path = /var/www/html                             ####源目录的实际路径
 comment = Document Root of www.51xit.top
 read only =yes                                   #####是否只读
 dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z         ####同步时不在压缩的文件类型
 auth users =backuper                             #####授权账户
 secrets file = /etc/rsyncd_users.db

基于安全性考虑,同步源最好仅允许以只读方式做同步,另外,同步也可以采用匿名的方式,只要将其中的“auth users”"secrets file"配置注释掉即可
在这里插入图片描述

2.2、为备份账户创建数据文件

#创建rsync账号文件
采用“用户名:密码”的记录格式,每行一个用户记录,独立的账号数据,不依赖于系统账号
[root@localhost ~]# vi /etc/rsyncd_users.db
backuper:pwd123

#由于账号信息采用明文存放,因此需要调整文件权限,避免账号信息泄露
[root@localhost ~]# chmod 600 /etc/rsyncd_users.db 

#备份用户应对源目录具有读取权限。
[root@localhost ~]# ls -ld /var/www/html   
drwxr-xr-x. 2 root root 6 88 2019 /var/www/html

2.3、启用rsync服务

通过–daemon模块独自提供服务

[root@localhost ~]# rsync --daemon
[root@localhost ~]# netstat -anpt | grep rsync
tcp        0      0 10.0.0.40:873           0.0.0.0:*               LISTEN      57804/rsync  

在这里插入图片描述

#此处如果想要停止这个服务 ,有两个方式:
方式一:
[root@localhost ~]# kill $(cat /var/run/rsyncd.pid)   #使用这个停止服务必须删除存放rsync服务进程的文件
[root@localhost ~]# rm -rf /var/run/rsyncd.pid

方式二:直接使用“netstat -anpt | grep rsync”命令查出进程号,使用“kill 进程号”

2.4、新建文件做测试

在源目录/var/www/html中,新建文件

[root@localhost opt]# cd /var/www/html/
[root@localhost html]# vi 123.html                ####里面的内容随意加
[root@localhost html]# vi 456.html                ####里面的内容随意加

三、使用rsync备份工具

配置好rsync同步源服务器之后,客户端就可以使用rsync工具来执行远程同步了。
rsync命令的选项;

选项功能
-r递归模式,包含目录及子目录中所有文件-
1对于符号链接文件仍然复制为符号链接文件
-p保留文件的权限标记
-t保留文件的时间标记
-g保留文件的属组标记(仅超级用户使用)
o保留文件的属主标记(仅超级用户使用)
D保留设备文件及其他特殊文件
-a归档模式,递归并保留对象属性,等同于-rlptgoD
-v显示同步过程的详细(( verbose)信息
-z在传输文件时进行压缩( compress)
-H:保留硬连接文件
-A保留ACL属性信息
- -delete删除目标位置有而原始位置没有的文件
- -checksum根据对象的校验和来决定是否跳过文件

1、本地复制(类似于cp命令)

[root@localhost ~]# rsync /etc/fstab /opt/
[root@localhost ~]# ll /opt/
总用量 8
-rw-r--r--. 1 root root  617 1112 14:52 fstab
drwxr-xr-x. 2 root root    6 326 2015 rh
rsync [选项] 原始位置 目标位置
###常用选项###
-a:归档模式,递归并保留对象属性,等同于 -rlptgoD
-v:显示同步过程的详细(verbose)信息
-z:在传输文件时进行压缩(compress)
-H:保留硬连接文件
-A:保留ACL属性信息
--delete:删除目标位置有而原始位置没有的文件
--checksum:根据对象的校验和来决定是否跳过文件

2、与其他SSH同步

[root@localhost ~]# rsync -av root@10.0.0.50:/root/123.txt
root@10.0.0.50's password:

3、与rsync源主机同步

格式1:rsync -avz 用户名@主机地址::共享模块名 目标目录
格式2: rsync -avz rsync://用户名@主机地址/共享模块名 目标目录

[root@localhost ~]# rsync -avz backuper@10.0.0.40::wwwroot /opt
或者
[root@localhost ~]# rsync -avz rsync://backuper@10.0.0.40/wwwroot /opt

在这里插入图片描述

rsync -avzH --delete backuper@10.0.0.40::wwwroot  /opt
--delete:删除目标位置有而原始位置没有的文件

在这里把opt目录下除了源主机的wwwroot模块里的文件,其他全删除。
在这里插入图片描述

4、rsync源的免交互处理

客户机:

[root@localhost wwwroot]# vi /etc/server.pass
pwd123
[root@localhost wwwroot]# cat /etc/server.pass
pwd123
[root@localhost wwwroot]# chmod 600 /etc/server.pass

再次修改rsync 服务器内容,用于辨别同步效果
在这里插入图片描述

#客户机同步信息,指明密码存放
rsync -az --delete --password-file=/etc/server.pass backuper@10.0.0.40::wwwroot /opt

免交互同步新的内容在这里插入图片描述

5、设置定期同步

[root@localhost ~]# crontab -e   ####每天晚上10点半对服务器网站目录更新一次
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass backuper@10.0.0.40::wwwroot /opt/myweb/

[root@localhost ~]# systemctl restart crond
[root@localhost ~]# systemctl enable crond

四、rsync实时同步配置

4.1、实时同步介绍

  • 1、定期同步存在一些不足之处,比如:

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

    • 一旦同步源出现变化,立即启动备份
    • 只要同步源无变化,则不执行备份
  • 3、inotify介绍

    • Linux内核从2.6.13开始,引入了inotify机制。
    • 它是一种文件系统的变化通知机制,可以监控文件,也可以监控目录。当监控目录时,它可以同时监控目录及目录中的各子目录及文件的。
    • 可以协助rsync,监控到数据的改变,触发 rsync 进行数据的同步。
      在这里插入图片描述

4.2、部署过程

客户机:

1、调整inotify内核参数
当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。
可以直接修改/etc/sysctl.conf的配置文件,将管理队列、实例数、监控数进行设置。

[root@localhost ~]# vi /etc/sysctl.conf      #客户端
#直接在行尾添加
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

[root@localhost ~]# sysctl -p 

2、安装inotifi-tools
使用inotify机制还需要安装inotifi-tools,以便提供 inotifywait 和 inotifywatch 辅助工具程序,用来监控和汇总改动情况。

  • inotifywait:用于持续监控,实时输出结果
  • inotifywatch:用于短期监控,任务完成后再出结果
#上传inotify-tools-3.14.tar.gz到/opt目录下
[root@localhost ~]# cd /opt
[root@localhost opt]# tar xzvf inotify-tools-3.14.tar.gz 
[root@localhost opt]# cd inotify-tools-3.14/
[root@localhost inotify-tools-3.14]# ./configure
[root@localhost inotify-tools-3.14]# make && make install

3、编写触发式同步脚本

vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/myweb/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/myweb/ backuper@10.0.0.40::wwwroot"
 
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
#       echo "${FILE} was rsynced" >>/opt/inotify_rsync.log

    fi
done

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

4、验证
源服务器:

[root@localhost html]# vi /etc/rsyncd.conf   #源服务器
read only = no             ###这个地方原来的yes  改成 no    这个地方的模块可以读写了

[root@localhost ~]#  kill $(cat /var/run/rsyncd.pid)      ###关闭rsyncd服务
[root@localhost ~]# rsync --daemon                        ###启动rsyncd服务
[root@localhost ~]# netstat -anpt |grep rsync
tcp        0      0 10.0.0.40:873           0.0.0.0:*               LISTEN      59922/rsync
[root@localhost ~]# chmod 777 /var/www/html/

客户机:

[root@localhost ~]#  /opt/inotify.sh 
[root@localhost ~]#  chmod 777 /opt/myweb/     ###需要在开一个终端
[root@localhost ~]#  vi /opt/myweb/110.html      ###里面插入任意数据

源服务器查看:

[root@localhost ~]# ll /var/www/html/         ##  会发现这个地方会多个110.html文件
-rw-------. 1 nobody nobody  8 1112 17:24 110.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值