Lsyncdのインストールと設定+α

by slimmer_jimmer



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に落としている。
それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́