やりたいこと
AWSでWordPressのEC2サーバ2台の冗長構成を構築したとする。
同期元サーバでWordPressのuploadsフォルダの中身に変更があった際に、自動的に同期先サーバにコピー/削除/更新がされるようにしたい。
前提条件
- セキュリティグループにてサーバ間のSSH(22),rsync(873)の通信ができるようにされていること
- 同期先のsshd_configにて、同期元IPからのroot接続を許可しておくこと
/etc/ssh/sshd_config
#WordPress rsync
Match User root
AuthenticationMethods publickey
Match Address 同期する側のIP
PermitRootLogin yes
※上記設定後sshdサービスを再起動、同期元から同期先にrootでのssh鍵認証ができるようにしておくこと
同期元に必要なコマンドをインストール
$ sudo amazon-linux-extras install epel -y
$ sudo yum --enablerepo=epel install rsync lsyncd
同期元の/etc/lsyncd.confを編集
/etc/lsyncd.conf
settings{
logfile = "/var/log/lsyncd.log",
statusFile = "/tmp/lsyncd.stat",
insist = 1
}
sync{
default.rsync,
source = "/var/www/html/wp-content/uploads",
target = "root@同期される側のIP:/var/www/html/wp-content/uploads",
rsync = {
archive = true,
update = true,
rsh="/usr/bin/ssh -i/root/.ssh/id_rsa -o StrictHostKeyCheking=no"
}
}
同期元にてlsyncdサービスを起動
$ systemctl start lsyncd.service
$ systemctl status lsyncd.service
同期元にてログが動いており、ファイルがコピーされていれば成功
$ tail -f /var/log/lsyncd/lsyncd.log
#上記ログを開いたまま、もう一つのSSH接続を行い、テストでファイルを作成してみる。
$ touch /var/www/html/wp-content/uploads/test.txt
最後にlsyncdサービスが常時起動するように設定
$ systemctl enable lsyncd.service
以上