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

Oracle Cloud InfrastructureでセカンダリIPを利用したHAクラスターの構築を試してみました(Linux)

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

はじめに

Oracle Cloud Infrastructure (以降、OCI) で、HAクラスターの接続先切り替えにセカンダリIPを使用したHAクラスターの構築を試してみました。
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クラスター構成

「セカンダリIPを使用したHAクラスター」を構築します。
構成は以下の通りです。

HAクラスター構成の図

OCI CLIを使用して、HAクラスターを構築するサーバーのNICにセカンダリIP(例.10.0.1.250)を追加/削除します。
また、NICへのセカンダリIPの追加/削除に合わせて、OS上でIPアドレスの付与/解放を行います。

【参考】
  • Linux > クラウド > Oracle Cloud Infrastructure > HAクラスタ構築ガイド

  • CLUSTERPRO X 4.2

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

OCIに「ミラーディスク型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の構成

  • CLUSTERPRO X 4.2 for Linux (内部バージョン:4.2.0-1)
  • Oracle Linux 7.7 (*)
  • フェールオーバーグループ (failover)
  • execリソース
  • ミラーディスクリソース
  • クラスタパーティション : /dev/oracleoci/oraclevdb1
  • データパーティション : /dev/oracleoci/oraclevdb2

OCIにおけるHAクラスターの構築手順は、「HAクラスタ構築ガイド」を参照ください。
今回は、接続先切り替えにセカンダリIPを使用するため、ロードバランサーに関する設定は不要です。

(*) CLUSTERPRO X 4.2 にて動作確認が完了しているディストリビューションを利用いただくことが可能です。

【参考】
  • Linux > クラウド > Oracle Cloud Infrastructure > HAクラスタ構築ガイド

3-1.OCI CLI認証方式

OCI CLIを使用してOracle Cloud環境の操作を行う際、コマンドの実行の度に認証が行われます。この認証のための鍵はあらかじめOracle Cloud上のユーザーアカウントに設定しておく必要があります。
なお、OCI CLIのセットアップには、CLIをどのユーザーアカウントとして実行するかを設定するために、ユーザーとテナンシのOCID(識別子)が必要になります。


認証の手順は以下です。(2020/07/10 現在)
  • 1.OCI CLIをインストールする
  • 2.oci setup config を実行する
  • 3.Webコンソールから、公開鍵をユーザーにアカウントに設定する
    cat ~/.oci/oci_api_key_public.pem で公開鍵を表示し、Webコンソールのユーザーの詳細画面から公開キーの追加を押下し、公開鍵を追加する

3-2. HAクラスターの構築

セカンダリIPを追加/削除するexecリソースを登録します。
構築ガイドの手順「4.3 CLUSTERPROの設定」に、以下の手順を追加します。

まず、OCI CLIの実行に必要な情報(OCID等)をまとめる、設定ファイルを用意します。
今回は /opt/nec/clusterpro/cloud/oci 配下に clpoci_setting.conf を作成しました。

  • 以下のスクリプトや、設定ファイル、ユニットファイルはサンプルであり、動作を保証するものではありません。
  • ★部分の変数の値は環境に合わせて設定してください。

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リソースを追加し、以下の各VMのNICにセカンダリIPを追加/削除するスクリプトを登録します。
なお、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

また、複数のコンピュート・インスタンスでセカンダリIPを付与しないようにするために、コンピュート・インスタンス起動時にセカンダリIPを削除するスクリプトを作成し、ユニットファイルからそのスクリプトを実行します。
ユニットファイルは作成後、サービスとして登録し、有効化してください。

ユニットファイル (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

サービス実行時に実行されるスクリプト (secondary_ip_unassign.sh)

#!/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

なお、セカンダリIPを使用するリソースがある場合は、依存するリソースに上記で追加したexecリソースを設定します。

4. 動作確認

フェールオーバーの前後で、サーバーに付与したセカンダリIPに接続できることを確認します。

  • 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クラスターに接続できることを確認できました。

まとめ

今回はセカンダリIPを利用したHAクラスターの構築手順を紹介させていただきました。
HAクラスター対象のアプリケーションの要件などで、IPアドレスの区別が必要な場合は、本手順を参考にHAクラスターを構築ください。

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

参考

クラウド向けクラスター構築支援サービス(クラウドHAコンサル)を実施しています。
お問い合わせ先はこちら(info@clusterpro.jp.nec.com new window)

お問い合わせ

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