Linux&&rsync远程同步


一款快速增量备份工具

命令选项:
在这里插入图片描述

-r:递归模式,包含目录及子目录中所有文件
-l:对于符号链接文件仍然复制为符号链接文件
-p:保留文件的权限标记
-t:保留文件的时间标记
-g:保留文件的属组标记(仅超级用户使用)
-o:保留文件的属主标记(仅超级用户使用)
-D:保留设备文件及其他特殊文件

备份操作类型:
在这里插入图片描述
rsync源服务器:

  • 指备份操作的远程服务器,也称备份源
  • 备份源分为rsync源和SSH源两种

基于SSH源的rsync实现(定时同步)

服务端部署步骤

服务端准备好 存放数据的目录 和 需要备份的数据 即可。

客户端部署步骤

确认网络环境,客户端能够访问到服务端。

#创建 存放数据的目录
mkdir  -p  /var/www/html
#从远处往本地同步:rsync  选项  ssh源  本地目录
rsync  -avz  --delete  [email protected]:/var/www/html/  /var/www/html/  
#将本地同步到远端:rsync  选项  本地目录  ssh源
rsync  -avz  --delete  /var/www/html/  [email protected]:/var/www/html/  
    

/var/www/html/ : 代表同步html目录下的数据到。。
/var/www/html : 代表同步html这个目录到。。

实现免密钥的rsync或ssh或scp

#本地客户端创建密钥对
ssh-keygen  -t  rsa
#上传密钥到远处服务端
ssh-copy-id -p 22 [email protected]
#测试密钥是否生效
ssh  [email protected]

实现定时任务rsync同步

#实现定时备份
crontab  -e
30  17  *  *  *  /usr/bin/rsync  -az  --delete  [email protected]:/var/www/html/  /var/www/html/

在这里插入图片描述
参考链接:
https://www.linuxidc.com/Linux/2016-05/131116.htm

基于inotify的rsync实现(实时同步)

Linux内核的inotify机制

作用:监控文件系统的变动情况并做出通知响应
个人感觉非常有用!
可以对系统中的文件变动做到实时的监控
可以实时监控到哪个目录下什么时间出现了什么文件?哪个文件又在什么时间被修改或移除了。
命令:
inotifywait : 用于持续监控,实时输出结果。
在这里插入图片描述

-e attrib : ;监控文件的属主、属组变化
详细inotify使用方法请参考:https://www.cnblogs.com/wajika/p/6396748.html

inotifywatch : 用于短期监控,任务完成后再输出结果。

服务端部署步骤

安装辅助工具inotify-tools

#解压缩。
tar  zxf  inotify-tools-3.14.tar.gz  -C  /usr/src/
cd  /usr/src/inotify-tools-3.14
./configure  &&  make  &&  make  install
#启动inotify进行持续监控测试
inotifywait  -mrq  -e  create,move,delete,modify,attrib  /var/www/html  &
#尝试在/var/www/html目录下创建、删除、修改文件,看inotifywait能否监控到。

#调整inotify内核参数
vim  /etc/sysctl.conf
    fs.inotify.max_queue_events = 16384
    fs.inotify.max_user_instances = 1024
    fs.inotify.max_user_watches = 1048576
sysctl  -p

调整inotify内核参数:

max_queue_events : 最大监控事件队列大小。事件如create、delete、modify、attrib等。
max_user_instances : 最多监控实例数。
max_user_watches : 每个实例最多监控文件数

通过inotifywait触发rsync同步操作

使用while、read持续获取监控结果,根据结果做判断、决定执行何种操作。

vim  /opt/inotify_rsync.sh
    #!/bin/bash
    #定义inotify命名行。实时监控
    INOTIFY_CMD="inotifywait  -mrq  -e  modify,create,attrib,move,delete  /var/www/html/"
    #定义rsync命令行。本地同步到远端。
    RSYNC_CMD="rsync  -azH  --delete  /var/www/html/  [email protected]:/var/www/html/"
    #启动inotify命名行 | 读取inotify产生的监控记录
    $INOTIFY_CMD | while read DIRECTORY EVENT FILE
    do
        #如果rsync未在执行,则立即启动。
        if [ $(pgrep ^rsync$ | wc -l) -le 0 ];then
            $RSYNC_CMD
        fi
    done
#授予执行权限
chmod  a+x  /opt/inotify_rsync.sh
#执行脚本
/opt/inotify_rsync.sh  &

read : 常用于交互式赋值操作
read DIRECTORY EVENT FILE : 定义变量 DIRECTORY、EVENT、FILE并用read分别为三个变量赋值。
while read DIRECTORY EVENT FILE : 只要变量 DIRECTORY、EVENT、FILE存在赋值现象,就为true。
pgrep ^rsync$ : 检测进程中是否存在未执行完毕的rsync进程。保证rsync不会重叠运行!

rsync实现源服务器与客户端的数据同步

服务端部署步骤

#配置rsyncd.conf
vim  /etc/rsyncd.conf
    #权限用户。登录验证成功后,将登录用户权限映射为nobody用户。
    uid = nobody
    gid = nobody
    #虚根为自定义的共享路径
    use chroot = yes
    #监听地址
    address = 192.168.75.111
    #监听端口
    port 873
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    #允许访问的客户机地址(单个IP地址或地址段)
    hosts allow = 192.168.75.0/24
    #自定义共享名称
    [wwwroot]
        #针对哪个路径进行共享
        path = /var/www/html
        #描述信息。可忽略。
        comment = Document Root of dfq.test.com
        #只允许从远端读到本地,未允许从本地写到远端。
        #read only = yes
        read only = no
        #定义具备写操作权限的用户列表。允许客户端对服务端的共享目录执行写操作
        write list = nobody
        #以下文件类型在同步时忽略不进行压缩操作
        dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
        #用户认证信息。定义登录验证时使用的是哪个用户信息
        auth users = backuper
        #定义rsync账号文件rsyncd_users.db。内部存有登录验证时使用的用户账号、密码。
        secrets file = /etc/rsyncd_users.db

#配置rsync账号文件。创建程序用户信息。
vim  /etc/rsyncd_users.db
    backuper:pwd123
    othername:123456
#改变/etc/rsyncd_users.db文件权限为600.否则会因为非root用户对该文件有读权限而报错
chmod  600  /etc/rsyncd_users.db

#改变共享目录权限。令登录用户映射的nobody用户具备对其写权限,实现客户端对服务端的文件写入。
chmod  o+w  /var/www/html/

#配置完成后,启动rsync服务
rsync  --daemon

客户端部署步骤

#下行检测
#启动rsync.使用登录用户backuper登录源服务器192.168.75.111访问共享项目wwwroot,读取数据到本地/var/www/html目录。
rsync  -azv  --delete  [email protected]::wwwroot  /var/www/html
#上行检测
rsync  -azv  --delete  /var/www/html  [email protected]::wwwroot
  

基于rsync源的免交互实现

#保存密码在本地文件
vim  /etc/server.pass
    pwd123
chmod  600  /etc/server.pass
#启动测试
rsync  -azv  --delete  --password-file=/etc/server.pass /var/www/html/  [email protected]::wwwroot
#设置定时任务
crontab  -e
    30 20 * * * /usr/bin/rsync  -az  --delete  --password-file=/etc/server.pass  /var/www/html/  [email protected]::wwwroot
    
service  crond  restart
chkconfig  crond  on

rsync常见错误一

问题现象:
rsync: failed to connect to 192.168.75.111:connection refused(111)
rsync error:error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.6]
问题分析:
确认一下rsync服务是否正在运行,rsync服务监听的端口是否存在且客户端能访问到。

rsync常见错误二

问题现象:
@ERROR:auth failed on module wwwroot
rsync error : error starting client-server protocol (code 5)at main.c(1503) [receiver=3.0.6]
解决方法:
#改变/etc/rsyncd_users.db文件权限为600.否则会因为非root用户对该文件有读权限而报错
chmod 600 /etc/rsyncd_users.db

发布了73 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/dfq737211338/article/details/103896776