以前、DRBDによる双方向ミラーリングについて書きましたが、 そこまでの機能は欲していないという方が大多数ではないか?と思います。 本日は、「lsyncd+rsyncによる一方向ミラーリング」についてです。
こんにちは。猫ITソリューションズ広報の齊藤メイ(♀)です。 本日は、「lsyncd+rsyncによる一方向ミラーリング」についてです。今回はサーバー間でのミラーリングを例として挙げます。 構成は、
- サーバーsabineko:マスター
- サーバーabyssinian:スレーブ
以下サイトを参考にしました。 貴重な情報に感謝いたします。
リアルタイムミラーリングツール導入(lsyncd+rsyncd) - CentOSで自宅サーバー構築
lsyncdが勝手に止まってた - 日本の底からこんにちわ
lsyncd(+rsync)で複数サーバ間のファイルを自動で同期する - うまい棒blog
sabineko/abyssinianで実行
対象ディレクトリ作成
※用途はwwwサーバーのドキュメントルートのミラーリングです。
1 2 |
# mkdir /website # chown nobody:nobody /website |
abyssinianで実行
rsyncサーバー設定ファイル作成
1 2 3 4 5 6 7 8 |
# vi /etc/rsyncd.conf log file = /var/log/rsyncd.log uid = root gid = root [www] path = /website hosts allow = 10.0.0.0/24 read only = no |
サービスに組み込むためのサービススクリプトを作成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# vi /etc/rc.d/init.d/rsyncd #!/bin/sh # Rsyncd This shell script takes care of starting and stopping the rsync daemon # description: Rsync is an awesome replication tool. # # chkconfig: 345 87 87 # description: Rsync is an awesome replication tool. # Source function library. . /etc/rc.d/init.d/functions [ -f /usr/bin/rsync ] || exit 0 start() { action "Starting rsyncd: " /usr/bin/rsync --daemon --config=/etc/rsyncd.conf } stop() { action "Stopping rsyncd: " killall rsync } case "$1" in start) start ;; stop) stop ;; restart) stop sleep 1 start ;; *) echo "Usage: rsyncd {start|stop|restart}" exit 1 esac exit 0 |
rsyncd起動スクリプトへ実行権限付加
1 |
# chmod +x /etc/rc.d/init.d/rsyncd |
rsyncd起動
1 |
# /etc/rc.d/init.d/rsyncd start |
rsyncd起動スクリプトをchkconfigへ登録
1 |
# chkconfig --add rsyncd |
rsyncd自動起動設定
1 |
# chkconfig rsyncd on |
sabinekoで実行
lsyncdインストールに必要なパッケージをインストール
※ソースしかないので、RPMインストールと認識させるcheckinstallを使用する
1 2 |
# cd /usr/local/src # yum -y install libxml2-devel |
※最新版はダウンロードページ(http://asic-linux.com.mx/~izto/checkinstall/download.php)で確認しておく。
1 2 |
# wget http://asic-linux.com.mx/%7Eizto/checkinstall/files/rpm/checkinstall-1.6.1-1.i386.rpm # rpm -ivh checkinstall-1.6.1-1.i386.rpm |
lsyncdダウンロード
※最新版はダウンロードページ(http://code.google.com/p/lsyncd/downloads/list)で確認しておく。
1 2 3 4 5 |
# wget http://lsyncd.googlecode.com/files/lsyncd-1.26.tar.gz # tar zxvf lsyncd-1.26.tar.gz # cd lsyncd-1.26 # ./configure # make |
実行
※エラーは無視した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# checkinstall -R make install checkinstall 1.6.1, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran This software is released under the GNU GPL. The checkinstallrc file was not found at: /usr/local/lib/checkinstall/checkinstallrc Assuming default values. The package documentation directory ./doc-pak does not exist. Should I create a default set of package docs? [y]: y パッケージのドキュメンテーションを準備..OK このパッケージの説明を書いてください End your description with an empty line or EOF. >> lsyncd >> ************************************** **** RPM package creation selected *** ************************************** This package will be built according to these values: 1 - Summary: [ lsyncd ] 2 - Name: [ lsyncd ] 3 - Version: [ 1.26 ] 4 - Release: [ 1 ] 5 - License: [ GPL ] 6 - Group: [ Applications/System ] 7 - Architecture: [ x86_64 ] 8 - Source location: [ lsyncd-1.26 ] 9 - Alternate source location: [ ] 10 - Requires: [ ] 11 - Provides: [ lsyncd ] 変更するものの番号を入力してください。Enterで続行します: Installing with make install... ========================= Installation results =========================== ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. make[1]: ディレクトリ `/usr/local/src/lsyncd-1.26' に入ります test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin" ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. /usr/bin/install -c 'lsyncd' '/usr/local/bin/lsyncd' ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. test -z "/usr/local/share/man/man1" || /bin/mkdir -p "/usr/local/share/man/man1" ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. /usr/bin/install -c -m 644 './doc/lsyncd.1' '/usr/local/share/man/man1/lsyncd.1' ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. /usr/bin/install -c -m 644 './doc/lsyncd.conf.xml.5' '/usr/local/share/man/man1/lsyncd.conf.xml.1' ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored. make[1]: ディレクトリ `/usr/local/src/lsyncd-1.26' から出ます ======================== Installation successful ========================== Copying documentation directory... ./ ./ChangeLog ./NEWS ./AUTHORS ./README ./INSTALL ./COPYING ./doc/ ./doc/lsyncd.conf.xml.5 ./doc/manpage.lsyncd.xml ./doc/manpage.lsyncd.conf.xml ./doc/lsyncd.1 ./TODO cp: cannot stat `//var/tmp/RbeWoTqEJDZWaeRrgqXro/newfiles.tmp': そのようなファイルやディレクトリはありません tempディレクトリにファイルをコピー..OK ELFバイナリを除去..OK manページを圧縮..OK ファイルリストを作成..OK RPMパッケージを作成..OK NOTE: The package will not be installed tempファイルを削除..OK temp dirを削除..OK ********************************************************************** Done. The new package has been saved to /usr/src/redhat/RPMS/x86_64/lsyncd-1.26-1.x86_64.rpm You can install it in your system anytime using: rpm -i lsyncd-1.26-1.x86_64.rpm ********************************************************************** |
上記メッセージの指示通りにインストール
※何となく本当にあるのか検索してからインストールしています。心配性?
1 2 3 |
# updatedb # locate lsyncd /usr/src/redhat/RPMS/x86_64/lsyncd-1.26-1.x86_64.rpm |
RPMでインストール
1 |
# rpm -ivh /usr/src/redhat/RPMS/x86_64/lsyncd-1.26-1.x86_64.rpm |
lsyncdログローテーション設定ファイル作成
1 2 3 4 5 6 7 8 9 |
# vi /etc/logrotate.d/lsyncd /var/log/lsyncd { missingok notifempty sharedscripts postrotate /etc/rc.d/init.d/lsyncd restart 2>&1 > /dev/null || true endscript } |
lsyncd設定ファイル作成
optionではrsyncのオプションが使用可能。今回は以下のようになっています。rsyncオプション:
rsync
1 2 3 4 5 6 7 8 |
-r, --recursive ディレクトリで再帰的に実行する -l, --links ソフトリンクを維持する -p, --perms パーミッションを維持する -t, --times タイムスタンプを維持する -g, --group グループを維持する -o, --owner オーナーを維持する (root のみ) -D, --devices デバイスを維持する (root のみ) --delete 送信側にないファイルを削除 |
source path 及び target path には注意すること。「/」の有無などのちょっとした間違いで大幅に動作が変わる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# vi /etc/lsyncd.conf.xml <lsyncd version="1.25"> <settings> <stubborn/> <logfile filename="/var/log/lsyncd"/> <binary filename="/usr/bin/rsync"/> <callopts> <option text="-%rlptgoD"/> <option text="--delete" /> <exclude-file/> <source/> <destination/> </callopts> </settings> <directory> <source path="/website/"/> <target path="10.0.0.33::www"/> </directory> </lsyncd> |
実行権限を与える
1 |
# chmod +x /etc/lsyncd.conf.xml |
lsyncd起動スクリプト作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# vi /etc/rc.d/init.d/lsyncd #!/bin/bash ## lsyncd ## chkconfig: - 99 20 # description: lsyncd auto start script start() { /usr/local/bin/lsyncd --conf=/etc/lsyncd.conf.xml } stop() { /bin/kill -9 `/sbin/pidof lsyncd` until [ -z $(/sbin/pidof lsyncd) ]; do :; done } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) pid=`pidof lsyncd` if [ $? -eq 0 ]; then echo "lsyncd (pid $pid) is running..." else echo "lsyncd is not running" fi ;; *) echo "Usage: lsyncd {start|stop|restart|status}" exit 1 esac exit $? |
lsyncd起動スクリプトへ実行権限付加
1 |
# chmod +x /etc/rc.d/init.d/lsyncd |
lsyncd起動
1 |
# /etc/rc.d/init.d/lsyncd start |
lsyncd起動スクリプトをchkconfigへ登録
1 |
# chkconfig --add lsyncd |
lsyncd自動起動設定
1 |
# chkconfig lsyncd on |
lsyncdには制限があるので上限値を上げておく
1 2 |
# vi /etc/sysctl.conf fs.inotify.max_user_watches = 65536 |
反映
1 |
# sysctl -p |
確認
sabinekoで実行
テストファイル作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@sabineko website]# time dd if=/dev/zero of=64MB bs=1M count=64 64+0 records in 64+0 records out 67108864 bytes (67 MB) copied, 0.418791 seconds, 160 MB/s real 0m0.425s user 0m0.000s sys 0m0.160s [root@sabineko website]# ls -al 合計 65640 drwxr-xr-x 4 nobody nobody 4096 7月 9 22:36 . drwxr-xr-x 25 root root 4096 7月 9 12:23 .. -rw-r--r-- 1 root root 67108864 7月 9 22:36 64MB drwxr-xr-x 3 nobody nobody 4096 7月 9 21:53 test.waku2traffics.com drwxr-xr-x 3 nobody nobody 4096 7月 9 21:53 www.waku2traffics.com |
abyssinianで確認
1 2 3 4 5 6 7 |
[root@abyssinian website]# ls -al 合計 65640 drwxr-xr-x 4 nobody nobody 4096 7月 9 22:36 . drwxr-xr-x 25 root root 4096 7月 9 12:22 .. -rw-r--r-- 1 nobody nobody 67108864 7月 9 22:36 64MB ←出来ている drwxr-xr-x 3 nobody nobody 4096 7月 9 21:53 test.waku2traffics.com drwxr-xr-x 3 nobody nobody 4096 7月 9 21:53 www.waku2traffics.com |
運用に当たっては、ユーザー権限・パーミッションに注意しましょう。