rsync+inotifyサービスの導入

7368 ワード

rsync+inotifyの導入
  • rsync概要rsyncはlinuxシステムのデータミラーバックアップツールです.高速インクリメンタルバックアップツールRemote Syncを使用すると、リモート同期、ローカルレプリケーションのサポート、または他のssh、rsyncと同期できます.
  • inotify概要inotifyは強力で、細粒度の、非同期のファイルシステムイベント監視メカニズムであり、linuxカーネルは2.6.13からinotifyサポートに加入している.inotifyによってファイルシステムにおける追加、削除、修正、移動などの各種の微細なイベントを監視することができ、このカーネルインタフェースを利用して、サードパーティのソフトウェアはファイルシステムの下のファイルの各種の変化状況を監視することができ、inotify-toolsはこのようなサードパーティのソフトウェアである.

  • 環境説明:シミュレーションには2台のサーバが必要です.1台はソースサーバ、1台はターゲットサーバです.ここで、ソースサーバアドレスは192.168.226.128であり、ターゲットサーバアドレスは192.168.226.130である.
    需要:ソースサーバ/hxdディレクトリをターゲットサーバ/tmp/hxd/ディレクトリにリアルタイムで同期する
  • ターゲットサーバ
  • の構成
    //      selinux
    [root@hxdserver ~]# systemctl stop firewalld
    [root@hxdserver ~]# systemctl disable firewalld
    [root@hxdserver ~]# getenforce 
    Enforcing
    [root@hxdserver ~]# setenforce 0
    [root@hxdserver ~]# vim /etc/sysconfig/selinux
    SELINUX=disabled  //  
    //  rsync  
    [root@hxdserver ~]# yum install -y rsync
    //      /etc/rsyncd.conf
    [root@hxdserver ~]# vim /etc/rsyncd.conf 
    log file = /var/log/rsyncd.log
    pidfile = /var/run/rsync.pid
    lock file = /var/run/rsync.lock
    secrets file = /etc/rsync.pass
    
    [hxd]
    path = /tmp/hxd
    comment = sync etc from client
    uid = root
    gid = root
    port = 873
    ignore errors
    use chroot = no
    read only = no
    list = no
    max connections = 200
    timeout = 600
    auth users = dubai
    hosts allow = 192.168.226.128
    hosts deny = 172.16.1.1
    //      
    //        
    [root@hxdserver ~]# echo 'dubai:123' > /etc/rsync.pass
    [root@hxdserver ~]# cat /etc/rsync.pass 
    dubai:123
    //      
    [root@hxdserver ~]# chmod 600 /etc/rsync*
    [root@hxdserver ~]# ll /etc/rsync*
    -rw-------. 1 root root 854 9   18 19:20 /etc/rsyncd.conf
    -rw-------. 1 root root  10 9   18 19:27 /etc/rsync.pass
    
    //  rsync         
    [root@hxdserver ~]# systemctl start rsyncd
    [root@hxdserver ~]# systemctl enable rsyncd
    Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
    [root@hxdserver ~]# ss -antl
    State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
    LISTEN     0      128              *:22                           *:*                  
    LISTEN     0      100      127.0.0.1:25                           *:*                  
    LISTEN     0      5                *:873                          *:*                  
    LISTEN     0      128             :::80                          :::*                  
    LISTEN     0      128             :::22                          :::*                  
    LISTEN     0      100            ::1:25                          :::*                  
    LISTEN     0      5               :::873                         :::* 
    
    
    
  • ソースサーバ
  • の構成
    //      selinux
    [root@Hongxiande ~]# systemctl stop firewalld
    [root@Hongxiande ~]# systemctl disable firewalld
    [root@Hongxiande ~]# getenforce 
    Disabled
    
    //  yum 
    [root@Hongxiande ~]# yum install -y wget
    [root@Hongxiande ~]# cd /etc/yum.repos.d/
    [root@Hongxiande yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
    [root@Hongxiande yum.repos.d]# sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-163.repo
    [root@Hongxiande yum.repos.d]#  sed -i 's/^enabled=.*/enabled=1/g' /etc/yum.repos.d/CentOS7-Base-163.repo 
    [root@Hongxiande yum.repos.d]#  yum clean all
    [root@Hongxiande yum.repos.d]# yum install -y epel-release
    //  rsync     ,          ,      。
    [root@Hongxiande ~]# yum install -y rsync
    //             。
    [root@Hongxiande ~]# echo '123' > /etc/rsync.pass
    [root@Hongxiande ~]# cat /etc/rsync.pass 
    123
    [root@Hongxiande ~]# chmod 600 /etc/rsync.pass 
    [root@Hongxiande ~]# ls
    anaconda-ks.cfg
    [root@Hongxiande ~]# mkdir -p hxd/xixi
    [root@Hongxiande ~]# ls
    anaconda-ks.cfg  hxd
    [root@Hongxiande ~]# rsync -acH --port 873 --progress --delete /root/hxd [email protected]::hxd --password-file=/etc/rsync.pass
    @ERROR: chdir failed
    rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
    //     ,         dubai  。 hxd  。
    //        dubai   /tmp/hxd  
    [root@hxdserver ~]# useradd dubai
    [root@hxdserver ~]# cd /tmp/
    [root@hxdserver tmp]# mkdir hxd
    
    //        
    [root@Hongxiande ~]# rsync -acH --port 873 --progress --delete /root/hxd [email protected]::hxd --password-file=/etc/rsync.pass
    sending incremental file list
    hxd/
    hxd/xixi/
    [root@hxdserver ~]# ls /tmp/hxd/
    hxd
    
    //      
    
    //  inotify-tools  ,    rsync    
    //           inotify
    [root@Hongxiande ~]# ll /proc/sys/fs/inotify/
        0
    -rw-r--r-- 1 root root 0 9   19 09:41 max_queued_events
    -rw-r--r-- 1 root root 0 9   19 09:41 max_user_instances
    -rw-r--r-- 1 root root 0 9   19 09:41 max_user_watches
    
    //      max               inotify
    //  inotify-tools
    [root@Hongxiande ~]# yum install -y inotify-tools
    //     ,     ,                
    //       ,     rsync            
    [root@Hongxiande ~]# mkdir /scripts
    [root@Hongxiande ~]# touch /scripts/inotify.sh
    [root@Hongxiande ~]# chmod 755 /scripts/inotify.sh 
    [root@Hongxiande ~]# ll /scripts/inotify.sh 
    -rwxr-xr-x 1 root root 0 9   19 09:56 /scripts/inotify.sh
    //    
    [root@Hongxiande ~]# vim /scripts/inotify.sh
    host=192.168.226.130
    src=/root/hxd
    des=hxd
    password=/etc/rsync.pass
    user=dubai
    inotifywait=/usr/bin/inotifywait
    
    $inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
    | while read files ;do
        rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des
        echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
    done
    
    //      
    //    
    [root@Hongxiande ~]# nohup bash /scripts/inotify.sh &
    [root@Hongxiande ~]# nohup bash /scripts/inotify.sh &
    [1] 1851
    [root@Hongxiande ~]# nohup:            "nohup.out"
    
    [root@Hongxiande ~]# ps -ef|grep inotify
    root       1851   1243  0 10:22 pts/0    00:00:00 bash /scripts/inotify.sh
    root       1852   1851  0 10:22 pts/0    00:00:00 /usr/bin/inotifywait -mrq --timefmt %Y%m%d %H:%M --format %T %w%f%e -e modify,delete,create,attrib /root/hxd
    root       1853   1851  0 10:22 pts/0    00:00:00 bash /scripts/inotify.sh
    root       1857   1243  0 10:23 pts/0    00:00:00 grep --color=auto inotify
    
    
    //             
    [root@Hongxiande ~]# touch hxd/xixi/test
    [root@Hongxiande ~]# echo 'hello world' > hxd/xixi/test
    //  inotify     
    [root@Hongxiande ~]# tail /tmp/rsync.log 
    20180919 10:34 /root/hxd/xixi/testCREATE was rsynced
    20180919 10:34 /root/hxd/xixi/testATTRIB was rsynced
    20180919 10:34 /root/hxd/xixi/testMODIFY was rsynced
    
    //             
    //                
    [root@hxdserver ~]# cat /tmp/hxd/hxd/xixi/test 
    hello world
    //           
    //            
    [root@Hongxiande ~]# chmod +x /etc/rc.
    rc.d/     rc.local  
    [root@Hongxiande ~]# chmod +x /etc/rc.d/rc.local 
    [root@Hongxiande ~]# ll /etc/rc.d/rc.local 
    -rwxr-xr-x. 1 root root 473 6   27 2017 /etc/rc.d/rc.local
    [root@Hongxiande ~]# vim /etc/rc.d/rc.local
    
    nohup /bin/bash /scripts/inotify.sh  //       
    

    これでrsync+inotifyが構築されます
    //    
    [root@Hongxiande ~]# rsync -acH --port 873 --progress --delete /root/hxd [email protected]::hxd --password-file=/etc/rsync.pass
    @ERROR: chdir failed
    rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
    //     ,         dubai  。 hxd  。
    //        dubai   /tmp/hxd