rsync+inotifyはサーバ間のファイルのリアルタイム同期を実現します。

7177 ワード

ここではこの記事を参照してください。http://blog.csdn.net/linuxlsq/article/details/51768731およびこの記事:http://blog.51cto.com/dl528888/771533 ありがとうございます
メインサーバ(server端)
メインサーバはrsyncとinotifyをインストールして、メインサーバはserverとして、バックアップサーバclientにファイルを転送します。
  • rsync
  • をインストールします。
    [root@nginx ~]# cd /usr/src/  
    [root@nginx src]# ll  
    total 16  
    drwxr-xr-x 2 root root 4096 Jan 26  2010 debug  
    drwxr-xr-x 2 root root 4096 Jan 26  2010 kernels  
    [root@nginx src]# wget  http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz  
    [root@nginx src]# tar zxvf rsync-3.0.9.tar.gz  
    [root@nginx src]# cd rsync-3.0.9  
    [root@nginx rsync-3.0.9]# ./configure --prefix=/usr/local/rsync  
    [root@nginx rsync-3.0.9]# make  
    [root@nginx rsync-3.0.9]# make install  
    
    リンクが期限切れになったら、Linuxで自分でwgetをダウンロードしてもいいです。tar.gzファイルは、自分で行くこともできます。http://download.csdn.net/指定されたリソースをwindowsにダウンロードして、secureCRTを通じてLinuxに伝えます。ここで必要です。
    yum -y install lrzsz,
                :sz filename ,      CRT Options>>Session Options>>X/Y/Zmodem
                :rz,            
    
    または他のLinuxホスト上のSCPから現在のLinuxホスト上に送られ、命令フォーマット
    scp local_file remote_username@remote_ip:remote_folder 
    scp local_file remote_username@remote_ip:remote_file 
    scp local_file remote_ip:remote_folder 
    scp local_file remote_ip:remote_file 
    
  • パスワード認証ファイル
  • を作成する。
    [root@nginx rsync-3.0.9]# cd /usr/local/rsync/  
    [root@nginx rsync]# echo "rsync-pwd" >/usr/local/rsync/rsync.passwd   
    
    この中のrsync-pwdはパスワードです。rsync.passwdファイルはパスワードファイルです。パスワードとパスワードファイルの名前は自分で設定できます。
    セキュリティのためにも、以下のエラーを避けるためにも、パスワードファイルは600の権限が必要です。
    [root@nginx rsync]# chmod 600 rsync.passwd  
    
  • インストールinotify
  • [root@nginx rsync]# cd /usr/src/  
    [root@nginx src]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz  
    [root@nginx src]# tar zxvf inotify-tools-3.14.tar.gz  
    [root@nginx src]# cd inotify-tools-3.14  
    [root@nginx inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify  
    [root@nginx inotify-tools-3.14]# make  
    [root@nginx inotify-tools-3.14]# make install  
    
  • rsync複製スクリプトを作成する
  • この機能は主にserver端のディレクトリ/tmp/testの内容を修正したら(ファイルを追加、修正、削除)inotifyで監視して、rsyncでリアルタイムにclientの/tmpに同期します。このように、clientの/tmpにも同じ/tmp/testディレクトリがあります。ここでhostはclientのipであり、srcはserver端末がリアルタイムで監視するディレクトリであり、desは認証のモジュール名であり、clientと一致する必要がある(desはクライアントのディレクトリではなく、クライアントのディレクトリはクライアントのプロファイルの「web」モジュールで指定されます)。
    #!/bin/bash  
    host=10.10.10.10
    src=/tmp/test         
    des=web 
    user=root 
    /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
    | while read file
    do 
        /usr/local/rsync/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd $src $user@$host::$des 0/dev/null 2>&1 
        echo "${file} was rsynced" >>/root/rsync.log 2>&1  
    done
    
    rsync.logsをtmp(バックアップされたディレクトリ)に入れたり、コピーされている問題を送信したりする場合は、ここのようなrsyncのログを他のディレクトリに置いてください。例えば、ここの/root/rsync.logsはこのスクリプトをrsync.shと名付けて、監視ディレクトリに入れます。
    [root@nginx tmp]# chmod 764 rsync.sh 
    [root@nginx tmp]# sh /tmp/rsync.sh & 
    
  • 私たちはまた、rsync.shスクリプトを起動項目に追加できます。
  • [root@nginx tmp]# echo "/tmp/rsync.sh" >> /etc/rc.local
    
    しかし、ここでは私たちがキティを脱退したため、このバックグラウンドのタスクが中断されるかもしれません。ここの方法を採用してもいいです。https://www.ibm.com/developerworks/cn/linux/l-cn-nohup/
    [root@nginx tmp]# (/tmp/rsync.sh >/dev/null 2>&1 &)
    
    このバックステージのPPIDは1です。crondと同じです。
    [root@nginx tmp]# ps -ef |grep crond
    root      38533      1  0 Dec04 ?        00:00:01 crond
    [root@nginx tmp]# ps -ef |grep rsync
    root      45117      1  0 18:07 pts/1    00:00:00 /bin/bash /tmp/rsync.sh
    root      45119  45117  0 18:07 pts/1    00:00:00 /bin/bash /tmp/rsync.sh
    
    バックアップサーバclient端のrsyncをインストールしてrsyncを起動してから、rsync.shスクリプトを起動してください。そうでないとフルスクリーンで出現することがあります。
    rsync: failed to connect to 192.168.10.221: Connection refused (111)  
    rsync error: error in socket IO (code 10) at clientserver.c(107) [sender=2.6.8]  
    
    バックアップサーバ(client)
  • rsync(バックアップサーバはrsyncのみインストール)
  • をインストールします。
    [root@nginx-backup ~]# cd /usr/src/  
    [root@nginx-backup src]# ll  
    total 16  
    drwxr-xr-x 2 root root 4096 Jan 26  2010 debug  
    drwxr-xr-x 2 root root 4096 Jan 26  2010 kernels  
    [root@nginx-backup src]# wget  http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz  
    [root@nginx-backup src]# tar zxvf rsync-3.0.9.tar.gz  
    [root@nginx-backup src]# cd rsync-3.0.9  
    [root@nginx-backup rsync-3.0.9]# ./configure --prefix=/usr/local/rsync  
    [root@nginx-backup rsync-3.0.9]# make  
    [root@nginx-backup rsync-3.0.9]# make install  
    
  • ユーザとパスワード認証ファイル
  • を作成する。
    [root@nginx-backup rsync-3.0.9]# echo "root:rsync-pwd" > /usr/local/rsync/rsync.passwd 
    [root@nginx-backup rsync]# chmod 600 rsync.passwd 
    
    serverで作成したパスワードファイルはパスワードだけで、ユーザ名がないことを覚えてください。バックアップサービス端末clientで作成したパスワードファイルは、ユーザー名とパスワードがあります。(ユーザー名はウェブモジュールと一致しています。パスワードはサーバー側のスクリプトのパスワードと一致します。)
  • rsyncプロファイルを作成する
  • uid = root 
    gid = root 
    use chroot = no 
    max connections = 10 
    strict modes = yes 
    pid file = /var/run/rsyncd.pid  
    lock file = /var/run/rsync.lock  
    log file = /var/log/rsyncd.log  
    [web]  
    path = /tmp/  
    comment = web file  
    ignore errors  
    read only = no 
    write only = no 
    hosts allow = 10.10.10.10 
    hosts deny = *  
    list = false 
    uid = root 
    gid = root 
    auth users = root 
    secrets file = /usr/local/rsync/rsync.passwd
    
    ここのpath=/tmp/はカタログです。サーバーのファイルはクライアントのこのディレクトリにバックアップされます。hosts allow=10.10.10.10、ここのhosts allowはサーバーのIPアドレスです。auth users=root、ここのrootは前のステップecho「root:rsync-pwd」です。[web]はserverサーバー内の認証モジュール名で、メインサーバとの一致が必要です。以上の配置は私の自分のサーバー内の配置です。参考にしてください。配置ファイルをrsync.co.nfと命名して、/usr/local/rsync/カタログに入れます。
  • スタートrsync
  • [root@nginx-backup rsync]# /usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf 
    
    もし次の問題が発生したら:
    /usr/local/rsync/bin/rsync: error while loading shared libraries: libiconv.so.2: cannot open shared object file:
    No such file or directory, 
    
    ダイナミック関数ライブラリがメモリに読み込まれていないため、以下の方法で解決できます。
    [root@nginx-backup rsync]# whereis libiconv.so.2  
    libiconv.so: /usr/local/lib/libiconv.so.2 /usr/local/lib/libiconv.so  
    
    必要なモジュールのディレクトリを見つけて、このディレクトリを/etc/ld.so.com nfに追加して、ライブラリファイルを更新します。
    [root@nginx-backup rsync]# echo "/usr/local/lib/" >> /etc/ld.so.conf  
     [root@nginx-backup rsync]# ldconfig  
    
  • 、私たちはrsyncスクリプトを起動項目に加えることができます。
  • [root@nginx-backup rsync]# echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf" >> /etc/rc.local 
    
  • BTW:rsync+inotifyというバックアップ方法の時、一つの問題が発生しました。それは主サービスがバックアップサービスに同期してデータを完成したということです。しかし、メインサーバのディスクが満杯になりました。バックアップ済みのファイルを削除する必要がありますが、バックアップサーバにメインサーバのファイルを保存します。つまり、メインサーバからファイルを削除する時です。バックアップサーバーの中でファイルを削除しないで、私は多くの英語の文書を調べて、何度もテストしました。最後に解決方法を見つけました。それは主サーバの中で、rsync.shというシナリオの中で9行目のdeleteパラメータをなくして、この問題を解決できます。