[OCI]Windows Server上でのセカンダリIPアドレスのフェイルオーバーの自動化 (2020/07/30)

Windows Server上でのセカンダリIPアドレスのフェイルオーバーの自動化 (2020/07/30)

https://www.ateam-oracle.com/automating-secondary-ip-address-failover-on-windows-server
投稿者:Leo Yuen | Cloud Solutions Architect
前回のブログでは、可用性の高いWindowsファイルサーバをOCI上に配置して、
SMBファイル共有機能を必要とするワークロードをOCI上で動作させる方法を紹介しました。
しかし、肝心の部分は詳しくは書いていませんが、フェイルオーバーイベントが発生した際のセカンダリIPアドレスのフェイルオーバー処理を自動化する方法です。
このブログでは、ゼロからスクリプトを作成するのではなく、
この機能を実現するために、Oracleが提供するGitHub上の既存のリポジトリにあるスクリプトを修正する方法を紹介します。

必要な変更の詳細に飛び込む前に、リポジトリの前提条件のセクションに沿って環境を設定してください。
前提条件のセクションに記載されているタスクを完了したら、環境にPythonとOCI SDKを用意しておく必要があります。

スクリプトの設定を簡単にするために、フェイルオーバークラスタ内の2つのWindowsインスタンスを含む動的グループをセットアップし、
それらのインスタンスがOCI APIコールを行えるようにすることをお勧めします。

両方のクラスタノード上の "C:\oci-msfailovercluster "というディレクトリにスクリプトを配置したと仮定します。



今回修正するスクリプトは、"oci-mscluster-instance-principals.py "と呼ばれるものです。
このスクリプトの機能は、"oci-mscluster.py "と呼ばれるものと同等ですが、
唯一の違いは、一方がOCI APIコールを呼び出すための認証方法としてインスタンスプリンシパルを使用するのに対し、他方は代わりに設定ファイルを使用することです。

ここでは、私たちが通過する必要がある全体的なステップを示します。

  1. セカンダリ IP アドレスを設定/解除するためのスクリプトの作成と設定
  2. セカンダリIPアドレスのフェイルオーバーを処理するために、"oci-mscluster-instance-principals.py "スクリプトを修正
  3. settings.jsonを修正して、新しいパラメータを追加
  4. スクリプトを他のノードにコピー

それぞれのステップを詳しく見ていきましょう。


1. セカンダリIPアドレスを設定/解除するスクリプトの作成と設定

下のスクリーンショットのような内容の "set-secondary-ip.ps1 "というスクリプトを作成し、既存のスクリプトがあるディレクトリに保存します。
この例では、"C:\oci-msfailovercluster "となっています。


パラメータ $NetAdapterName に、ご使用の環境のネットワークアダプタの名前を設定します。
名前を取得するには、 powershell コマンド "Get-NetAdapter" を使用します。


IP および $MaskBits に、それぞれセカンダリ IP アドレスとそのネットワーク・マスクを設定します。

以下のスクリーンショットに示す内容の "remove-secondary-ip.ps1" というスクリプトを作成し、既存のスクリプトが置かれているのと同じディレクトリに保存します。
この例では、"C:\oci-msfailovercluster "となります。

パラメータ $NetAdapterName と $IP をそれに応じて構成します。

2. セカンダリIPアドレスのフェイルオーバーを処理するために、スクリプト "oci-mscluster-instance-principals.py "を修正

1. セカンダリIPアドレスのOCIDを保持するために、"private_ip_id "という新しいパラメータを追加します。
28行目で、以下の行を修正します。
list = ['node1_name', 'node2_name', 'private_ip_id_default_cluster', 'vnic_1', 'vnic_2']
以下に変更
list = ['node1_name', 'node2_name', 'private_ip_id_default_cluster', 'vnic_1', 'vnic_2', 'private_ip_id']

2. 64行目の後に次の行を追加します。
private_ip_id = str(settings['private_ip_id'])

3. "first_contact "と呼ばれる関数を探して、86行目から始まるコードのブロックを変更して、新しい行が太字になっている次のようにします。

if var1.startswith(default_cluster_name):
var2 = str(var1.split()[int(len(default_cluster_name.split(" ")))])
if var2 == node1_name or var2 == node2_name or var2 == skip_dr_node_name:
history_nodes.append(var2)
print ('New MASTER DEFAULT NODE detected --> ' + var2)
error_log('New MASTER DEFAULT NODE detected --> ' + var2)
if var2 == node1_name:
assign_to_different_vnic(private_ip_id_default_cluster, vnic_1)
assign_to_different_vnic(private_ip_id, vnic_1)
elif var2 == node2_name:
assign_to_different_vnic(private_ip_id_default_cluster, vnic_2)
assign_to_different_vnic(private_ip_id, vnic_2)
elif var2 == skip_dr_node_name:
pass
if var2 == os.environ['COMPUTERNAME'].lower():
error_log('Setting secondary IP address')
subprocess.Popen(['C:\\windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe',
'C:\\oci-msfailovercluster\\remove-secondary-ip.ps1'],
shell=True,
stdout=subprocess.PIPE)
subprocess.Popen(['C:\\windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe',
'C:\\oci-msfailovercluster\\set-secondary-ip.ps1'],
shell=True,
stdout=subprocess.PIPE)
error_log('secondary IP address configured!')
else:
error_log('Removing secondary IP address')
subprocess.Popen(['C:\\windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe',
'C:\\oci-msfailovercluster\\remove-secondary-ip.ps1'],
shell=True,
stdout=subprocess.PIPE)
error_log('secondary IP address removed')


4. スクリプト内の "While True "ループを見つけ、135行目から始まるコードのブロックを前のステップでリストされているものと同じに修正します。

3. "settings.json "を修正して、新しいパラメータを追加

「private_ip_id」という新しいパラメータを追加し、環境に合わせてOCIDを指定します。

新しいパラメータの上の行の最後にカンマを付けることを忘れないでください。

4. スクリプトを他のノードにコピーします。

修正したスクリプトとsettings.jsonをすべて別のノードにコピーします。

最後に、両クラスタノードのタスクスケジューラにスクリプト「oci-mscluster-instance-principals.py」を登録し、実行されていることを確認します。

これで、すべての準備が整い、WindowsクラスタがセカンダリIPアドレスのフェイルオーバーを自動的に処理できるようになりました。

コメント

このブログの人気の投稿

Oracle RACによるメンテナンスのためのドレインとアプリケーション・コンティニュイティの仕組み (2023/11/01)

Oracle Cloud Infrastructure Secure Desktopsを発表: デスクトップ仮想化のためのOracleのクラウドネイティブ・サービス (2023/06/28)

新しいOracle Container Engine for Kubernetesの機能強化により、大規模なKubernetesがさらに簡単になりました (2023/03/20)