2015年6月4日木曜日

EC2のELB配下でサーバ台数不定のときにrsyncをする的なお話

  • このエントリーをはてなブックマークに追加

基本的にELB配下の場合にファイルを共有させるときは、
インスタンスをコピーしてELBにつけてあげるっていうやり方が簡単だったりする。

けど他の人と協力するとか、サーバーを複数用意している場合だと外したり付けたりとか面倒だったり。

ってことでだったら一つマスターサーバーを用意して、
そこを定期的に取りにいくって感じにすると楽になるのではないかと。
オートスケーリングをする際にファイルがちょっと古いAMIからでもrsyncで新しいファイルになるわけだし。

ということで今日はrsyncの設定のお話でも。

とりあえずやりたいこととしては上記のような感じ。
devはとりあえずテスト環境。
stgにファイルを入れるとwww配下のインスタンスたちがcronでファイルを同期する。
ってな感じ。
stgのファイルを同期するって感じで。

■同期元サーバー(devやstgが入ってるサーバー)
・xinetdとrsyncをダウンロード

# yum install xinetd rsync

・xientdの設定ファイル
# vi /etc/xinetd.d/rsync
service rsync
{
  disable = no
  flags = IPv6
  socket_type = stream
  wait = no
  user = root
  server = /usr/bin/rsync
  server_args = --daemon
  log_on_failure  += USERID
}

・rsyncの設定ファイルの作成
# vi /etc/rsyncd.conf
uid = root
gid = root
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = * //※1
hosts deny = *
dont compress = *.gz *.tgz *.zip *.pdf *.sit *.sitx *.lzh *.bz2 *.jpg *.gif *.png


#--------------
# Module options
#--------------
[stg]
  comment = rsync server
  path = /var/www/html-stg
  use chroot = true
  auth users = rsync_user //※2
  secrets file = /etc/rsyncd.secrets
  read only = false
  exclude = *.mp
  include = *.mp30
※1:同期先サーバーを限定したい場合はIPをここに記述
※2:unixとかOSのユーザーとは関係ないので、わざわざuseraddする必要無し。適当なユーザー名を入力。

・ユーザー名とパスワードを記述した認証ファイルを作成(※2の)
# vi /etc/rsyncd.secrets
rsync_user:abcdefg //※3

# chmod 600 /etc/rsyncd.secrets
※3:パスワードは.htpasswdと違い平文で打つ

・xinetdの起動
# chkconfig xinetd on
# service xinetd start

■同期先サーバー(www配下のサーバー)
・rsyncのインストール
# yum install rsync

・同期元サーバーに接続するためのパスワードの記述
# vi /etc/rsync.passwd
abcdefg //※4

# chmod 600 /etc/rsync.passwd
※4:※3で記述したユーザー:パスワードのパスワードだけ記述

・cronでstgのファイルを取得するようにする
# crontab -e
*/10 * * * * rsync -avz --delete --no-o --no-g --password-file=/etc/rsync.passwd rsync://rsync_user@xxx.xxx.xxx.xxx/stg /var/www/html
これで同期元サーバーの/var/www/html-stgファイルを10分毎に自分の/var/www/htmlにコピーするという感じになる。
--deleteオプションをつけてるので、消されたファイルもちゃんと同じように消されるという。

なおcrontabを設定したユーザーというか、rsyncを実行したユーザーでファイルの所有者を設定するようにしている。
ちなみに-aオプションは-r -l -p -t -g -o -Dオプションを全てっていう意味。
なので所有者情報とかグループ情報を同期元サーバーと一致させたくない場合は、--no-oと--no-gを指定してあげるといい。

ってな感じで設定してあげると同期元からどのサーバーにファイルを送るとか考えなくてよいし、
virtualhostとか最低限の設定をして、rsyncを設定したサーバー(AMI)をオートスケーリング対象にするだけで、
何も気にせず簡単にELB配下のサーバーに対して全て同じファイルをアップする事が出来るというなんとも便利な感じ。

Adsense