バックエンド初心者なので毎回初歩的なことにハマります。今回は表題の覚書。
ELBを使って負荷分散した際、複数のEC2インスタンスの特定ディレクトリを同期したいことがあります。
rsyncを使うのが一般的なようなので、やってみました。
#参考サイト
同期設定(rsync)を今一度整理してみました
EC2で冗長化したWordPressをGithubでコード管理、rsyncで同期する
rsyncをパスワードなしで実施して、コンテンツの同期やバックアップをする方法
結論から言うと以下の2点でハマりました。
1. 「同期先」、「同期元」を勘違い。
2. rsyncで使われるポートTCP 873
をセキュリティグループに追加していなかった。
簡単な流れを以下にざっくりメモ。
① 同期元サーバ(マスタとなる方)にrsync, xinetdをインストール
② 同期先サーバ(スレーブとなる方)にrsyncをインストール
③ 該当するEC2インスタンスのセキュリティグループにTCP 873
ポートを追加
④ 同期対処となるファイルのパーミッションを755
に
#同期元サーバ(マスタとなる方)にrsyncをインストール まずはインストール ```# sudo su``` ```# yum install xinetd rsync```
インストールできたらxinetdの設定ファイルを編集
# 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
}
xinetdの自動起動をonにした後スタート
# chkconfig xinetd on
# service xinetd start
#同期先サーバ(スレーブとなる方)にrsyncをインストール まずはインストール ```# sudo su``` ```# yum install rsync```
rsyncの設定ファイルを新規作成
# vi /etc/rsyncd.conf
以下の通り記述
#--------------
# Global options
#--------------
uid = root
gid = root
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 10.0.0.0/16 ←VPCのIPアドレス
hosts deny = *
dont compress = *.gz *.tgz *.zip *.pdf *.sit *.sitx *.lzh *.bz2 *.jpg *.gif *.png
#--------------
# Module options
#--------------
[html]
comment = rsync server
path = /var/www/html
use chroot = true
auth users = admin ←ユーザを設定していないのでこれはいらなかったかも
secrets file = /etc/rsyncd.secrets ←ユーザを設定していないのでこれはいらなかったかも
read only = false
exclude = *.mp
include = *.mp30
デーモンモードで起動
# rsync --daemon --config=/etc/rsyncd.conf
#該当するEC2インスタンスのセキュリティグループに```TCP 873```ポートを追加 以下のような感じで。
#同期対処となるファイルのパーミッションを```755```に これは必要だったのかどうかちょっとわからないのですが、というか600が正しいのか?? 600の方が正しい気がしますが、自分は755のままにしてます。
# sudo chmod -R 755 ファイル名
#動作確認 同期元のサーバで以下のコマンドを実行。 ```# rsync -avz /var/www/html/ 同期先のPrivate IP::html```
(コマンドオプションについてはこことかを参考)
試行錯誤した途上で結構いろいろやってしまっているので、はたしてこの手順が最速だったのかわかりませんが、
こんな感じでサーバの同期ができました。