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

Google Cloud PlatformでHAクラスターの構築を試してみました(Linux) ~構築編~

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

はじめに

Google Cloud Platform(以降、GCP)で、CLUSTERPROを使用したHAクラスターの構築を試してみました。

popup概要編では、GCP上で構築可能なHAクラスター構成についてご紹介しました。
Google Cloud DNS(以降、Cloud DNS)とGoogle Cloud Load Balancing(以降、Cloud Load Balancing)の2つのサービスをHAクラスターの接続先切り替えに使用したHAクラスター構成です。

構築編では、HAクラスターの構築手順をご紹介します。

この記事の内容

1. HAクラスター構成

GCPでCLUSTERPROを使用したHAクラスター構成として、以下の2つを構築します。

  • Cloud DNSを使用したHAクラスター構成
  • Cloud Load Balancingを使用したHAクラスター構成
今回は、GCP上の同じVirtual Private Cloudネットワーク(以降、VPCネットワーク)内のクライアントからアクセス可能なHAクラスターを構築します。

動作確認したOS、kernel、CLUSTERPROのバージョンは以下の通りです。
  • CLUSTERPRO X 4.1 を使用したHAクラスター構成も可能です。
  • OS        :Red Hat Enterprise Linux 7.6
  • kernel    :3.10.0-957.el7.x86_64
  • CLUSTERPRO:CLUSTERPRO X 4.0

1.1 Cloud DNSを使用したHAクラスター構成

HAクラスターの接続先切り替えにCloud DNSを使用したHAクラスター構成は以下の通りです。

クライアントはCloud DNSに登録したレコードのDNS名に対してアクセスすることで、現用系インスタンスに接続します。
Cloud DNSを使用したHAクラスターの接続先切り替え方法についてはpopupこちら

1.2 Cloud Load Balancingを使用したHAクラスター構成

HAクラスターの接続先切り替えにCloud Load Balancingを使用したHAクラスター構成は以下の通りです。

クライアントはCloud Load BalancingのフロントエンドのIPアドレスに対してアクセスすることで、現用系インスタンスに接続します。
Cloud Load Balancingを使用したHAクラスターの接続先切り替え方法についてはpopupこちら

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

2.1 Cloud DNSを使用したHAクラスターの構築

2.1.1 VPCネットワークの作成・設定

VPCネットワークを作成します。
今回は東京リージョン(asia-northeast1)にVPCネットワークを作成します。
VPCネットワークの構成は以下の通りです。

  • VPCネットワーク(Name:test-vpc)
  • Subnets
  • subnetwork-1 :10.0.1.0/24
  • subnetwork-11:10.0.11.0/24

VPCネットワーク構成

VPCネットワーク内のHAクラスターを構成するインスタンスがインターネットへアクセスできる構成にします。
これは、HAクラスターを構成するインスタンスがgcloudコマンドを実行する際に、インターネットへアクセスする必要があるためです。
インターネットへのアクセスには、NATゲートウェイやNATインスタンスを使用する方法があります。
今回はNATゲートウェイ(Cloud NAT)を使用します。

また、必要に応じて、VPCネットワーク内の通信を制御するファイアウォールルールを設定します。

VPCネットワークの作成手順やNATゲートウェイ/NATインスタンスの設定、ファイアウォールルールの設定の詳細は、GCPのドキュメントをご参照ください。

2.1.2 インスタンスの作成

HAクラスターを構成するインスタンスを作成します。
インスタンスは各ゾーン(asia-northeast1-a、asia-northeast1-b)に1台ずつ作成します。

  • Server1
  • リージョン:asia-northeast1 (東京)
  • ゾーン:asia-northeast1-a
  • ディスク:ミラーディスク用の永続ディスクを追加します。
  • ネットワーキング:
    • ・ネットワークインターフェース:
  • -ネットワーク:test-vpc
  • -サブネットワーク:subnetwork-11
  • -プライマリ内部IP:10.0.11.101
  • -外部IP:なし
  • Server2
  • リージョン:asia-northeast1 (東京)
  • ゾーン:asia-northeast1-b
  • ディスク:ミラーディスク用の永続ディスクを追加します。
  • ネットワーキング:
    • ・ネットワークインターフェース:
  • -ネットワーク:test-vpc
  • -サブネットワーク:subnetwork-11
  • -プライマリ内部IP:10.0.11.102
  • -外部IP:なし
インスタンスの作成時、または作成後にHAクラスターを構成するインスタンスに対して、GCPのリソースを操作する権限を付与します。
Cloud IAMを使用して、以下の権限をインスタンスに付与します。

  • DNSレコードの追加、削除
  • DNSレコードの表示

インスタンスの作成手順やインスタンスに対するCloud IAMの設定の詳細は、GCPのドキュメントをご参照ください。
【参考】
popupCompute Engine

また、必要に応じて、インスタンス作成後に以下を実施します。

  • OS、Kernelのバージョンアップ/バージョンダウン
  • パッケージのインストールやアップデート/ダウングレード
OS、kernelのバージョンについてはCLUSTERPROが対応しているバージョンを使用してください。
CLUSTERPROの動作環境については、以下をご参照ください。

2.1.3 Cloud DNSの設定

Cloud DNSを使用して、レコードを作成します。
今回は、HAクラスターへの接続先に使用するDNS名に「test-cluster.example.com」をAレコードとして登録します。
また、登録するAレコードのIPアドレスにはHAクラスターを構成するインスタンスのIPアドレスを指定します。

DNSゾーンを作成します。ゾーンの作成時には以下を設定します。

  • DNSゾーン
  • ゾーンのタイプ:非公開
  • ゾーン名:test-zone
  • DNS名:example.com
  • オプション:デフォルト(限定公開)
  • ネットワーク:test-vpc

作成したゾーンにレコードセットを追加します。レコードセットの作成時に以下を設定します。

  • レコードセット
  • DNS名:test-cluster.example.com
  • リソースレコードのタイプ:A
  • TTL:5
  • TTLユニット:
  • IPv4アドレス:10.0.11.101

DNSゾーンの作成の詳細は、GCPのドキュメントをご参照ください。

【参考】
Cloud DNS

2.1.4 HAクラスターの構築

ミラーディスク型のHAクラスターを構築します。CLUSTERPROのフェールオーバーグループには「スクリプトリソース」、「ミラーディスクリソース」の2つを登録します。

  • CLUSTERPRO
  • フェールオーバーグループ (failover)
  • スクリプトリソース
  • start.sh
  • stop.sh
  • ミラーディスクリソース
  • データパーティション:/dev/sdb2
  • クラスタパーティション:/dev/sdb1

Cloud DNSを使用したHAクラスター構成では、スクリプトリソースによってDNSレコードの制御(書き換え)を行います。
以下、サンプルスクリプトです。
  • 以下のスクリプトはサンプルであり、動作を保証するものではありません。
  • ★部分の変数の値は環境に合わせて設定してください。

start.sh(起動スクリプト)

#Set Server 1
SERVER1_NAME="Server1"  ★Server1のホスト名
SERVER1_IP="10.0.11.101"  ★Server1のIPアドレス

#Set Server 2
SERVER2_NAME="Server2"  ★Server2のホスト名
SERVER2_IP="10.0.11.102"  ★Server2のIPアドレス

#Set DNS Record
ZONE_NAME="test-zone"  ★ゾーン名
DOMAIN_NAME="test-cluster.example.com"  ★DNS名
DOMAIN_TYPE="A"  ★レコードタイプ
DOMAIN_TTL="5"  ★TTL値
DOMAIN_IP=""

#Get DNS Record
RECORD="`gcloud dns record-sets list -z=\"${ZONE_NAME}\" | grep \"${DOMAIN_NAME}\"`"
RECORD_NAME="`echo ${RECORD} | awk '{print $1}'`"
RECORD_TYPE="`echo ${RECORD} | awk '{print $2}'`"
RECORD_TTL="`echo ${RECORD} | awk '{print $3}'`"
RECORD_IP="`echo ${RECORD} | awk '{print $4}'`"

#Decide DOMAIN_IP
SERVER="`hostname`"

if [ "${SERVER}" = "${SERVER1_NAME}" ]
then
    echo "${SERVER1_IP} will be used for Domain IP."
    DOMAIN_IP="${SERVER1_IP}"
elif [ "${SERVER}" = "${SERVER2_NAME}" ]
then
    echo "${SERVER2_IP} will be used for Domain IP."
    DOMAIN_IP="${SERVER2_IP}"
else
    echo "${SERVER} can not be found in the cluster."
    exit 1
fi

#Register DNS Record
#Start Transaction
gcloud dns record-sets transaction start -z="${ZONE_NAME}" >/dev/null 2>&1

#Remove DNS Record
gcloud dns record-sets transaction remove -z="${ZONE_NAME}" --name="${RECORD_NAME}" --ttl="${RECORD_TTL}" --type="${RECORD_TYPE}" "${RECORD_IP}" >/dev/null 2>&1

#Add DNS Record
gcloud dns record-sets transaction add -z="${ZONE_NAME}" --name="${DOMAIN_NAME}" --ttl="${DOMAIN_TTL}" --type="${DOMAIN_TYPE}" "${DOMAIN_IP}" >/dev/null 2>&1

#Execute Transaction
gcloud dns record-sets transaction execute -z="${ZONE_NAME}" >/dev/null 2>&1
if [ $? -ne 0 ]
then
    gcloud dns record-sets transaction abort -z="${ZONE_NAME}" >/dev/null 2>&1
    echo "Transaction has failed."
    exit 1
fi

stop.sh(停止スクリプト)

#Set Server 1
SERVER1_NAME="Server1"  ★Server1のホスト名
SERVER1_IP="10.0.11.101"  ★Server1のIPアドレス

#Set Server 2
SERVER2_NAME="Server2"  ★Server2のホスト名
SERVER2_IP="10.0.11.102"  ★Server2のIPアドレス

#Set DNS Record
ZONE_NAME="test-zone"  ★ゾーン名
DOMAIN_NAME="test-cluster.example.com"  ★DNS名
DOMAIN_TYPE="A"  ★レコードタイプ
DOMAIN_TTL="5"  ★TTL値
DOMAIN_IP=""

#Get DNS Record
RECORD="`gcloud dns record-sets list -z=\"${ZONE_NAME}\" | grep \"${DOMAIN_NAME}\"`"
RECORD_NAME="`echo ${RECORD} | awk '{print $1}'`"
RECORD_TYPE="`echo ${RECORD} | awk '{print $2}'`"
RECORD_TTL="`echo ${RECORD} | awk '{print $3}'`"
RECORD_IP="`echo ${RECORD} | awk '{print $4}'`"

#Abort Transaction
gcloud dns record-sets transaction abort -z="${ZONE_NAME}" >/dev/null 2>&1

#Register DNS Record
#Start Transaction
gcloud dns record-sets transaction start -z="${ZONE_NAME}" >/dev/null 2>&1

#Remove DNS Record
gcloud dns record-sets transaction remove -z="${ZONE_NAME}" --name="${RECORD_NAME}" --ttl="${RECORD_TTL}" --type="${RECORD_TYPE}" "${RECORD_IP}" >/dev/null 2>&1

#Execute Transaction
gcloud dns record-sets transaction execute -z="${ZONE_NAME}" >/dev/null 2>&1
if [ $? -ne 0 ]
then
    gcloud dns record-sets transaction abort -z="${ZONE_NAME}" >/dev/null 2>&1
    echo "Transaction has failed, but this script will end normally(exit 0)."
    exit 0
fi

2.1.5 動作確認

クライアントから登録したレコードのDNS名(test-cluster.example.com)を使用して、現用系サーバにアクセスできることを確認します。

  • 1.現用系インスタンスでフェールオーバーグループを起動します。
  • 2.クライアントから、test-cluster.example.comにアクセスし、現用系インスタンスに接続できることを確認します。
  • 3.Cluster WebUIから、フェールオーバーグループを現用系インスタンスから待機系インスタンスに手動で移動します。
  • 4.クライアントから、test-cluster.example.comにアクセスし、待機系インスタンスに接続できることを確認します。

クライアントから登録したレコードのDNS名を使用してHAクラスターに接続できることを確認できました。

2.2 Cloud Load Balancingを使用したHAクラスターの構築

2.2.1 VPCネットワークの作成・設定

VPCネットワークを作成します。
今回は東京リージョン(asia-northeast1)にVPCネットワークを作成します。
VPCネットワークの構成は以下の通りです。

  • VPCネットワーク(Name:test-vpc)
  • Subnets
  • subnetwork-1 :10.0.1.0/24
  • subnetwork-11:10.0.11.0/24

VPCネットワーク構成

必要に応じて、VPCネットワーク内の通信を制御するファイアウォールルールを設定します。

VPCネットワークの作成手順やファイアウォールルールの設定の詳細は、GCPのドキュメントをご参照ください。

2.2.2 インスタンスの作成

HAクラスターを構成するインスタンスを作成します。
インスタンスは各ゾーン(asia-northeast1-a、asia-northeast1-b)に1台ずつ作成します。

  • Server1
  • リージョン:asia-northeast1 (東京)
  • ゾーン:asia-northeast1-a
  • ディスク:ミラーディスク用の永続ディスクを追加します。
  • ネットワーキング:
    • ・ネットワークインターフェース:
  • -ネットワーク:test-vpc
  • -サブネットワーク:subnetwork-11
  • -プライマリ内部IP:10.0.11.101
  • -外部IP:なし
  • Server2
  • リージョン:asia-northeast1 (東京)
  • ゾーン:asia-northeast1-b
  • ディスク:ミラーディスク用の永続ディスクを追加します。
  • ネットワーキング:
    • ・ネットワークインターフェース:
  • -ネットワーク:test-vpc
  • -サブネットワーク:subnetwork-11
  • -プライマリ内部IP:10.0.11.102
  • -外部IP:なし

インスタンスの作成手順の詳細は、GCPのドキュメントをご参照ください。
【参考】
popupCompute Engine

  • 作成したインスタンスがインターネットへのアクセスを必要とする場合があります。
    適宜、VPCネットワーク内のインスタンスがインターネットへアクセスできる構成にします。
必要に応じて、インスタンス作成後に以下を実施します。

  • OS、Kernelのバージョンアップ/バージョンダウン
  • パッケージのインストールやアップデート/ダウングレード
OS、kernelのバージョンについてはCLUSTERPROが対応しているバージョンを使用してください。
CLUSTERPROの動作環境については、以下をご参照ください。

2.2.3 Cloud Load Balancingの設定

各種設定を行い、Cloud Load Balancingを使用してロードバランサを作成します。

ファイアウォールルールを設定します。
インスタンスのヘルスチェックを行うGCPヘルスチェックシステム(130.211.0.0/22 と 35.191.0.0/16)からの通信を許可する以下のファイアウォールルールを作成します。

  • ファイアウォールルール
  • 名前:test-allow-health-check
  • ネットワーク:test-vpc
  • 優先度:1000
  • トラフィックの方向:上り(Ingress)
  • 一致したときのアクション:許可(Allow)
  • ターゲット:指定されたターゲットタグ
  • ターゲットタグ:allow-health-check
  • ソースフィルタ:IP範囲
  • ソースIPの範囲:130.211.0.0/22、35.191.0.0/16
  • プロトコルとポート:すべて許可

インスタンスグループを作成します。
Cloud Load Balancingのバックエンドに指定する非マネージドインスタンスグループをゾーンごとに作成します。
インスタンスグループに「2.2.2 インスタンスの作成」で作成したインスタンスをそれぞれ追加します。

  • インスタンスグループ
  • 名前:test-ig-a
  • リージョン:asia-northeast1 (東京)
  • ゾーン:aisa-northeast1-a
  • ネットワーク:test-vpc
  • サブネットワーク:subnetwork-11
  • VMインスタンス:Server1

  • 名前:test-ig-b
  • リージョン:asia-northeast1 (東京)
  • ゾーン:aisa-northeast1-b
  • ネットワーク:test-vpc
  • サブネットワーク:subnetwork-11
  • VMインスタンス:Server2

VPCネットワーク内での通信を負荷分散する以下のロードバランサを作成します。

  • ロードバランサ
  • 種類:TCP 負荷分散
  • インターネット接続または内部専用:VM間のみ
  • マルチリージョンまたはシングルリージョン:シングルリージョンのみ
  • 名前:test-lb
  • バックエンドの設定
    • ・名前:test-lb
    • ・リージョン:asia-northeast1
    • ・ネットワーク:test-vpc
    • ・インスタンスグループ:test-ig-a、test-ig-b
    • ・ヘルスチェック:
  • -名前:test-health-check
  • -プロトコル:TCP
  • -ポート:12345
  • -プロキシのプロトコル:なし
  • -ヘルス条件:今回はデフォルト値を設定します。
    • ・セッション アフィニティ:なし
  • フロントエンドの設定:
  • ・名前:test-frontend
  • ・サブネットワーク:subnetwork-1
  • ・内部IP:10.0.1.100
  • ・ポート:任意の値

Cloud Load Balancingの設定の詳細は、GCPのドキュメントをご参照ください。

【参考】
Cloud Load Balancing

2.2.4 HAクラスターの構築

ミラーディスク型のHAクラスターを構築します。CLUSTERPROのフェールオーバーグループには「Azureプローブポートリソース」、「ミラーディスクリソース」の2つを登録します。

  • CLUSTERPRO
  • フェールオーバーグループ (failover)
  • Azureプローブポートリソース
  • プローブポート番号:12345
  • ミラーディスクリソース
  • データパーティション:/dev/sdb2
  • クラスタパーティション:/dev/sdb1

Cloud Load Balancingを使用したHAクラスター構成では、Azure プローブポートリソースによってロードバランサのヘルスチェックに使用されるポートを制御します。
  • CLUSTERPRO X 4.0では、GCP専用のポート制御用リソースが実装されていないため、Azureプローブポートリソースを使用しています。
    なお、将来のバージョンにおいてGCP専用のポート制御用リソースの提供を予定しています。

2.2.5 動作確認

クライアントからロードバランサのフロントエンドのIPアドレス(10.0.1.100)を使用して、現用系サーバにアクセスできることを確認します。

  • 1.現用系インスタンスでフェールオーバーグループを起動します。
  • 2.クライアントから、10.0.1.100にアクセスし、現用系インスタンスに接続できることを確認します。
  • 3.Cluster WebUIから、フェールオーバーグループを現用系インスタンスから待機系インスタンスに手動で移動します。
  • 4.クライアントから、10.0.1.100にアクセスし、待機系インスタンスに接続できることを確認します。

クライアントからロードバランサを使用してHAクラスターに接続できることを確認できました。

さいごに

今回はGCP上で、CLUSTERPROを使用したHAクラスターの構築手順をご紹介しました。
本記事の構成をご検討される際は、CLUSTERPROの試用版を用いて検証した後、ご提案・構築ください。

お問い合わせ

当ブログに関するお問い合わせは、CLUSTERPRO プリセールスお問い合わせ窓口(info@clusterpro.jp.nec.com new window)までお問い合わせください。