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

Oracle Cloud Infrastructureでファイル・ストレージを利用したHAクラスターの構築を試してみました(Linux)

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

はじめに

Oracle Cloud Infrastructure(以降、OCI)のファイル・ストレージを利用したHAクラスターの構築を試してみました。本記事ではCLUSTERPROからファイル・ストレージをNFS共有ファイルシステムとして利用する手順についてご紹介します。

この記事の内容

1. OCIのファイル・ストレージとは

OCIのファイル・ストレージは弾力的なエンタープライズグレードのストレージ・サービスであり、各ファイル・システムは最大8エクサバイトまで自動的にスケーリングされ、非同期レプリケーションやスナップショット、クローン機能も備えています。また、フルマネージドなため自前でボリュームを用意しNFSサーバーを構築するのに比べて管理が容易になっています。

ファイル・ストレージは、NFSクライアントがインストール済みのOCIのインスタンスからNFS共有としてマウントすることができます。複数のインスタンス間でファイル・ストレージをマウントしておくことで共有ファイルシステムとして利用でき、CLUSTERPROによるHAクラスターを構築することが可能なため、OCI上でのHAクラスター構成の幅が広がります。

2. HAクラスター構成

今回は、仮想クラウド・ネットワーク(以降、VCN)上に、以下に示すようなロードバランサーを使用した2ノードの共有ファイルシステム型のHAクラスターを構築します。

OCIのファイル・ストレージはHAクラスターを構成するserver1とserver2に常時マウントしている状態にします。HAクラスター対象のサービスは、このマウントポイント経由でファイル・ストレージに共有データを格納し、利用します。clientはCluster WebUIによる管理と動作確認で使用します。
なお、本記事ではHAクラスター対象のサービスは用意せず、サービス用ソフトウェアの代替として動作確認用の簡単なスクリプトを実行するようにしました。

本記事の構成図ではOSのアップデート容易化などのためにインターネット・ゲートウェイやNATゲートウェイを配置していますが、インターネット通信が不要である場合は各ゲートウェイを使用しない構成とすることも可能です。

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

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

OCIコンソールからVCNやインスタンス、ファイル・ストレージなどHAクラスターの構築に必要なリソースを作成し、CLUSTERPROやサービスなどをインストールする手順について説明します。

  • 本記事に掲載しているOCIコンソールの画面表示は記事執筆時点のものです。コンソールのUIや仕様は今後のアップデートで変更される可能性があるため、実際のコンソール画面や公式ドキュメントの最新情報も併せてご確認ください。

3.1.1 VCNの作成

VCNおよび、HAクラスター用インスタンスを作成します。

構成は以下の通りです。

■ VCN
• 名前: vcn-project
• IPv4 CIDRブロック
  – IPv4 CIDRブロック: 10.0.0.0/16
  – このVCNでDNSホスト名を使用: On
  – DNSラベル: vcnproject
  – DNSドメイン名: vcnproject.oraclevcn.com
• サブネット
  – subnet-public1: 10.0.0.0/24 (パブリック・サブネット)
  – subnet-private1: 10.0.1.0/24 (プライベート・サブネット)

■ インスタンス
• クライアント用インスタンス
  – client
    – サブネット: subnet-public1
    – プライベートIPアドレス: 10.0.0.10
• HAクラスター用インスタンス
  – server1
    – サブネット: subnet-private1
    – プライベートIPアドレス: 10.0.1.101
  – server2
    – サブネット: subnet-private1
    – プライベートIPアドレス: 10.0.1.102

3.1.2 ロードバランサーの作成

Oracle Cloud仮想IPリソースの利用に必要なロードバランサーをOCIコンソールから作成します。

OCIのロードバランサーは「ロード・バランサ」と「ネットワーク・ロード・バランサ」の2種類があります。Webサーバー、アプリケーションサーバー、DBサーバーなどHAクラスター化対象となるサービス用ソフトウェアにあわせてロードバランサーの種類や、リスナーおよびバックエンドのプロトコル、ポート番号などを決定します。
本記事ではIPとポート番号で振り分けるレイヤー4のロードバランサーで十分なため、「ネットワーク・ロード・バランサ」を使用します。

ネットワーク・ロード・バランサの作成時にIPアドレスが自動的に割り当てられるため、HAクラスターで動かすサービスのIPアドレスとして任意のアドレスを指定することができない点に注意します。

  • 1.
    OCIコンソールのメニューから「ネットワーキング」-「ネットワーク・ロード・バランサ」をクリックします。

  • 2.
    「ネットワーク・ロード・バランサの作成」ボタンをクリックします。

  • 3.
    次の項目を入力し、最後に「ネットワーク・ロード・バランサの作成」ボタンをクリックします。
    コンパートメントや、リスナーおよびバックエンドのトラフィックタイプやポート番号などは実際にご使用の環境にあわせて指定してください。特に記載のない項目は初期値のままです。

■ ネットワーク・ロード・バランサ
・ 詳細の追加
  - ネットワーク・ロード・バランサ名: project-lb
  - 可視性タイプの選択: プライベート
  - ヘッダーの保持
    - ソース/宛先ヘッダー(IP、ポート)の保持(ネットワーク・ロード・バランサ): Off
    - IPv6アドレス割当ての許可: Off
  - ネットワーキングの選択
    - 仮想クラウド・ネットワーク: vcn-project
    - サブネット: subnet-private1
    - ネットワーク・セキュリティ・グループを使用してトラフィックを制御: Off

・ リスナーの構成
  - リスナー名: project-lb-listener
  - リスナーで処理するトラフィックのタイプ: TCP
  - イングレス・トラフィック・ポート: ポートを指定
    - TCPの最大タイムアウト(秒): 120
    - ポート: <リスナー待ち受けポート番号> (本記事では3000)
  - プロキシ・プロトコル
    - プロキシ・プロトコルV2の有効化: Off

・ バックエンドの選択
  - バックエンド・セット名: project-lb-backend
  - モード: デフォルト
  - バックエンドの選択
    - server1
      - IPアドレス: 10.0.1.101
      - ポート: <サービス待ち受けポート番号> (本記事では3000)
      - 重み: 1
    - server2
      - IPアドレス: 10.0.1.102
      - ポート: <サービス待ち受けポート番号> (本記事では3000)
      - 重み: 1
  - ソースIPの保持: Off
  - ヘルス・チェック・ポリシーの指定
    - プロトコル: TCP
    - ポート: <ヘルスチェック用ポート番号> (本記事では1234)
    - 間隔(ミリ秒): 10000
    - タイムアウト(ミリ秒): 3000
    - 再試行回数: 3
    - リクエスト・データ: 指定なし
    - レスポンス・データ: 指定なし
    - フェイル・オープン: Off
    - インスタント・フェイルオーバーの有効化: Off
    - セキュリティ・リスト: ネットワーク・ロード・バランサの作成後にセキュリティ・リスト・ルールを手動で構成します
  - ロード・バランシング・ポリシー
    - ポリシーの選択: 5タプル・ハッシュ

3.1.3 ファイル・ストレージの作成

共有ファイルシステムとして利用するためのファイル・ストレージをOCIコンソールから作成します。

  • 1.
    OCIコンソールのメニューから「ストレージ」-「ファイル・システム」をクリックします。

  • 2.
    「ファイルシステムの作成」ボタンをクリックします。

  • 3.
    次の項目を入力し、「作成」ボタンをクリックします。
    コンパートメントや可用性ドメインなどは実際にご使用の環境にあわせて指定してください。特に記載のない項目は初期値のままです。

■ NFSのファイルシステム
  ・ ファイルシステム情報
    - 名前: FileSystem-project
    - 暗号化: Oracle管理キーを使用した暗号化
    - スナップショット・ポリシーのアタッチ: Off
    - リソース・ロック: ロックなし

  ・ エクスポート情報
    - エクスポート・パス: /FileSystem-project
    - セキュア・エクスポート・オプションの使用: Off
    - グループ・リストにLDAPを使用: Off
    - リソース・ロック: ロックなし

  ・ マウント・ターゲット情報
    - 新規マウント・ターゲット名: MountTarget-project
    - 仮想クラウド・ネットワーク: vcn-project
    - サブネット: subnet-private1
    - ネットワーク・セキュリティ・グループを使用してトラフィックを制御: Off
    - IP詳細
        IPアドレス: 10.0.1.200
        ホスト名: fs-server
    - リソース・ロック: ロックなし

3.1.4 ファイル・ストレージの自動マウント

HAクラスターを構成するサーバーが起動時にファイル・ストレージを自動的にマウントするように、設定を/etc/fstab ファイルに追記します。下記の作業をHAクラスターを構成する各サーバーで実施してください。

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

# mkdir /mnt/fs

  • 2.
    /etc/fstab ファイルにNFSサーバー(10.0.1.200)のエクスポートパス(/FileSystem-project)をマウントポイント(/mnt/fs)に自動マウントする設定を下記の内容で追記します。

10.0.1.200:/FileSystem-project     /mnt/fs nfs defaults,nosuid,resvport,sec=sys 0 0

  • 3.
    設定を有効にした後、マウントできることを確認します。

# systemctl daemon-reload
# mount /mnt/fs

  • 詳細なマウント方法については、以下を参照ください。
  • 4.
    正常にマウントできたことを確認後、サービスで共有するルートディレクトリ(/mnt/fs/data)および、後の「3.2.2 モニタリソースの登録」で追加するディスクモニタリソースの監視対象ファイル用のディレクトリ(例. /mnt/fs/monitor)を作成します(server1側で実施)。

# mkdir /mnt/fs/data
# mkdir /mnt/fs/monitor

3.1.5 CLUSTERPROのインストール

HAクラスターを構成するサーバー(server1およびserver2)にCLUSTERPROをインストールします。
今回の検証では、CLUSTERPRO X 5.3 for Linux(内部Ver. 5.3.1-1)を利用しています。

CLUSTERPROをインストールする方法の詳細については、CLUSTERPROのインストール&設定ガイドをご参照ください。

【参考】
popupCLUSTERPRO X システム構築ガイド

  • CLUSTERPRO X 5.3 > Linux > インストール&設定ガイド

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

/etc/fstab による自動マウントでは、ファイル・ストレージのマウントが完了していない場合でもCLUSTERPROのサービスが起動することがあります。その場合、参照するファイル・ストレージがマウントされていない状態でサービスの起動が行われ、起動に失敗する可能性があります。そのため、ファイル・ストレージのマウントが完了してからCLUSTERPROのサービスが起動するように設定する必要があります。

systemdのCLUSTERPRO用サービスファイル(/usr/lib/systemd/system/clusterpro_evt.service)の依存関係に、ファイル・ストレージのマウントユニット(例. mnt-fs.mount)を追加します。HAクラスターを構成するサーバー(server1、server2)のそれぞれで実施してください。

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

(以下、省略)

  • ファイル・ストレージのマウントに失敗した場合、CLUSTERPROのサービスは起動しません。
  • たとえばマウントポイントに/mnt/share を指定した場合のマウントユニットのファイル名はmnt-share.mount となります。
    マウントユニットの命名ルールについては以下が参考となります。

servet1、server2を再起動し、ファイル・ストレージが正常にマウントされること、および、CLUSTERPROのサービスが起動し、Cluster WebUIにアクセスできることを確認します。

3.1.7 サービスのインストール

HAクラスター化するサービスをインストールします。
本記事ではサービスのインストールは行わないため、次に進みます。

3.2 ロードバランサーを使用したHAクラスターの構築

Cluster WebUIを使用して、HAクラスターを構築します。
HAクラスターの構成は以下の通りです。

■ グループ(failover)
  ・ Oracle Cloud仮想IPリソース(ocvip)
    - ポート番号:1234
  ・ EXECリソース(exec-app)
    - 開始スクリプト:サービスを起動するスクリプトを記載
    - 終了スクリプト:サービスを停止するスクリプトを記載

■ モニタ
  ・ディスクモニタリソース(diskw)
    - 監視タイミング:常時
    - サーバー個別設定
      - server1
        - 監視方法:WRITE(FILE)
        - 監視先:/mnt/fs/monitor/server1.txt
        - I/Oサイズ:1バイト
      - server2
        - 監視方法:WRITE(FILE)
        - 監視先:/mnt/fs/monitor/server2.txt
        - I/Oサイズ:1バイト

詳細な設定手順については、以下を参照ください。

【参考】
popupCLUSTERPRO X ソフトウェア構築ガイド

  • Linux >  クラウド >  Oracle Cloud Infrastructure
       > CLUSTERPRO X 5.3 向け HAクラスタ 構築ガイド

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

フェールオーバーグループには「Oracle Cloud仮想IPリソース」と「EXECリソース」を登録します。

Oracle Cloud仮想IPリソースは、ロードバランサーからのヘルスチェックに対して、現用系にしたいサーバーからのみ応答するようにすることで接続先の切り替えを実現します。「ポート番号」には、ネットワーク・ロード・バランサのヘルス‧チェック‧ポリシーで指定したポート番号と同じ値(1234)を指定します。Oracle Cloud仮想IPリソースはこのポート番号で待ち受け、ネットワーク・ロード・バランサからのヘルスチェックに応答することでバックエンドとしての正常性を保ちます。

EXECリソースは、アプリケーションやシェルスクリプトの起動や停止を制御するリソースです。HAクラスター対象とするサービスをスクリプトで制御できますので、EXECリソース(例. exec-app)の開始スクリプト(start.sh)と終了スクリプト(stop.sh)に、それぞれサービスを起動/停止するスクリプトを記載します。
本記事ではサービス用ソフトウェアのインストールは行っていないため、代替としてEXECリソースが起動するタイミングでスクリプトが実行されたサーバーのホスト名を共有ファイルシステム上のファイルに書き出すスクリプトを登録しました。

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

#!/bin/sh

hostname > /mnt/fs/data/hostname

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

#!/bin/sh

rm -f /mnt/fs/data/hostname

3.2.2 モニタリソースの登録

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

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

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

4. 動作確認

クラスターの構築が完了したら、Cluster WebUIからクラスタ開始を実行し、フェールオーバーグループが正常に起動することを確認します。

server1にsshで接続し、共有ファイルシステムにEXECリソース(exec-app)によりserver1のホスト名が書き出されていることを確認します。

# cat /mnt/fs/data/hostname
server1 ★ 書き出されたホスト名

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

フェールオーバーグループがserver2で起動したことを確認した後、server2に接続します。共有ファイルシステムにserver2のホスト名が書き出されていれば成功です。

# cat /mnt/fs/data/hostname
server2 ★ 書き出されたホスト名

まとめ

今回は共有ファイルシステムの一つとしてOCIのファイル・ストレージを使用したHAクラスターの構築を試してみました。特別なソフトウェアをインストールすることなしにNFSとして使用することが可能であり、CLUSTERPROによって起動されたサービスから共有ファイルシステムに対して問題なくアクセスできることを確認しました。CLUSTERPROでファイル・ストレージを使用したクラスターを組む際は、本手順を参考にHAクラスターを構築してください。

本記事の手順をご検討の際は、CLUSTERPROのpopup試用版を提供しておりますので、ぜひご活用ください。

利用製品

本記事の環境を構築する際に利用した製品です。

■ OS共通
  – CLUSTERPRO X Media 5.3
  – CLUSTERPRO X Startup Kit 5.3
■ Linux
  – CLUSTERPRO X 5.3 for Linux VM (1ノードライセンス)

お問い合わせ

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

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