Japan
サイト内の現在位置を表示しています。
Google Cloud PlatformでHAクラスターの構築を試してみました(Linux) ~構築編~
CLUSTERPRO オフィシャルブログ ~クラブロ~はじめに

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クラスター構成
- ※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クラスター構成
Cloud DNSを使用したHAクラスターの接続先切り替え方法については

1.2 Cloud Load Balancingを使用したHAクラスター構成
Cloud Load Balancingを使用したHAクラスターの接続先切り替え方法については

2.HAクラスター構築手順
2.1 Cloud DNSを使用したHAクラスターの構築
2.1.1 VPCネットワークの作成・設定
今回は東京リージョン(asia-northeast1)にVPCネットワークを作成します。
VPCネットワークの構成は以下の通りです。
- VPCネットワーク(Name:test-vpc)
- -Subnets
- ■subnetwork-1 :10.0.1.0/24
- ■subnetwork-11:10.0.11.0/24

これは、HAクラスターを構成するインスタンスがgcloudコマンドを実行する際に、インターネットへアクセスする必要があるためです。
インターネットへのアクセスには、NATゲートウェイやNATインスタンスを使用する方法があります。
今回はNATゲートウェイ(Cloud NAT)を使用します。
また、必要に応じて、VPCネットワーク内の通信を制御するファイアウォールルールを設定します。
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:なし
Cloud IAMを使用して、以下の権限をインスタンスに付与します。
- DNSレコードの追加、削除
- DNSレコードの表示
- OS、Kernelのバージョンアップ/バージョンダウン
- パッケージのインストールやアップデート/ダウングレード
CLUSTERPROの動作環境については、以下をご参照ください。
2.1.3 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
2.1.4 HAクラスターの構築
- CLUSTERPRO
- -フェールオーバーグループ (failover)
- ■EXECリソース
- ・start.sh
- ・stop.sh
- ■ミラーディスクリソース
- ・データパーティション:/dev/sdb2
- ・クラスタパーティション:/dev/sdb1
以下、サンプルスクリプトです。
- ※以下のスクリプトはサンプルであり、動作を保証するものではありません。
- ※★部分の変数の値は環境に合わせて設定してください。
#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
#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にアクセスし、待機系インスタンスに接続できることを確認します。
2.2 Cloud Load Balancingを使用したHAクラスターの構築
2.2.1 VPCネットワークの作成・設定
今回は東京リージョン(asia-northeast1)にVPCネットワークを作成します。
VPCネットワークの構成は以下の通りです。
- VPCネットワーク(Name:test-vpc)
- -Subnets
- ■subnetwork-1 :10.0.1.0/24
- ■subnetwork-11:10.0.11.0/24

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:なし
- ※作成したインスタンスがインターネットへのアクセスを必要とする場合があります。
適宜、VPCネットワーク内のインスタンスがインターネットへアクセスできる構成にします。
- OS、Kernelのバージョンアップ/バージョンダウン
- パッケージのインストールやアップデート/ダウングレード
CLUSTERPROの動作環境については、以下をご参照ください。
2.2.3 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
- ・ポート:任意の値
2.2.4 HAクラスターの構築
- CLUSTERPRO
- -フェールオーバーグループ (failover)
- ■Azureプローブポートリソース
- ・プローブポート番号:12345
- ■ミラーディスクリソース
- ・データパーティション:/dev/sdb2
- ・クラスタパーティション:/dev/sdb1
- ※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にアクセスし、待機系インスタンスに接続できることを確認します。
さいごに
本記事の構成をご検討される際は、CLUSTERPROの

お問い合わせ

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