Lsyncdを入れてみた作業メモ。環境はCentOS 6系で、Lsyncdのバージョンは2.1.4。
Lsyncdは、Linux Kernelに組みこまれているinotifyを使って、指定したディレクトリ配下で変更が加えられた場合に、ほぼリアルタイムにrsyncで(遠隔のサーバなどに)同期をかけてくれるもの。
↓の例での同期対象は、keepalivedの一部の設定ファイルと、HAProxyの設定ファイル。
同期先の設定
rsyncは特にデーモンで動かす必要も無いのですが、諸事情でデーモンで動かすことにしました。
# yum -y install rsync xinetd
yumでインストール。
次に、"/etc/xinetd.d/rsync"を開いて、以下のように編集。
disable = no
次、"/etc/rsyncd.conf"を開いて、rsyncdの設定を以下のように入れてみた。
uid = root gid = root log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid [keepalived] path = /etc/keepalived hosts allow = peer read only = no [haproxy] path = /etc/haproxy hosts allow = peer read only = no
"hosts allow"の部分は、対向(同期元)のIPアドレスやホスト名を記載しましょう。
設定ファイルを編集したら、下記の通り、xinetdを起動します。
# /etc/init.d/xinetd start
あと、rsyncdは873番ポートを使うので、iptables等でフィルタをかけている場合は、同期元からの873ポートアクセスについては穴開けしておきましょう。
同期元の設定
LsyncdのCentOS向けのパッケージは、RepoForgeにあります。
既に上記用のyumリポジトリの設定を済ませている方は、普通に"yum install lsyncd"を。
そうでない方は、下記のようにrpmファイルをダウンロードしてインストールしちゃいましょう。
# wget http://pkgs.repoforge.org/lsyncd/lsyncd-2.1.4-1.el6.rf.x86_64.rpm # rpm -ivh lsyncd-2.1.4-1.el6.rf.x86_64.rpm
次、"/etc/lsyncd.conf"を以下のように編集します。
settings { logfile = "/var/log/lsyncd.log", statusFile = "/tmp/lsyncd.stat", statusInterval = 1, } sync { default.rsync, source="/etc/keepalived", target="peer::keepalived", exclude="keepalived.conf", } sync { default.rsync, source="/etc/haproxy", target="peer::haproxy", }
シンプルにこんな感じです。ちょっと事情があって、↑の例では、excludeを使って"keepalived.conf"ファイルだけは同期対象から外しています。
あとは、以下のようにlsyncdを起動すればOKです。
# /etc/init.d/lsyncd start
問題なく起動していれば、同期元の対象のディレクトリ配下で変更を加えてみてください。数秒後には同期先にも反映されていると思います。
ちょっとだけ↑のサンプルで作った構成の話
今回は、2台でHA構成を組んだHAProxyサーバの設定ファイル同期に使いました。
イメージとしては、keepalivedでアクティブ/スタンバイのHA構成を作り、アクティブなサーバに仮想IPアドレスが振られている感じ。
xinetd + rsyncdは、アクティブ/スタンバイの2台とも起動させたままにしておき、LsyncdやHAProxyはアクティブなサーバだけで起動しているようにしました。(keepalivedの"notify_master"や"notify_backup"で制御しています。)
keepalivedまわりやHAProxyまわりの設定は、仮想IPアドレス経由で(アクティブなサーバの方に)アクセスして書き換えれば、アクティブ/スタンバイの両サーバに設定が反映できるわけですね。
もちろん、こんな感じで使うと、両方のサーバに同じ設定を記述して問題なく動かす必要があるので、そこへの注意というか工夫は必要になりますが。
とりあえず、今は↑の作業をchef-soloのRecipeに落としている。
それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́