冗長化構成のAWS EC2における、lsync + rsync によるファイル同期

TL;DR

同期元

lsyncdインストール

yum --enablerepo epel install lsyncd

起動オプション設定

# /etc/sysconfig/lsyncd

LSYNCD_OPTIONS="-pidfile /var/run/lsyncd.pid /etc/lsyncd.conf"

認証用パスワード

# /etc/rsync.passwd

random_hoge_password

いずれ、「特定ファイルだけ除外してくれ」といった要望が発生するだろうから excludeFrom を最初から設定しておくとよい。

# /etc/lsyncd.conf

settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    pidfile = "/var/run/lsyncd.pid",
    statusFile = "/var/log/lsyncd/lsyncd.stat",
    nodaemon     = false,
    maxProcesses = 3,
    insist       = 1,
    statusInterval = 1
}

sync {
    default.rsync,
    source = "/var/www/vhosts/hoge_host/",
    target = "ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com::www",
    delay     = 5,
    excludeFrom = "/etc/rsync_exclude/www.lst",
    delete = true,
    rsync     = {
        archive = true,
        password_file = "/etc/rsync.passwd",
        compress = false
    }
}

lsyncdで上限ファイル数を超えた時の対処策。

# /etc/sysctl.conf

+ fs.inotify.max_user_watches = 105640

lsyncdを使う時はtimeoutを設定しましょう。

# /etc/lsyncd.conf

    sync {
        .
        .
        .
        rsync = {
            .
            .
            .
            compress = false,
            _extra = {
                "--timeout=600",
                "--contimeout=60"
            }
        }
    }

起動

chkconfig lsyncd on
service lsyncd start

同期先

もろもろインストール

yum -y install rsync xinetd

有効化

# /etc/xinetd.d/rsync

service rsync
{
        disable = no
        .
        .
        .

認証用パスワード (同期元と合わせる)

# /etc/rsync.secrets

root:random_hoge_password

設定
rootで動かさないとパーミッション周りで爆発すると思われる。

# /etc/rsyncd.conf

uid           = root
gid           = root
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
transfer logging = true

hosts deny    = *
hosts allow   = 172.16.0.0/20
secrets file = /etc/rsync.secrets

read only = false
dont compress = *.gz *.tgz *.zip *.pdf *.sit *.sitx *.lzh *.bz2 *.jpg *.gif *.png

[www]
path=/var/www/vhosts/hoge_host/
comment=www

起動

chkconfig xinetd on
service xinetd start

その他

  • その他、ログローテーションの設定を必ず行う
  • 詰まったらログを確認
  • 下記の対策もあると安心
    • ログ監視
    • フォールバックの仕組み

面倒くさいときは、cloudadvisor.jp へどうぞ