サイト内の現在位置を表示しています。

Amazon Elastic File Systemを利用したHAクラスターの構築を試してみました(Linux)

CLUSTERPRO オフィシャルブログ ~クラブロ~

  • 本記事のCLUSTERPRO X 5.0版を公開しています。
    CLUSTERPRO X 5.0版の記事はpopupこちら

はじめに

Amazon Web Services(以降、AWS)において、Amazon Elastic File Systemを利用したHAクラスターの構築を試してみました。Amazon Elastic File Systemとは、Amazon EC2インスタンス(以降、EC2インスタンス)で使用できるファイルストレージです 。

今回は、本サービスをサーバー間の共有ストレージ(データ引き継ぎ場所)として利用したHAクラスターを構築します。

  • 2023年9月22日追記
    ディスクモニタリソースの監視先をマウントポイント直下に作成したディレクトリ配下に修正しました。

この記事の内容

1. Amazon Elastic File Systemとは

Amazon Elastic File System(以降、Amazon EFS)はEC2インスタンスで使用できるファイルストレージで、複数のサーバー間でストレージを共有する必要がある際に利用することができます。また、必要に応じてストレージ容量を自動伸縮できます。

これまでAWS上のHAクラスターでデータを共有する方法として、CLUSTERPROのミラーリング機能を利用していました。今回Amazon EFSと組み合わせることで、共有ストレージに対応したHAクラスターも構築でき、AWS上でのHAクラスター構成の幅が広がります。

  • 2018年3月20日現在はアメリカや欧州のリージョンでサービス提供されていますが、東京リージョンではまだサービス提供されていません。本検証では、バージニアリージョンを利用しています。
  • Amazon EFSが東京リージョンで利用可能になりました。(2018/7/13時点)
  • Amazon EFSの動作対象OSはLinuxのみで、Windowsは含まれていません。

2. HAクラスター構成

今回はVIP制御によるHAクラスターを構築し、HAクラスター対象のアプリケーションにはpopupMinioを使用します。Amazon EFSは現用系サーバーから接続できるようにCLUSTERPROから制御します。

HAクラスターの構成

3. HAクラスターの構築手順

3.1 HAクラスター構築の事前準備

3.1.1 VPCの設定

事前にVPCを作成します。VPCの構成は以下の通りです。
なお、HAクラスターを構築するVPCの名前解決の設定は、無効から有効にしてください。設定が無効の場合、次に作成するAmazon EFSへの接続に失敗しますので注意してください。

  • VPC(VPC ID:vpc-1234abcd)
  • CIDR:10.0.0.0/16
  • Subnets

  • Subnet-1a (サブネットID:sub-1111aaaa):10.0.10.0/24
  • Subnet-2a (サブネットID:sub-2222aaaa):10.0.100.0/24
  • Subnet-1c (サブネットID:sub-1111cccc):10.0.20.0/24
  • Subnet-2c (サブネットID:sub-2222cccc):10.0.200.0/24
  •  

  • RouteTables

  • Main (ルートテーブルID:rtb-00000001)

  • >10.0.0.0/16 → local
  • >0.0.0.0/0 → igw-1234abcd (Internet Gateway)
  • >20.0.0.100/32 → eni-1234abcd (ENI ID)

  • Route-A (ルートテーブルID:rtb-0000000a)

  • >10.0.0.0/16 → local
  • >0.0.0.0/0 → eni-1234abcd(NAT1のENI ID)
  • >20.0.0.100/32 → eni-1234abcd (ENI ID)

  • Route-C (ルートテーブルID:rtb-0000000c)

  • >10.0.0.0/16 → local
  • >0.0.0.0/0 → eni-1234abcd(NAT2のENI ID)
  • >20.0.0.100/32 → eni-1234abcd (ENI ID)

VPC

3.1.2 Amazon EFSの設定

Amazon EFSを作成します。Amazon EFSの作成とEC2インスタンスへのマウント手順は、popupAmazon Elastic File System の開始方法を参照ください。
作成したAmazon EFSのDNS名はEC2インスタンスへのマウント時に使用しますので、控えておきます。

マウントポイント(例.efs)を作成します。HAクラスターを構成する各サーバーで作成してください。

# mkdir /mnt/efs

Amazon EFS上のファイルに対して不特定のサーバーから同時アクセスが発生した場合、ファイルが破損する恐れがあります。アクセス元を制限するため、HAクラスターを構築するサーバーからのみAmazon EFSへアクセスできるようセキュリティグループの設定をしてください。
HAクラスターを構成するサーバーのAmazon EFSに対するアクセスは、CLUSTERPROがAmazon EFSをマウント/アンマウントすることにより制御します。

【参考】

EFSを一度マウントし、後の「3.2.2 モニタリソースの登録」で追加するディスクモニタリソースの監視対象ファイル用のディレクトリ(例. /mnt/efs/monitor)を作成します。ディレクトリ作成後は、EFSをアンマウントします。

# mkdir /mnt/efs/monitor

3.1.3 Minioの設定

次に、HAクラスターを構成するサーバーにMinioをインストールします。インストール手順については、popupMinio Quickstart Guideを参照してください。Minioのインストール先は任意の場所を指定してください。今回はルートディレクトリの配下に作成した/workにインストールします。インストール後、各サーバーでMinioの動作確認をします。マウントしたAmazon EFSを参照するようにMinioのサービスを起動します。

# /work/minio server /mnt/efs

動作確認後、Minioのサービスを各サーバーで停止します。

# pgrep minio | xargs kill

3.2 VIP制御によるHAクラスターの構築

3.2.1 グループリソースの登録

CLUSTERPROのフェールオーバーグループには「AWS仮想IPリソース」「NASリソース」「execリソース」を登録します。

AWS仮想IPリソースは、ルートテーブルの書き換えにより接続先の切り替えを実現します。AWS仮想IPアドレスには「20.0.0.100」を設定します。 設定手順については、popupCLUSTERPRO X 3.3 Amazon Web Services 向け HAクラスタ構築ガイド(Linux 版)を参照ください。

NASリソースは、NFSサーバーのマウント/アンマウントを制御し、現用系サーバーのAmazon EFSへの接続を可能にします。グループリソースのタイプは「nas resource」を選択します。Amazon EFS作成時に控えておいたDNS名をサーバ名に入力し、共有名には「/」、マウントポイントには「/mnt/efs」を指定します。

「調整」ボタンを押して、「NAS」タブのPingタイムアウトを0秒に変更してください。

execリソースは、HAクラスター対象のMinioの起動と停止を制御するリソースです。スクリプトによって、起動と停止を実行します。起動スクリプト(start.sh)、停止スクリプト(stop.sh)にそれぞれMinioを起動/停止するスクリプトを記載します。

起動スクリプト

/work/minio server /mnt/efs

停止スクリプト

pgrep minio
if [ $? -eq 0 ];
then
     pgrep minio | xargs kill
     exit $?
else
     exit 0
fi

「調整」ボタンを押して、開始スクリプトを同期モードから非同期モードへ変更してください。

3.2.2 モニタリソースの登録

次にAmazon EFSにアクセスできるか否かを監視するリソースを登録します。モニタリソースのタイプは「disk monitor」を選択します。監視タイミングは「活性時」を選択し、対象リソースにはAmazon EFSの制御を行うNASリソースを指定します。

監視方法は「WRITE(FILE)」を選択します。監視先には任意のファイル(例. /mnt/efs/monitor/diskw.txt)を指定し、I/Oサイズには1バイトに設定します。

次にMinioのサービスを監視するリソースを登録します。モニタリソースのタイプは「pid monitor」を選択します。監視タイミングは「活性時」を選択し、対象リソースにはMinioの制御を行うexecリソースを指定します。

4. 動作確認

WebManagerより、フェールオーバーグループが正常に起動したことを確認します。

仮想IPアドレスを使用してMinioに接続し、バケット(例.test)を作成します。

テキストファイル(例.test.txt)をバケットにアップロードします。

フェールオーバーの動作確認のために、WebManagerから手動フェールオーバーを実行します。

仮想IPアドレスを使用して、再度Minioに接続します。手動フェールオーバー前に作成したテキストファイルが参照できれば成功です。

さいごに

今回はAmazon EFSを使用したHAクラスター構成について、ご紹介しました。HAクラスターを構成するサーバーの共有ストレージとしてAmazon EFSを使用できることを確認しました。

参考

AWS上でネットワークパーティション発生に伴う両系活性を防止する方法については、以下のリンクをご参照ください。

お問い合わせ

本記事に関するお問い合わせは、popupお問い合わせ窓口までお問い合わせください。