rsync+inotify实时备份

rsync+inotify实时备份




Rsync 及 Inotify


实例1: inotify + rsync客户端 实时备份
    linux主服务器端 
        # yum install inotify-tools               \\ epel源
        # vim /etc/sysctl.conf                     \\ 修改默认inotify参数 默认在/proc/sys/fs/inotify/下
            fs.inotify.max_queued_events = 32768    \\ 表示监控事件队列
            fs.inotify.max_user_instances = 1024     \\ 表示最多监控实例数
            fs.inotify.max_user_watches = 9999999     \\ 表示每个实例最多监控文件数
        # sysctl -p
        # cd /data/shell/
        # vim inotify_web.sh
            #!/bin/bash
            src=/data/www/
            /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,create,modify,move,delete $src | while read
            do
                echo $src >> /tmp/inotofy_web.log
                rsync -avzP --delete --port=63873 /data/www/ --exclude '.*.swp' --exclude 'log' www@192.168.10.12::cp_web
                rsync -avzP --delete --port=63873 /data/www/ --exclude '.*.swp' --exclude 'log' www@192.168.10.13::cp_web
            done
        # chmod +x inotify_web.sh
        # chmod +x /etc/rc.d/rc.local
        # echo "/data/shell/inotify_web.sh &>/dev/null &" >> /etc/rc.d/rc.local        \\ 开机启动
        # ./inotify_web.sh &>/dev/null &      \\ 手动执行

    linux从服务器端
        # yum install rsync
        # vim /etc/rsyncd.conf           \\ 默认配置文件为空 需要新建
            uid  = www
            gid  = www
            port = 63873
            use chroot  = no
            max connections = 10
            hosts allow = 47.91.219.64
            lock file = /var/run/rsync.lock
            log file  = /var/log/rsyncd.log
            ignore errors
            [cp_web]
            path = /data/www
            read only = no
        # groupadd www
        # useradd -g www www -s /sbin/nologin
        # chown -R www.www /data/www                        \\ 需要给目录权限 属主给www
        # rsync --daemon                                     \\ centos 6 启动服务  873端口被监控
        # pkill rsync                                         \\ 停止服务
        # ss -tnl                                              \\ 63873端口被监控 默认为873端口
        # echo "/usr/bin/rsync --daemon" >> /etc/rc.d/rc.local  \\ 加入开机启动
        # chmod +x /etc/rc.d/rc.local                            \\ 我开机启动文件添加执行权限
        # iptables -A INPUT 4 -P tcp --dport 63873 -j ACCEPT      \\ 防火墙放行


实例2: inotify + rsync使用ssh 实时备份
    # ssh-keygen    \\ 主服务器上生成公钥和秘钥 一路回车 从服务器只需要有文件夹
    # ssh-copy-id root@192.168.10.12  \\ 拷贝到从服务器上
    # ssh 192.168.10.12                \\ 不用密码即可登录10.12
    # yum install inotify-tools               \\ epel源
    # vim /etc/sysctl.conf                     \\ 修改默认inotify参数 默认在/proc/sys/fs/inotify/下
        fs.inotify.max_queued_events = 32768    \\ 表示监控事件队列
        fs.inotify.max_user_instances = 1024     \\ 表示最多监控实例数
        fs.inotify.max_user_watches = 9999999     \\ 表示每个实例最多监控文件数
    # sysctl -p
    # cd /data/shell/
    # vim inotify_web.sh
        #!/bin/bash
        src=/data/www/
        /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,create,modify,move,delete $src | while read
        do
            echo $src >> /tmp/inotofy_web.log
            rsync -avzP --delete /data/www/ --exclude '.*.swp' --exclude 'log' root@192.168.10.12:/data/www/
            rsync -avzP --delete /data/www/ --exclude '.*.swp' --exclude 'log' root@192.168.10.13:/data/www/
        done
    # chmod +x inotify_web.sh
    # chmod +x /etc/rc.d/rc.local
    # echo "/data/shell/inotify_web.sh &>/dev/null &" >> /etc/rc.d/rc.local        \\ 开机启动
    # ./inotify_web.sh &>/dev/null &    \\ 手动执行
    # ps aux | grep inotify_web.sh
    # pkill inotify_web.sh                \\ 结束此脚本


实例3: 创建计划任务 自动备份                   \\ 备份数据库 待修改 应备份到.sql文件 
    # vim /data/shell/backup.sh
        #!/bin/bash
        rsync -avzP --delete /data/mysql/teo/ /data/bak/teo.bak/
        rsync -avzP  /data/mysql/teo/ /data/bak/teo.bak2/
    # chmod + x /data/shell/backup.sh
    # crontab -e                           \\ 编辑定时任务 
        0 1 * * *  /data/shell/backup.sh &  \\ 每天的1点备份 顺序*为分钟 小时 天 月 星期 +执行的命令 


实例4: windows与linux实现自动同步自动备份的数据库
    windows客户端
        解压程序 cwrsync_5.5.0_x86_free 客户端
        执行cwrsync.cmd   安装
        执行mysql-bak.bat 可以实现远程备份
            cd c:\
            C:\rsync\bin\rsync.exe -avzP --delete www@47.91.219.64::mysql_bak ./db/
        执行crontab.vbs 可添加定时任务 每天自动执行mysql-bak.bat
    linux 服务器
        # yum install rsync             \\ 参阅rsync安装即可
        # chmod + x Mysql_bak.sh         \\ mysql自动备份脚本
        # crontab -e
            0 1 * * *  /data/shell/backup.sh & \\ 每天的1点备份


实例5: windows 和 windows 之间 同步
    服务器端
        控制面板 --> 用户账户 --> 添加用户账户 --> 用户名: www  密码: Teo@1234   \\ 在2012中需要 2008不需要
        安装 cwRsyncServer_4.1.0.exe 用户名:www  密码:Teo@1234          \\ 不添加用户 没有 RsyncServer服务
        复制 rsyncd.conf   到 安装目录 C:\Program Files (x86)\ICW\ 
        创建 共享目录 D:\web
        D盘属性 --> 安全 --> 编辑 --> 添加 --> 高级 -->  立即查找 --> www --> 完全控制 权限
        cmd --> services.msc --> RsyncServer --> 右键属性 --> 启动类型 --> 自动 --> 启动 
        cmd --> netstat -ano    查看63873端口是否被监听  如果同步失败在检查防火墙是否放行
        rsyncd.conf
            uid  = 0
            gid  = 0
            port = 63873
            use chroot  = no
            max connections = 10
            hosts allow = 192.168.227.128 192.168.227.1 192.168.228.129
            lock file = rsync.lock
            log file  = rsyncd.log
            ignore errors
            [web]
            path = /cygdrive/d/web
            read only = no

    客户端
        cwRsync_5.4.1 复制到C:\ 根目录下
        添加rsync.bat到定时任务即可       \\ 亦可使用crontab.vbs 实现 实时备份 参照实例4设置
        rsync.bat
            @echo off    
            set RSYNC_HOME=C:\cwRsync_5.4.1  
            cd %RSYNC_HOME%    
            rsync -avzP --delete --progress --port=63873 /cygdrive/d/web/ www@192.168.227.129::web


Rsync常用的命令
  使用ssh
    # rsync /etc/hosts /data/                                                     \\ 复制 相当于 cp
    # rsync -avzP /opt /data/                                                      \\ 复制 目录  cp -r
    # rsync -avzP ./aa.txt root@192.168.10.101:/data/                               \\ 推送文件或目录 默认ssh端口22
    # rsync -avzP /data root@192.168.10.10::/data/ --password-file=/etc/rsync.passwd \\ 推送到目标 ssh协议 在文件中指明密码
    # rsync -avzP ./a -e 'ssh -p 65522' root@192.168.10.101:/data/          \\ 指明ssh 端口 不用服务端 使用ssh传输
    # rsync -avzP root@192.168.10.101:/data/abc ./                           \\ 拉取abc目录到当前目录下 使用ssh拉取

  使用服务器
    # rsync -avzP --delete www@192.168.10.30::cp_web /data/www/                \\ 拉取目标到本地  只需要目标安装rsync
    # rsync -avzP --delete /data/www/ www@192.168.10.30::cp_web                 \\ 本地推送到目标  只需要目标安装rsync
        rsync 选项 用户名@备份源服务器IP::共享模块名 目标目录


编译安装inotify
    # tar zxf inotify-tools-3.13.tar.gz
    # cd inotify-tools-3.13
    # ./configure
    # make -j 4
    # make install


配置文件详解
    # /etc/rsyncd: configuration file for rsync daemon mode
    # See rsyncd.conf man page for more options.
    # configuration example:
    uid  = www                    \\ 运行进程的身份
    gid  = www                     \\ 用户组  同nginx就可以
    port = 873                      \\ 默认为端口为873
    use chroot  = no                 \\ 如果为yes是锁定家目录 rsync被黑了 黑客无法再rsync运行的家目录之外创建文件
    max connections = 10              \\ 最大连接数 多少个并发往上传数据
    hosts allow = 47.91.219.64         \\ 允许哪个ip连接 *代表所有 两个ip使用空格隔开 段可以表示10.0.0.0/24
    hosts deny = 0.0.0.0/32             \\ 拒绝 
    lock file = /var/run/rsync.lock      \\ 锁文件
    log file  = /var/log/rsyncd.log       \\ 日志文件
    ignore errors                          \\ 忽略错误
    pid file = /var/run/rsyncd.pid          \\ pid 文件
    exclude = lost+found/
    transfer logging = yes
    timeout = 900                             \\ 超时时间
    ignore nonreadable = yes
    dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
    auth users = rsync_backup              \\ 认证用户 虚拟用户
    secrets file = /etc/rsync.password      \\ 上面的虚拟用户的密码文件
    motd file = /etc/rsyncd.motd             \\ 客户端登录后的弹出的信息 需要创建
    [cp_web]                                  \\ 模块 名称 标示 很重要
    path = /data/www                           \\ 备份的路径
    read only = no                              \\ 可以写     yes为只读
    list=yes                                     \\ 允许查看模块信息
    auth users = rsync_backup                     \\ 认证用户 虚拟用户
    secrets file = /etc/rsync.password             \\ 上面的虚拟用户的密码文件
    comment = ftp export area


常用参数详解:
    -a 归档模式 表示以递归方式传输文件,并保持所有文件属性. 相当于-rltopgD
    -r 对子目录以递归模式处理
    -l 保持符合连接文件
    -H 保持硬链接文件
    -P 保持文件权限
    -t 保持文件时间
    -g 保持文件数组信息
    -o 保持文件属主信息
    -D 保持设备文件和特殊文件
    -v 详细输出模式
    -n 显示哪些文件将被传输
    -z 在传输文件时进行压缩处理
    -q 精简输出模式
    -h 输出文件小打使用易读的单位 K M等
    -e 使用信道协议 指定替代rsh的shell程序 如ssh
    -exclude=   指定配出不需要传输的文件
    --delete 以源(SRC)为主,对目标(DEST)进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在 exclude/include规则生效之后才执行的。


注:
    1 如果使用密码认证需要如下命令
        # echo "rsync_backup:123456" >> /etc/rsync.password  \\ 为配置文件中auth users = rsync_backup 的值
        # chmod 600 /etc/rsync.password    \\ 只有root可以查看 对密码安全 此文件必须为700或600否则身份验证会失败 会和密码错误信息一样
    2 如果开启 motd file = /etc/rsyncd.motd 需创建
        # echo "welcome to backup server" > /etc/rsyncd.motd   \\ 提示信息 欢迎页面类似
    3 关于自动备份脚本
        # vim back.sh
            #!/bin/bash
            export RSYNC_PASSWORD=123456          \\ 在设置密码的情况下 设置此变量 把密码传入到此变量 可以不用输入密码
            rsync -avz www@192.168.10.30::www /data/www/
    4 防火墙放行用到的命令
        # iptables -A INPUT 4 -P tcp --dport 873 -j ACCEPT
    5 关于定时任务简单描述 详情参见crontab章节






Teo

You must be logged in to post a comment