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

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

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

はじめに

Amazon Web Services(以降、AWS)において、Amazon Elastic File System(以降、Amazon EFS)を利用したHAクラスターの構築を試してみました。Amazon EFSとは、LinuxのAmazon EC2インスタンス(以降、EC2インスタンス)で使用できるファイルストレージです 。
今回は、Amazon EFSをサーバー間の共有ストレージ(データ引き継ぎ場所)として利用したHAクラスターを構築します。

本記事は、以前公開したpopupAmazon EFSを利用したHAクラスターの記事を、CLUSTERPRO X 5.0に合わせて更新した記事です。
CLUSTERPRO X 5.0では、NASのマウント/アンマウントを制御するためのNASリソースが削除されており、設定方法、設定項目に更新がありますので合わせてご紹介します。
NASは複数サーバーから同時にアクセスした場合でも、NAS自身で排他制御をすることができ、基本的には同時アクセスによるデータの破損が発生しません。そのためCLUSTERPROでは、NASを使用する際はCLUSTERPROでマウント/アンマウントを制御せずに、常時マウント状態にする構成が基本構成となりました。
CLUSTERPRO X 4.3以前でNASリソースによるAmazon EFSのマウント/アンマウントを制御するクラスターを構築する場合は、popup以前の記事を参照ください。

  • 2023年9月22日追記
    ディスクモニタリソースの監視先をマウントポイント直下に作成したディレクトリ配下に修正、および、サーバー毎に異なるパスを監視するように修正しました。

この記事の内容

1. Amazon Elastic File Systemとは

Amazon EFSはLinuxのEC2インスタンスで使用できるファイルストレージで、複数のサーバー間でストレージを共有する必要がある際に利用することができます。
Amazon EFSは必要に応じてストレージ容量を自動伸縮するため、あらかじめ容量を確保しておく必要がありません。また、Amazon EFSはそれ自体が複数のアベイラビリティゾーン(以降、AZ)から利用可能かつ冗長性を持っており、EC2インスタンスで構築したNFSサーバーを利用する場合と比較しても管理が容易です。

本ブログではAWS上のHAクラスターでデータを共有する方法として、Amazon EBSのマルチアタッチ機能(シングルAZでの構成のみ)を利用する方法を紹介していますが、今回紹介するAmazon EFSと組み合わせた方法は、マルチAZでの共有ストレージ構成を実現できるため、AWS上でのHAクラスター構成の幅が広がります。

  • Amazon EFSの動作対象OSはLinuxのみで、Windowsは含まれていません。

2. HAクラスター構成

今回はVIP制御によるHAクラスターを構築し、HAクラスター対象のアプリケーションにはpopupMinIOを使用します。
Amazon EFSはクラスターを構成するserver1とserver2に常時マウントしている状態にします。

HAクラスターの構成

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

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

3.1.1 VPCの設定

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

  • VPC(VPC ID:vpc-1234abcd)
  • CIDR:10.0.0.0/16
  • Subnets
  • Subnet-A1 (サブネットID:sub-1111aaaa):10.0.10.0/24
  • Subnet-A2 (サブネットID:sub-2222aaaa):10.0.110.0/24
  • Subnet-C1 (サブネットID:sub-1111cccc):10.0.20.0/24
  • Subnet-C2 (サブネットID:sub-2222cccc):10.0.120.0/24

  • RouteTables
  • Main (ルートテーブルID:rtb-00000001)
  • 10.0.0.0/16   → local
  • 0.0.0.0/0     → igw-1234abcd (Internet Gateway)
  • 172.16.0.1/32 → eni-1234abcd (server1のENI ID)
  • Route-A (ルートテーブルID:rtb-0000000a)
  • 10.0.0.0/16   → local
  • 0.0.0.0/0     → nat-1234abcd (NAT gateway 1)
  • 172.16.0.1/32 → eni-1234abcd (server1のENI ID)
  • Route-C (ルートテーブルID:rtb-0000000c)
  • 10.0.0.0/16   → local
  • 0.0.0.0/0     → nat-5678efgh (NAT gateway 2)
  • 172.16.0.1/32 → eni-1234abcd (server1のENI ID)

VPC

3.1.2 Amazon EFSの設定

Amazon EFSを作成します。Amazon EFSの作成とEC2インスタンスへのマウント手順は、popupAmazon Elastic File System の開始を参照ください。
作成したAmazon EFSのDNS名はEC2インスタンスへのマウント時に使用しますので、控えておきます。Amazon EFSのセキュリティグループは、HAクラスターを構築するサーバーからのみアクセスできるように設定をします。

また、Amazon EFSをEC2インスタンスにマウントして使用する際は、Amazon EFSマウントヘルパーの使用が推奨されています。Amazon EFSマウントヘルパーを使用することで、Amazon EFS推奨のマウントオプションが使用され、マウントが簡素化されます。Amazon EFSマウントヘルパーの利用方法については以下を参照ください。

Amazon EFSマウントヘルパーを使用しない場合は、以下を参照ください。

3.1.3 Amazon EFSの自動マウント設定

HAクラスターを構成するサーバーが起動時にAmazon EFSを自動でマウントするように、設定を「/etc/fstab」に追記します。今回はEFSマウントヘルパーを使用するために、ファイルシステムに「efs」を指定してマウントします。
下記をHAクラスターを構成する各サーバーで実施してください。

マウントポイント(例. /mnt/efs)を作成します。

# mkdir /mnt/efs

「/etc/fstab」に、Amazon EFS(例. fs-xxxxxxxx)をマウントポイント(例. /mnt/efs)に自動マウントする設定を追記します。

fs-xxxxxxxx:/ /mnt/efs efs _netdev,tls 0 0

詳細なマウント方法については、以下を参照ください。

正常にマウントできたことを確認後、後の「3.2.2 モニタリソースの登録」で追加するディスクモニタリソースの監視対象ファイル用のディレクトリ(例. /mnt/efs/monitor)を作成します。

# mkdir /mnt/efs/monitor

3.1.4 サービスの依存関係の設定

「/etc/fstab」による自動マウントでは、Amazon EFSのマウントが完了していない場合でもCLUSTERPROのサービスが起動することがあります。 その場合、参照するAmazon EFSがマウントされていない状態でアプリケーションの起動が行われ、起動に失敗する可能性があります。そのため、Amazon EFSがマウントされていることを確認してからCLUSTERPROのサービスを起動する必要があります。
下記をHAクラスターを構成する各サーバーで実施してください。

CLUSTERPROのサービスファイル(/usr/lib/systemd/system/clusterpro_evt.service)の依存関係に、Amazon EFSのマウントユニット(例. mnt-efs.mount)を追加します。

[Unit]
Description=CLUSTERPRO event
Requires=mnt-efs.mount
After=network-online.target remote-fs.target mnt-efs.mount


(以下、省略)

  • Amazon EFSのマウントに失敗した場合、CLUSTERPROのサービスは起動しません。

  • マウントポイントに「/mnt/efs」を指定した場合のマウントユニットのファイル名は「mnt-efs.mount」となります。
    マウントユニットの命名ルールについては以下が参考となります。

3.1.5 MinIOの設定

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

# /work/minio server /mnt/efs --console-address :9090

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

# pgrep minio | xargs kill

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

今回の検証では、CLUSTERPRO X 5.0(内部Ver. Linux:5.0.2-1)を利用しています。
前述の通り、CLUSTERPRO X 5.0ではNASリソースが削除されたため、NASを使用する際にCLUSTERPROによるマウント/アンマウントの制御を行わずに、常時マウント状態にする構成をご紹介します。

CLUSTERPROの構成は以下の通りです。

  • CLUSTERPRO
  • フェールオーバーグループ(failover)
  • AWS仮想IPリソース(awsvip)
  • IPアドレス:172.16.0.1
  • EXECリソース(exec_minio)
  • ・開始スクリプト:MinIOを起動するスクリプトを記載
  • ・終了スクリプト:MinIOを停止するスクリプトを記載
  • 調整→パラメータ→開始スクリプト:非同期
  • モニタ
  • ディスクモニタリソース
  • 監視タイミング:常時
  • サーバー個別設定
  • server1
  • - 監視方法:WRITE(FILE)
  • - 監視先:/mnt/efs/monitor/server1.txt
  • - I/Oサイズ:1バイト
  • server2
  • - 監視方法:WRITE(FILE)
  • - 監視先:/mnt/efs/monitor/server2.txt
  • - I/Oサイズ:1バイト
  • PIDモニタリソース
  • 監視タイミング:活性時
  • 対象リソース:exec_minio

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

フェールオーバーグループには「AWS仮想IPリソース」と「EXECリソース」を登録します。
AWS仮想IPリソースは、ルートテーブルの書き換えにより接続先の切り替えを実現します。仮想IPアドレスには「172.16.0.1」を設定します。詳細な設定手順については、以下を参照ください。

【参考】
  • Linux > クラウド > Amazon Web Services
    > CLUSTERPRO X 5.0 向け HAクラスタ 構築ガイド

EXECリソースは、HAクラスター対象のアプリケーションの起動と停止を制御するリソースです。スクリプトによって、起動と停止を実行します。EXECリソース(例. exec_minio)の開始スクリプト(start.sh)と終了スクリプト(stop.sh)に、それぞれMinIOを起動/停止するスクリプトを記載します。

開始スクリプト (start.sh)

/work/minio server /mnt/efs --console-address :9090

終了スクリプト (stop.sh)

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

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

exec_minioの調整プロパティ

3.2.2 モニタリソースの登録

モニタリソースには、「ディスクモニタリソース」と「PIDモニタリソース」を登録します。

ディスクモニタリソースにより、Amazon EFSにアクセスできるか否かを監視します。
Amazon EFSを常時マウントする構成にするため、監視タイミングには「常時」を選択します。

監視方法は「WRITE(FILE)」を選択します。常時監視の場合は、監視先を共有ストレージ上の同じファイルに設定すると、同時アクセスにより監視処理が競合して異常を検出する可能性があります。そのため、監視先は各サーバー毎に任意のファイル(例. /mnt/efs/monitor/server1.txt と /mnt/efs/monitor/server2.txt)を指定します。I/Oサイズには「1バイト」を設定します。

次に、PIDモニタリソースにより、MinIOのサービスを監視します。対象リソースにはMinIOの制御を行うEXECリソース(例. exec_minio)を指定します。

4. 動作確認

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

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

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

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

フェールオーバーグループがserver2で起動したことを確認した後、仮想IPアドレス(172.16.0.1)を使用して、再度MinIOに接続します。手動フェールオーバー前に作成したテキストファイルが参照できれば成功です。

まとめ

今回は、CLUSTERPRO X 5.0でAmazon EFSを使用したHAクラスターの構築を試してみました。
CLUSTERPRO X 5.0ではNASリソースが削除されましたが、CLUSTERPROからAmazon EFSのマウント/アンマウントを制御しなくても、問題なく動作することが確認できました。
CLUSTERPRO X 5.0でNASを使用したクラスターを組む際は、本手順を参考にHAクラスターを構築してください。

本記事の構成をご検討の際は、CLUSTERPROのpopup試用版を用いて検証した後、ご提案・構築ください。

お問い合わせ

本記事に関するお問い合わせは、popupお問い合わせ窓口までお問い合わせください。
  • 本記事で紹介しているスクリプトの内容についてのお問い合わせ、および、お客様環境に合わせたカスタマイズにつきましてはCLUSTERPRO導入支援サービスにて承っておりますので、上記窓口の"ご購入前のお問い合わせ"フォームまでお問い合わせください。