時折、どこかのノードで設定ファイルとか編集をしたら、自動的に同期して他のノードでも設定を変えて欲しい時がある。
台数が多ければAnsibleなどで設定ファイルを一括更新するが、2~3台でそこまでするのもなぁ…というときは、Lsyncdを使って自動的に同期させると良いだろう。
Lsyncdは、inotify(Linuxに用意されている、ファイルの変更を検知する仕組み)で、変更を検知したと同時にrsyncでファイルを同期するデーモンツールだ。
比較的簡単に設定ができ、ファイルの削除や新規追加、変更でも同期を自動的に行ってくれる。もちろん、中身はrsyncなのでssh経由でのリモート同期も可能だ。
ここでは、各サーバで「/opt/syncd」というディレクトリを、ssh経由での通信で自動同期させてみる。
なお、前にもこっちで書いてたようだが、今回のはssh経由での通信を行わせる(やったことあるの忘れてた)。
1.インストール
まずはインストールから。
以下のように、yumやapt-getでインストールできる。
●RHEL系(以下では、CentOS7を使用)
rpm -iUvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm yum install lsyncd rsync
●Debian/Ubuntu系
sudo apt-get install lsyncd
これで、インストールができた。
2.設定
まず、各サーバでsshの公開鍵認証によるログイン設定を行う。
自動同期を行う各サーバで、以下の処理を実行する。
ssh-keygen ssh-copy-id ユーザ@ホスト名(IPアドレス)
[root@BS-PUB-GALERA-01 ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 2b:51:e5:3b:6a:2f:37:30:29:54:ba:12:0c:f6:34:15 root@BS-PUB-GALERA-01.BLACKNON.LOCAL The key's randomart image is: +--[ RSA 2048]----+ | .E. . | | o o .o | | . = . o. . | | + o. . | | o..S.o | | . o.+o . | | ...+o | | o..o | | o.. | +-----------------+ [root@BS-PUB-GALERA-01 ~]# ssh-copy-id root@XXX.XXX.XXX.XXX /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@XXX.XXX.XXX.XXX's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@XXX.XXX.XXX.XXX'" and check to make sure that only the key(s) you wanted were added.
これで、sshの公開鍵認証でのログイン設定が完了した。
次に、lsyncdの設定ファイルを記述する。
「/usr/share/doc/lsyncd/lrsync.lua」もしくはこちらの情報を参考に、以下のように「/etc/lsyncd.conf」を作成する。
●/etc/lsyncd.conf
-- 基本設定 settings = { logfile = "/var/log/lsyncd.log", statusFile = "/var/run/lsyncd.stat", statusInterval = 1, } -- 各ノードごとの同期設定 sync{ default.rsyncssh, delay = 0, source="/opt/syncd", host="ユーザ名@ホスト名(IPアドレス)", targetdir="/opt/syncd", delete="running" }
上記のような設定ファイルを各ノードに設置し、lsyncdを起動する。
service lsyncd start
これで、「/opt/syncd」配下の中身が各ノードで全て同期されるようになった。
同期も、「delay=0」と指定しているので、3台程度であれば即座に反映される。設定ファイルの同期であれば、問題なく利用できるだろう。
