ひっさびさに同期の設定したら全然できなくてかなり参ったので、もう基本からやり直しみたいな感じでの備忘録です。なんだかんだでCentOS7にする人もいないし専用サーバーもCentOS6だし今回もCentOS6でやりました。
これ初心者がやろうとしたら意味わからないんじゃないかなと思いつつも、自分でも相当に忘れてしまっていたのでざっと基本的な流れをおさらいします。
特に説明も何もないとは思いつつも複数のWEBサーバー何かの同期を取る際には結局リアルタイムでミラーリングすることになります。ロードバランサーによる振り分けなどでWEBサーバーの冗長化を伴うとずべてのWEBサーバーの内容は全く同じでなければなりません。やり方としてはすべてのWEBサーバーにNASなんかをマウントしちゃって…というの1番楽だったりするのですが、予算的にそれも合わない(し、NAS入れるほどコンテンツがないよって話もあって)などなど、どうにかこうにかして同期をはかる際にはlsyncd+rsyncdということになります。
rsyncの差分同期はすでに非常に優秀で便利で爆速で誰でも使っているものになりますが、リアルタイムで同期することができないものなのです。cronで1分おきに叩くとかダサい感じになります。なので、
サーバー | 同期するディレクトリ | IPアドレス | ユーザー |
---|---|---|---|
マスター側: | /home/master/www | 192.168.1.2 | master |
スレイブ側: | /home/slave/www | 192.168.1.3 | slave |
# cat /etc/redhat-release CentOS release 6.6 (Final)
# uname -i x86_6464bitの場合はこれ。32bitの場合はi386みたいな感じで出てきます。
http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm ← インストール # rpm -qa | grep rpmforge ← RPMパッケージのバージョン確認rpmforge-release-0.5.3-1.el6.rf.x86_64がおちてきたっぽい。
# yum repolist rpmforge ← リポジトリの確認ここまでくればOK。
# rpm -ql rpmforge-release
[マスター側] # yum -y install lsyncd # yum -y install rsync
[スレイブ側] # yum -y install xinetd # yum -y install rsyncこれでインストールは完了。(rsyncはデフォルトですでにインストールされている筈です。が一応書いておきました。)
# mkdir -m 755 /etc/lsyncd # touch /etc/lsyncd/lsyncd.confというようなことをますはじめにやっておきます。それから以下のように設定しましょう。
# master server /etc/lsyncd/lsyncd.conf settings{ logfile = "/var/log/lsyncd.log", statusFile = "/tmp/lsyncd.stat", statusInterval = 1, } sync{ default.rsync, source="/home/master/www/", target="slave@192.168.1.3::sync", rsync = { archive = true, links = true, update = true, verbose = false } }ちょこっと解説しておくと、logとかstatusは適当に設定して、syncという項目の中で、同期元ディレクトリ(source)と同期先(target)を設定しておきます。同期先のtargetには::以降にsyncとありますが、ここは何でもいいです。というのもここはrsyncdのモジュール名ということでrsyncd側に設定する文字列と同じであればよいといった感じです。rsyncの中にはarchiveとlinksとupdateとverboseを設定しておけばだいたいいいんじゃないかといったところです。英語ですがオプションなんかをかなり詳しく解説してくれている人もおります。
sync{ source ..... target ..... excludeFrom = "/home/master/sync_exclude_list", ..... }sync_exclude_listファイルの中身なのですが、sourceで設定したパス以下のパスを書くことになるのでご注意です。(基本rsyncのexcludeファイルの書き方と同じですね。)
# vi /etc/sysconfig/lsyncd
23行目付近 #OPTIONS="-pidfile /var/run/lsyncd.pid /etc/lsyncd.conf" ↓ OPTIONS="-pidfile /var/run/lsyncd.pid /etc/lsyncd/lsyncd.conf" 32行目付近 [ -f /etc/lsyncd.conf ] || exit 6 ↓ [ -f /etc/lsyncd/lsyncd.conf ] || exit 6この段階で一応lsyncdは起動できるようになっています。
# chkconfig lsyncd on
# /etc/rc.d/init.d/lsyncd start
# vi /etc/xinetd.d/rsync
service rsync { disable = no flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID }で当然自動起動設定もしておいて、起動、というところです。(起動は後の方がいいか。本当は)
# chkconfig xinetd on # service xinetd start
# slave server uid = slave gid = slave read only = no log file = /home/slave/logs/rsyncd.log pid file = /home/slave/logs/rsyncd.pid port = 873 [sync] path = /home/slave/www/ hosts allow = localhost 192.168.1.2 read only = falseここまでできたら、だいたい完成です。xinetdを起動してrsyncdを動かせるようにしておきます。lsyncが差分検知してrsyncd(マスター側)が送信して、xinetdがそれを受けてrsyncd (