lsyncd + rsync を利用してデータの同期を取る方法!

概要

ZFS2 な NAS をストレージとして NFS や CIFS マウントして利用しており特に不満はないがパフォーマンスがあまり出ないので Web サーバについては 1 台マスターサーバとなるホストを決めて lsyncd を動かし、他の Web サーバについては rsync で受け取るというやり方を検証していみた。

手順

導入と設定はシンプルだ。1 台を更新することで他のサーバにも設定内容が波及する仕組み。本記事の例では、Lubuntu 16.04 利用した設定手順を記載しています。

rsync の設定

RSYNC_ENABLE が既定では false になっているので true にするだけです。


$ sudo vi /etc/default/rsync 
$ cat /etc/default/rsync
# defaults file for rsync daemon mode

# start rsync in daemon mode from init.d script?
#  only allowed values are "true", "false", and "inetd"
#  Use "inetd" if you want to start the rsyncd from inetd,
#  all this does is prevent the init.d script from printing a message
#  about not starting rsyncd (you still need to modify inetd's config yourself).
RSYNC_ENABLE=true

# which file should be used as the configuration file for rsync.
# This file is used instead of the default /etc/rsyncd.conf
# Warning: This option has no effect if the daemon is accessed
#          using a remote shell. When using a different file for
#          rsync you might want to symlink /etc/rsyncd.conf to
#          that file.
# RSYNC_CONFIG_FILE=

# what extra options to give rsync --daemon?
#  that excludes the --daemon; that's always done in the init.d script
#  Possibilities are:
#   --address=123.45.67.89              (bind to a specific IP address)
#   --port=8730                         (bind to specified port; default 873)
RSYNC_OPTS=''

# run rsyncd at a nice level?
#  the rsync daemon can impact performance due to much I/O and CPU usage,
#  so you may want to run it at a nicer priority than the default priority.
#  Allowed values are 0 - 19 inclusive; 10 is a reasonable value.
RSYNC_NICE=''

# run rsyncd with ionice?
#  "ionice" does for IO load what "nice" does for CPU load.
#  As rsync is often used for backups which aren't all that time-critical,
#  reducing the rsync IO priority will benefit the rest of the system.
#  See the manpage for ionice for allowed options.
#  -c3 is recommended, this will run rsync IO at "idle" priority. Uncomment
#  the next line to activate this.
# RSYNC_IONICE='-c3'

# Don't forget to create an appropriate config file,
# else the daemon will not start.

rsyncd.conf の作成

rsync で複数のホストを許可したい場合は hosts allow x.x.x.x y.y.y.y z.z.z.z のようにスペース区切りで指定できるが、今回は 1 台をひとまず更新用と決めて lsyncd をインストールする。


$ sudo vi /etc/rsyncd.conf
[blog.neoflow.jp]
path = /var/www/blog.neoflow.jp
hosts allow = 172.16.1.206
hosts deny = *
list = true
uid = www-data
gid = www-data
read only = false

$ sudo mkdir /var/www/blog.neoflow.jp
$ sudo chown www-data:www-data /var/www/blog.neoflow.jp/
$ ls -al /var/www/blog.neoflow.jp/
total 8
drwxr-xr-x 2 www-data www-data 4096 10月 22 12:28 .
drwxr-xr-x 4 root     root     4096 10月 22 12:28 ..
$ sudo /etc/init.d/rsync start
[ ok ] Starting rsync (via systemctl): rsync.service.

lsyncd の導入と設定

lua スクリプトを利用しているのでコピーする台数が多くても利用できる方法もある。書き方として、sync_blog_neoflow_jp = {} 中には target 設定を書かずにまとめると見やすくなる。ちなみにコメント行は — を利用する。


$ sudo apt-get -y install lsyncd
$ sudo vi /etc/lsyncd/lsyncd.conf.lua

sync_blog_neoflow_jp = {
    default.rsync,
--    source = '/mnt/neoflow.jp/blog/',
    source = '/tmp/test/',
    delete = true,
    rsync={
        archive = true,
        owner = true,
        compress = true,
        _extra = {
            "--timeout=600",
            "--contimeout=60",
        },
    },
}

sync { sync_blog_neoflow_jp, target = '172.16.1.201::blog.neoflow.jp' }
sync { sync_blog_neoflow_jp, target = '172.16.1.202::blog.neoflow.jp' }
sync { sync_blog_neoflow_jp, target = '172.16.1.203::blog.neoflow.jp' }
sync { sync_blog_neoflow_jp, target = '172.16.1.204::blog.neoflow.jp' }
sync { sync_blog_neoflow_jp, target = '172.16.1.205::blog.neoflow.jp' }

動作確認

syslog に以下のような出力が確認できれば正常。テストなので 1 秒で完了していますが、結構速い印象。


Oct 22 13:33:06 vm-nfj-206 lsyncd[30316]:  * Starting synchronization daemon lsyncd
Oct 22 13:33:06 vm-nfj-206 lsyncd[30316]:    ...done.
Oct 22 13:33:06 vm-nfj-206 systemd[1]: Started LSB: lsyncd daemon init script.
Oct 22 13:33:06 vm-nfj-206 lsyncd: Normal, recursive startup rsync: /tmp/test/ -> 172.16.1.201::blog.neoflow.jp/
Oct 22 13:33:06 vm-nfj-206 lsyncd: Normal, recursive startup rsync: /tmp/test/ -> 172.16.1.202::blog.neoflow.jp/
Oct 22 13:33:06 vm-nfj-206 lsyncd: Normal, recursive startup rsync: /tmp/test/ -> 172.16.1.203::blog.neoflow.jp/
Oct 22 13:33:06 vm-nfj-206 lsyncd: Normal, recursive startup rsync: /tmp/test/ -> 172.16.1.204::blog.neoflow.jp/
Oct 22 13:33:06 vm-nfj-206 lsyncd: Normal, recursive startup rsync: /tmp/test/ -> 172.16.1.205::blog.neoflow.jp/
Oct 22 13:33:06 vm-nfj-206 lsyncd: Normal, Startup of "/tmp/test/" finished.

参考

PRECS R&D Laboratory – lsyncdで複数サーバーをターゲットに同期する際のtips
Server World – Rsync : ファイル/ディレクトリの同期

スポンサーリンク

シェアする

フォローする

スポンサーリンク