Japan
サイト内の現在位置を表示しています。
Oracle Cloud InfrastructureでセカンダリIPを利用したHAクラスターの構築を試してみました(Linux)
CLUSTERPRO オフィシャルブログ ~クラブロ~はじめに
HAクラスターの接続先切り替えにセカンダリIPを使用することで、ロードバランサを利用せずに仮想IPに相当する機能を実現することが可能となります。
今回は、セカンダリIPを接続先の切り替えに利用したHAクラスターを構築します。
この記事の内容
1. セカンダリIPとは
コンピュート・インスタンスでは、1つのネットワークインターフェイス(以降、NIC)に、複数のプライベートIPアドレスを付与することが可能です。
コンピュート・インスタンスには、必ず1つ以上のNICが割り当てられています。そして、NICには、1つ以上のIP構成が割り当てられています。
IP構成には、プライマリIP構成とセカンダリIP構成があります。
NICには、必ず1つのプライマリIP構成が割り当てられており、さらに追加でセカンダリIP構成を割り当てることで、複数のIPアドレスを割り当てることが可能です。
今回はセカンダリIPを接続先切り替えに利用したHAクラスターを構築します。
従来のOracle Cloud仮想IPリソースによるIP切り替えでは、ロードバランサを利用する必要があるため、コンピュート・インスタンス上で動くソフトウェアがロードバランサに非対応の場合は仮想IPによる切り替えが困難となっていました。
OCI CLIを用いてセカンダリIPを接続先切り替えに利用することで、ロードバランサに非対応のアプリケーション環境においても仮想IPによる切り替えができます。
2. HAクラスター構成
構成は以下の通りです。
また、NICへのセカンダリIPの追加/削除に合わせて、OS上でIPアドレスの付与/解放を行います。
- Linux > クラウド > Oracle Cloud Infrastructure > HAクラスタ構築ガイド
- CLUSTERPRO X 4.2
3. HAクラスター構築手順
今回の構成は以下の通りです。
OCIの構成
- 東京リージョン
- VCN (CIDR: 10.0.0.0/16)
- ■ サブネット
- ・Public Subnet 10.0.0.0/24
- ・Private Subnet 10.0.1.0/24
- ■ Internet Gateway
- ■ NAT Gateway
- ■ コンピュート・インスタンス
- ・サーバー1 (現用系サーバー):server1
- ・IP構成
- ・プライマリIP:10.0.1.101
- ・セカンダリIP:10.0.1.250
- ・サーバー2 (待機系サーバー):server2
- ・IP構成
- ・プライマリIP:10.0.1.102
- ・セカンダリIP:10.0.1.250
- CLUSTERPRO X 4.2 for Linux (内部バージョン:4.2.0-1)
- - Oracle Linux 7.7 (*)
- フェールオーバーグループ (failover)
- - execリソース
- - ミラーディスクリソース
- - クラスタパーティション : /dev/oracleoci/oraclevdb1
- - データパーティション : /dev/oracleoci/oraclevdb2
今回は、接続先切り替えにセカンダリIPを使用するため、ロードバランサーに関する設定は不要です。
(*) CLUSTERPRO X 4.2 にて動作確認が完了しているディストリビューションを利用いただくことが可能です。
3-1.OCI CLI認証方式
なお、OCI CLIのセットアップには、CLIをどのユーザーアカウントとして実行するかを設定するために、ユーザーとテナンシのOCID(識別子)が必要になります。
- 1.OCI CLIをインストールする
- 2.oci setup config を実行する
- 3.Webコンソールから、公開鍵をユーザーにアカウントに設定する
cat ~/.oci/oci_api_key_public.pem で公開鍵を表示し、Webコンソールのユーザーの詳細画面から公開キーの追加を押下し、公開鍵を追加する
3-2. HAクラスターの構築
構築ガイドの手順「4.3 CLUSTERPROの設定」に、以下の手順を追加します。
まず、OCI CLIの実行に必要な情報(OCID等)をまとめる、設定ファイルを用意します。
今回は /opt/nec/clusterpro/cloud/oci 配下に clpoci_setting.conf を作成しました。
- ※以下のスクリプトや、設定ファイル、ユニットファイルはサンプルであり、動作を保証するものではありません。
- ※★部分の変数の値は環境に合わせて設定してください。
HOST1="server1" ★サーバー1のホスト名
HOST2="server2" ★サーバー2のホスト名
VIP_ADDR="10.0.1.250" ★セカンダリIPとして使用するIPアドレス
VIP_NETMASK="24" ★サブネットマスク
DEVNAME="ens3:0" ★追加するNIC名
OCIPath="/root/bin/oci" ★OCIコマンドのパス
VNIC_OCID_HOST1="ocid1.vnic.oc1.ap-tokyo-1.xxxxxxxxxx; ★サーバー1のVNIC OCID
VNIC_OCID_HOST2="ocid1.vnic.oc1.ap-tokyo-1.xxxxxxxxxx; ★サーバー2のVNIC OCID
case $(hostname -s) in
"${HOST1}")
# instance#1 VNIC OCID
VNIC_OCID=${VNIC_OCID_HOST1}
;;
"${HOST2}")
# instance#2 VNIC OCID
VNIC_OCID=${VNIC_OCID_HOST2}
;;
esac
なお、execリソースの依存関係は、依存するリソースなし(深度0)に設定します。
#!/bin/bash
source /opt/nec/clusterpro/cloud/oci/clpoci_setting.conf ★設定ファイルパス
for SVRNUM in `seq 2`
do
var="VNIC_OCID_HOST${SVRNUM}"
eval VNIC_OCID_LOCAL='$'${var}
${OCIPath} network vnic unassign-private-ip --vnic-id ${VNIC_OCID_LOCAL} --ip-address ${VIP_ADDR}
if [[ ${?} -ne 0 ]]; then
echo "oci cli command Error"
fi
done
sudo ping ${VIP_ADDR} -c 3 > /dev/null 2>&1
if [[ ${?} -eq 1 ]]; then
echo "not in use secondery ip"
else
IPADDR=`ip -f inet -o addr show ens3 | cut -d\ -f 7 | cut -d/ -f 1 | grep ${VIP_ADDR}`
if [ "${VIP_ADDR}" = "${IPADDR}" ]; then
echo "already assigned on own server"
sudo ip addr del ${VIP_ADDR}/${VIP_NETMASK} dev ${DEVNAME} label ${DEVNAME}
if [[ ${?} -ne 0 ]]; then
echo "ip command Error"
exit 2
fi
else
echo "already assigned on other server"
exit 1
fi
fi
${OCIPath} network vnic assign-private-ip --vnic-id ${VNIC_OCID} --ip-address ${VIP_ADDR}
if [[ ${?} -ne 0 ]]; then
echo "oci cli command Error"
exit 1
fi
sudo ip addr add ${VIP_ADDR}/${VIP_NETMASK} dev ${DEVNAME} label ${DEVNAME}
if [[ ${?} -ne 0 ]]; then
echo "ip command Error"
exit 2
fi
exit 0
#!/bin/bash
source /opt/nec/clusterpro/cloud/oci/clpoci_setting.conf ★設定ファイルパス
${OCIPath} network vnic unassign-private-ip --vnic-id ${VNIC_OCID} --ip-address ${VIP_ADDR}
if [[ ${?} -ne 0 ]]; then
echo "oci cli command Error"
exit 1
fi
sudo ip addr del ${VIP_ADDR}/${VIP_NETMASK} dev ${DEVNAME} label ${DEVNAME}
if [[ ${?} -ne 0 ]]; then
echo "ip command Error"
exit 2
fi
exit 0
ユニットファイルは作成後、サービスとして登録し、有効化してください。
ユニットファイル (secondary_ip.service)
[Unit]
Description=Unassign secondary ip
After=network-online.target remote-fs.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/secondary_ip_unassign.sh ★サービス実行時に実行されるスクリプト
[Install]
WantedBy=multi-user.target
#!/bin/bash
source /opt/nec/clusterpro/cloud/oci/clpoci_setting.conf
${OCIPath} network vnic unassign-private-ip --vnic-id ${VNIC_OCID} --ip-address ${VIP_ADDR}
if [[ ${?} -ne 0 ]]; then
echo "oci cli command Error"
fi
sudo ip addr del ${VIP_ADDR}/${VIP_NETMASK} dev ${DEVNAME} label ${DEVNAME}
if [[ ${?} -ne 0 ]]; then
echo "ip command Error"
fi
exit 0
4. 動作確認
- 1.現用系サーバーでフェールオーバーグループを起動します。
- 2.クライアントマシンから、セカンダリIP(10.0.1.250)にアクセスし、現用系サーバーに接続できることを確認します。
- 3.現用系サーバーから、セカンダリIP(10.0.1.250)にアクセスし、現用系サーバーに接続できることを確認します。
- 4.Cluster WebUIから、フェールオーバーグループを現用系サーバーから待機系サーバーに、手動で移動します。
- 5.クライアントマシンから、セカンダリIP(10.0.1.250)にアクセスし、待機系サーバーに接続できることを確認します。
- 6.待機系サーバーから、セカンダリIP(10.0.1.250)にアクセスし、待機系サーバーに接続できることを確認します。
セカンダリIPを使用してHAクラスターに接続できることを確認できました。
まとめ
HAクラスター対象のアプリケーションの要件などで、IPアドレスの区別が必要な場合は、本手順を参考にHAクラスターを構築ください。
本記事の構成をご検討の際は、CLUSTERPROの試用版を用いて検証した後、ご提案・構築ください。
参考
お問い合わせ
- ※本記事で紹介しているスクリプトの内容についてのお問い合わせ、および、お客様環境に合わせたカスタマイズにつきましてはCLUSTERPRO導入支援サービスにて承っておりますので、上記窓口の"ご購入前のお問い合わせ"フォームまでお問い合わせください。