2台のEC2間をリアルタイムで同期させてみる

AWS, EC2

はじめに

はじめまして。
システム開発推進部第1Gの望月です。
普段は主にフロントエンド領域の開発を行っているのですが、最近AWSでサーバー構築をする機会があり、その過程でEC2間のリアルタイム同期処理について色々と試していました。
現在進行形で勉強しつつではありますが、同期処理こんな感じでもできた、というのを自分用の振り返りも兼ねてまとめてみたいと思います。

作業環境として、OSはAmazon Linux 2になります。

使用するツール

rsync

  • Remote Sync
  • ファイルやディレクトリを同期するためのツール

lsyncd

  • Live Syncing Daemon
  • ローカルファイルシステムの変更を監視し、変更が検出されると指定されたターゲットにファイルを同期するデーモン

※rsyncとlsyncdの関係性

  • lsyncdは常にファイルの変更を監視しており、変更が検出されるとrsyncを使用して同期処理を実行します

xinetd

  • クライアントからの接続要求を受け付けて、必要な時に必要なものを起動するためシステムリソースを節約できる
  • 今回の場合、同期先にてrsync要求を受け付け、そのタイミングで同期処理を実行することができます

パッケージのインストール

Master側での作業

rsyncのインストール

Amazon Linux 2にはデフォルトでrsyncがインストールされているため、インストールされていることを確認します。

lsyncdのインストール

lsyncdをインストールするため、epelリポジトリをインストールします。

lsyncdをインストールします。

Slave側での作業

rsyncのインストール

Master側同様に、rsyncのインストール確認を行います。

xinetdのインストール

Masterからのrsync要求を受け付けるために、xintedをインストールします。

SSH公開鍵の設置

EC2間はSSHで通信するため、公開鍵の設置を行います。

Master側での作業

ルートユーザーの公開鍵があることを確認し、中身をコピーします。

Slave側での作業

先ほどコピーしたMaster側のSSH公開鍵をSlave側に設置し、保存します。

設定ファイルの変更

Master側での作業

lsyncd.confの設定ファイルを変更します。

変更内容は以下になります。

Slave側での作業

xinetdの設定を変更します。

変更内容は以下になります。

rsyncの設定を変更します。

以下を追記します。

再起動する

Slave側での作業

xinetdを再起動します。

Master側での作業

lsyncdを起動します。

実行

Master側にて、以下コマンドで実行します。

以上で、Master側の指定したディレクトリ配下に更新があった時、自動でSlave側も更新されるようになりました。

まとめ

なんとか2台のEC2をリアルタイムで同期処理させることができました。
今回はリアルタイム同期を目指して、rsyncでの同期処理にlsyncdを使用してみたのですが、cronを使って定期的に処理を実行させる方法もあるようです。
そちらはまだ試せていないのですが、このあたりは今後調べて検討したい、というところで今回は終わりとさせていただきます。
最後までお読みいただきありがとうございます。

参考にしたもの

rsyncd の設定
lsync、rsyncでのディレクトリ同期 for WordPress
同期設定(rsync)を今一度整理してみました

AWS, EC2