rsync+lsyncでリアルタイムミラーリングを実現します。ロードバランサ配下のWebサーバ等において共有ディスクがない場合や、共通のコンテンツを複数のサーバに配信したい場合に有用です。
■ミラーリング先(rsync)
ミラーリング先のサーバにrsyncをインストールし設定を行います。/etc/rsyncd.confが設定ファイルとなりますがデフォルトでは存在しないので新規作成致します。
# yum install rsync # vi /etc/rsyncd.conf pid file = /tmp/rsyncd.pid log file = /var/log/rsync.log read only = no [sync] path=/tmp/sync comment=Sync Directory uid=root gid=root hosts allow=192.168.1.151 |
hosts allowに指定するIPは実環境に読み替えてください。接続ホストを制限する場合はこのパラメータで指定します。yumでインストールしたrsnycはxinet経由での起動になりますので設定ファイルを編集後、xinetを再起動します。
# vi /etc/xinetd.d/rsync disable = no # /etc/rc.d/init.d/xinetd restart |
ミラーリング先のサーバの設定は以上で完了です。
■ミラーリング元(lsync)
ミラーリング元のサーバにlsyncをインストールします。標準のyumでは提供されませんのでRPMforgeからインストールします。
# yum install lsyncd |
lsyncの設定ファイルを作成します。
# vi /etc/lsyncd.conf settings = { logfile = "/var/log/lsyncd.log", statusFile = "/var/log/lsyncd.stat", statusInterval = 1, } sync{ default.rsync, source = "/var/", target = "root@192.168.1.150::sync", rsyncOps = {"-auz", "--numeric-ids", "--delete", } } |
上記ではテスト的に/var配下のものをミラーリングしています。ここまで設定できればlsyncデーモンを起動します。複数のディレクトリを同期したい場合はsyncを複数起動することになります。
# /etc/rc.d/init.d/lsyncd start |
/var/log/lsyncd.logを見て問題なく起動しているか確認し、/var/配下にテスト的に何かファイルを作成してみてミラーされていれば成功です。
■特定のファイルのみミラーリング
lsyncはデフォルトでディレクトリ単位でミラーリングを行いますが、/etc/passwdなど特定のファイルのみミラーリングしたいこともあると思います。そこで除外リストを活用することにより特定のファイルのみミラーリングが可能です。
まず、lsyncd.confを次のように編集します。
# vi /etc/lsyncd.conf settings = { logfile = "/var/log/lsyncd.log", statusFile = "/var/log/lsyncd.stat", statusInterval = 1, } sync{ default.rsync, source = "/var/", target = "root@192.168.1.150::sync", rsyncOps = {"-auz", "--numeric-ids", "--delete", "--exclude-from=/etc/rsync_exclude.lst", } } |
/etc/rsync_exclude.lstを作成し編集します。
# vi /etc/rsync_exclude.lst + passwd + shadow- + group - * |
上記例では/etc/のpasswd / shadow / groupの3ファイルのみをミラーリングする設定となります。作成後は設定を有効にするためにlsyncを再起動します。
# /etc/rc.d/init.d/lsyncd restart |
■ミラーリングファイル数
同期するファイル数が多くなると同期できなくなりエラーが吐かれます。ファイル数を増やすにはinotifyのカーネルパラメータを増やします。デフォルトでは8192になっているのを下記では30000にしています。
# vi /etc/sysctl.conf fs.inotify.max_user_watches = 30000 # sysctl -p |
なお、inotify関連のカーネルパラメータは/proc以下のファイルに書かれています。大規模となってくるとこちらのパラメータもあわせて調整すると良いかもしれません。
# カーネルメモリの制限 /proc/sys/fs/inotify/max_queued_events 16384 # 1ユーザのインスタンス数の制限 /proc/sys/fs/inotify/max_user_instances 128 |