LoginSignup
33
30

More than 5 years have passed since last update.

【AWS】rsyncでEC2インスタンスを同期

Last updated at Posted at 2015-07-25

バックエンド初心者なので毎回初歩的なことにハマります。今回は表題の覚書。

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ポートを追加

以下のような感じで。

Screen Shot 2015-07-26 at 12.00.29 AM.jpg


同期対処となるファイルのパーミッションを755

これは必要だったのかどうかちょっとわからないのですが、というか600が正しいのか??
600の方が正しい気がしますが、自分は755のままにしてます。

# sudo chmod -R 755 ファイル名


動作確認

同期元のサーバで以下のコマンドを実行。
# rsync -avz /var/www/html/ 同期先のPrivate IP::html

(コマンドオプションについてはこことかを参考)

試行錯誤した途上で結構いろいろやってしまっているので、はたしてこの手順が最速だったのかわかりませんが、
こんな感じでサーバの同期ができました。

33
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
30