lsyncdを使って2台のEC2間のファイルを双方向同期する

こんにちは、櫻井です。

 

今回はlsyncdを使って、2台のEC2間のファイルを双方向で同期させる方法について紹介します。

 

lsyncdを使うことで、ウェブアプリケーションの添付ファイルなど、EC2間で差異が生まれてほしくないものをリアルタイムに同期させることができます。

よって、EFSなどのNFS(ネットワークファイルシステム)を使わずに、ロードバランサーを利用したウェブアプリケーションの実装を低コストで実装することが可能になります。

 

また、lsyncdを使った双方向同期を行う際は注意点があります。本番利用を検討する際は、後述の「lsyncdを使った双方向同期の注意点」を確認の上でお願いします。

 

lsyncdとは

 

lsyncdとは、同期したい対象のディレクトリに対して、ファイルの「新規作成」「編集」「削除」が加えられた事を検出し、別ディレクトリや他のサーバのディレクトリに対して同期を行うことができるツールです。

 

同期はファイル単位で行われるため、データベースなどの複製用途には向きません。

 

 

lsyncdを使った双方向同期の注意点

 

lsyncdで双方向の同期をさせる際は注意点があり、設定を間違えるとデータの損失を招く可能性があります。

本番環境で利用する場合は細心の注意を払う必要がありますので、詳しくは以下のリンクを参照してください。

lsyncdで双方向同期するなら、delete=’running’ がいい

 

 

双方向同期の手順

 

双方向同期では、EC22台での作業が必要になります。

1台目の作業をEC2(A)の作業、2台目の作業をEC2(B)とし、以下に記述しています。

 

双方向同期をするためには、まずEC2(A)からEC2(B)に対して片方向の同期を行い、その後EC2(B)からEC2(A)に対して片方向の同期を行うことで実現することが出来ます。

 

EC2(A)の作業

 

まずはEC2(A)にログインし、EC2(A)からEC2(B)に対しての片方向の同期の準備を行います。

OSはAmazon Linux2を利用しており、サーバに対してsshを使い、”ec2-user”でログインをしているという前提で進めます。

ログインユーザが”ec2-user”でない場合、”ec2-user”を任意のユーザに読み替えてください。

 

 

同期したいディレクトリをテスト用に作成し、権限ユーザを”ec2-user”に変更する

 

mkdir のオプション -p(—parents) は、必要に応じて親ディレクトリも作成するというオプションです。

 

 

公開鍵を作成する

 

以下のコマンドを実行すると、対話形式で作成が行われます。こちらは、EC2(B)にファイルを同期させるために必要です。

 

 

 

lsyncdをインストールする

 

epelをインストールしていない方は先に以下のコマンドを実行してインストールしてください。

 

 

以下のコマンドを実行してlsyncdのインストールを行います。

 

 

lsyncd.confの設定をする

 

lsyncdを使って双方向同期をする場合は、予期せぬデータの損失を防ぐため、前述の「lsyncdを使った双方向同期の注意点」に記載の記事を読んでから設定することをおすすめします。

 

lsyncdの再起動・自動起動設定をする

 

lsyncd.confの編集を反映させるために再起動します。ついでに自動起動設定もしておきます。

 

EC2(A)で作成した公開鍵を控える

 

最初に作成した公開鍵をEC2(B)に配置する必要があるので、下記のコマンドを実行するとターミナルに出力される、”ssh-rsa”から始まる文字列を控えておいてください。

 

 

これで、一旦EC2(A)の作業は終了です。

 

 

EC2(B)の作業

 

ここからはEC2(B)での作業になります。

 

同期先のディレクトリを作成する

 

EC2(A)の lsyncd.conf でtarget に設定したディレクトリがない場合は作成し、権限ユーザを”ec2-user”に変更します

 

EC2(A)で控えた公開鍵の文字列を貼り付ける

 

先程控えたEC2(A)の公開鍵をEC2(B)の .ssh/authorized_keys に貼り付けてください。

 

以上でEC2(A)からEC2(B)に対する、片方向の同期は完了しました。

実際に同期されるかのテストをしてみます。

 

 

片方向の同期を確認する

 

テスト用のファイルを作成する

 

EC2(A)にログインし、以下のコマンドを実行して、テストのためのファイルを作成します。

 

同期を確認する

 

再度EC2(B)にログインし、/var/www/html/test に sync.txt が作成されていれば成功です。

 

これで、片方向の同期が確認できました。

 

双方向同期させる

 

上記の手順が完了している場合、EC2(A)からEC2(B)に対しての片方向の同期はできているので、次はEC2(B)からEC2(A)に対しての片方向の同期を行うことで双方向同期ができるようになります。

 

上記手順を参考に以下のように進めることで、EC2(B)からEC2(A)に対して片方向の同期を行うことが出来ます。

  1. EC2(B)にログインする
  2. 公開鍵を作成する
  3. lsyncdをインストールする
  4. lsyncd.confを設定する
  5. lsyncdの再起動・自動起動設定をする
  6. EC2(B)で作成した公開鍵を控える
  7. EC2(B)からログアウトし、EC2(A)にログインする
  8. EC2(A)で控えた公開鍵の文字列を貼り付ける

 

これでEC2(A)からEC2(B)に対しての片方向の同期と、EC2(B)からEC2(A)に対しての片方向同期も完了しました。

EC2(A)・  EC2(B)のどちらでファイルの「作成」「変更」「削除」を行ったとしても、対になるEC2に同期されていることが確認できると思います。

 

 

まとめ

 

今回は、lsyncdを使ったファイルの双方向同期について紹介しました。

本文中にも書いていますが、設定を間違えるとデータの損失を伴う可能性があります。lsyncdを本番環境で利用する際には、「lsyncdを使った双方向同期の注意点」に記載の記事を読み、特性を理解した上でご利用ください。

 

 

一緒に働く仲間を募集中!

 

ギークフィードではAWSエンジニアを募集しています。

 

興味がある方はこちらからエントリーをしてぜひ一緒に働きましょう!

AWS・開発エンジニア募集

この記事が気に入ったら
いいね ! しよう

Twitter で
The following two tabs change content below.
櫻井
櫻井
2022年3月にギークフィードに入社。 エンジニア完全未経験からSAP・SAAを三週間で取得することが出来ました。そのためAWSに関することを中心に記事を作成する予定です。 自分が初心者だからこそわかる、エンジニア未経験の方や、エンジニアを始めたばかりの方の躓きポイントをうまく説明できるように頑張ります。

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ