• Rsync + Innotify 部署实例


    需求

    web服务器定期对项目目录做备份;
    单独一台备份服务器上,定期拉取web服务器上的备份数据到本地

    主机信息

    主机名 ip 角色
    node01 192.168.100.11 备份服务器(rsync-server)
    node02 192.168.100.12 WEB服务器(rsync-client)

    配置

    备份服务器配置

    yum install -y rsync
    cp /etc/rsyncd.conf{,.bak}
    vim /etc/rsyncd.conf
    """
    uid = xiaofei  # 用户身份,系统用户
    gid = xiaofei
    use chroot = no
    max connections = 10
    pid file = /var/run/rsyncd.pid
    log file = /var/log/rsyncd.log
    lock file = /var/run/rsyncd.lock
    transfer logging = yes
    strict modes = yes  # 是否检查密码文件权限
    timeout = 900
    ignore nonreadable = yes
    dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
    
    [backup]  # 模块名
    	path = /backup/  # 模块对应的具体路径
    	comment = backup export area
    	read only = false
    	#write only = true
    	auth users = backup_user  # 虚拟用户
    	secrets file = /etc/rsyncd.password  # 虚拟用户授权文件
    	ignore errors = yes
    	hosts allow = 192.168.100.0/24
    	hosts deny = *
    	list = false
    """
    
    mkdir /backup
    useradd -s /sbin/nologin -M xiaofei
    chown -R xiaofei.xiaofei /backup
    echo "backup_user:123456" > /etc/rsyncd.password
    chmod 600 /etc/rsyncd.password
    systemctl start rsyncd
    ss -tnl
    

    web服务器配置

    yum install -y rsync
    useradd xiaofei
    mkdir /backup
    chown -R xiaofei:xiaofei /backup
    

    备份服务端测试

    # upload
    rsync -az /tmp/test.txt backup_user@192.168.100.11::backup
    
    # download
    rsync -az backup_user@192.168.100.11::backup /backup/
    

    结合crontab自动任务计划

    echo "123456" > /etc/rsyncd.password
    chmod 600 /etc/rsyncd.password
    
    crontab -e
    """
    * * * * 1,3,5 /usr/bin/rsync --delete --password-file=/etc/rsyncd.password -az backup_user@192.168.100.11::backup /backup/
    """
    
    

    注意:ip::后面的test是模块名,而不是目录名,一般我们都定义同样的名字,以便见名知意

    Rsync + Inotify

    inotify,实时监控指定目录下文件元数据,发生变化则会触发执行指定动作。

    注意需要安装在 rsync-client

    最终实现:
    实时监控目标文件夹,一旦发生变化,则执行上传操作到备份服务器上。

    yum install -y inotify-tools
    cat inotify_script.sh
    """
    #!/bin/bash
    #
    bakip=192.168.100.11
    src=/backup/
    dst=backup
    user=backup_user
    pwdfile=/etc/rsyncd.password
    
    /usr/bin/inotifywait -mrq 
         --timefmt '%d-%m-%y %H:%M' 
         --format '%T%w%f%e' 
         -e create,delete,modify,attrib,move,close_write $src 
         | while read files;do
    	/usr/bin/rsync -az --delete --progress --password-file=$pwdfile $src ${user}@${bakip}::${dst}
    	echo "${files} is rsynced." >> /tmp/rsync.log 2>&1
         done
    """
    
    nohup sh /scripts/inotify_script.sh &
    
    touch /backup/{1..9}.html
    

    注意:备份数据的用户权限

  • 相关阅读:
    开源分布式任务调度工具,和你一起记住生命中每一个重要的时刻
    寒假学习进度
    寒假学习进度
    寒假学习进度
    寒假学习进度
    js第三个阶段的面试题
    vue3保证你看懂watch和watchEffect的详细详细使用
    VMtool 安装与使用
    PHP 远程 debug
    一些有趣的编程名言
  • 原文地址:https://www.cnblogs.com/xiaofeiweb/p/13451306.html
Copyright © 2020-2023  润新知