rsync+inotifyはサーバ間のファイルのリアルタイム同期を実現します。
7177 ワード
ここではこの記事を参照してください。http://blog.csdn.net/linuxlsq/article/details/51768731およびこの記事:http://blog.51cto.com/dl528888/771533 ありがとうございます
メインサーバ(server端)
メインサーバはrsyncとinotifyをインストールして、メインサーバはserverとして、バックアップサーバclientにファイルを転送します。 rsync をインストールします。パスワード認証ファイル を作成する。
セキュリティのためにも、以下のエラーを避けるためにも、パスワードファイルは600の権限が必要です。インストールinotify rsync複製スクリプトを作成する この機能は主にserver端のディレクトリ/tmp/testの内容を修正したら(ファイルを追加、修正、削除)inotifyで監視して、rsyncでリアルタイムにclientの/tmpに同期します。このように、clientの/tmpにも同じ/tmp/testディレクトリがあります。ここでhostはclientのipであり、srcはserver端末がリアルタイムで監視するディレクトリであり、desは認証のモジュール名であり、clientと一致する必要がある(desはクライアントのディレクトリではなく、クライアントのディレクトリはクライアントのプロファイルの「web」モジュールで指定されます)。私たちはまた、rsync.shスクリプトを起動項目に追加できます。 rsync(バックアップサーバはrsyncのみインストール) をインストールします。ユーザとパスワード認証ファイル を作成する。 rsyncプロファイルを作成する スタートrsync 、私たちはrsyncスクリプトを起動項目に加えることができます。 BTW:rsync+inotifyというバックアップ方法の時、一つの問題が発生しました。それは主サービスがバックアップサービスに同期してデータを完成したということです。しかし、メインサーバのディスクが満杯になりました。バックアップ済みのファイルを削除する必要がありますが、バックアップサーバにメインサーバのファイルを保存します。つまり、メインサーバからファイルを削除する時です。バックアップサーバーの中でファイルを削除しないで、私は多くの英語の文書を調べて、何度もテストしました。最後に解決方法を見つけました。それは主サーバの中で、rsync.shというシナリオの中で9行目のdeleteパラメータをなくして、この問題を解決できます。
メインサーバ(server端)
メインサーバはrsyncとinotifyをインストールして、メインサーバはserverとして、バックアップサーバclientにファイルを転送します。
[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
[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
#!/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 &
[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)[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で作成したパスワードファイルは、ユーザー名とパスワードがあります。(ユーザー名はウェブモジュールと一致しています。パスワードはサーバー側のスクリプトのパスワードと一致します。)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/カタログに入れます。[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
[root@nginx-backup rsync]# echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf" >> /etc/rc.local