grid infrastructureをGIと略します。
クラウドでの構築事例がないので検証してみました。
OracleRAC, SEHAの構築にはGIが必須ですが、AWS(EC2)/OCI(Compute)ではその仕様上構築ができません。
今回はWindowsServerで試しましたが、OS依存ではないところ(各クラウドサービスの仕様)で引っかかったため、RHELなどでも同様と思われます。
AWSで不可な理由
- EC2にサブネットを2つ持てないため
- GI要件で、2つ以上の異なるネットワークアドレスのIPが必要だが、AWSではEC2は1つのサブネット上に構築する仕様。そのため、EC2が複数のサブネットにまたがったり、構築されているサブネット以外のサブネットのネットワークインターフェースを追加することはできない
- というGIの制限はリファレンスではあるが、試しにネットワークインターフェースを追加して、2つのNICを持たせて(どちらも同じサブネット)、GIのインストールをしようとすると、パブリック/プライベートおよびASMの各サブネットを各ネットワークインターフェースに割り当てるところで、パブリック/プライベートおよびASMに割り当てようとしているネットワークサブネットが同じです、といったエラーメッセ-ジで先に進めない
- GI要件で、2つ以上の異なるネットワークアドレスのIPが必要だが、AWSではEC2は1つのサブネット上に構築する仕様。そのため、EC2が複数のサブネットにまたがったり、構築されているサブネット以外のサブネットのネットワークインターフェースを追加することはできない
- また、EC2上にvirtual boxやHyper-Vといった仮想サーバを立てることはできない。その制約から、virtual boxをインストールして仮想マシンを作成してみると、32bitのマシンしか選択できない。Hyper-Vは無効にされている。(BareMetalならできるのかもしれませんが試してません)
OCIで不可な理由
- 仕様上マルチキャスト/ブロードキャストが通らないため
- Computeではネットワークアドレスの異なる別サブネットのVNICを追加できるため、パブリック/プライベートおよびASM用のNIC割り当ての先まで進め、GIのインストール開始を走らせることができた。しかし、インストール中に、プライベートサブネットでマルチキャストとブロードキャストができないエラーがでてインストールがコケた。
Failures were encountered during execution of CVU verification request "stage -post crsinst".
Verifying Multicast or broadcast check ...FAILED
node2: PRVG-11352 : Interface "10.0.2.24" on node "node2" is not able to
communicate with interface "10.0.2.24" on node "node2" with broadcast
address "255.255.255.255"
node2: PRVG-11352 : Interface "10.0.2.209" on node "node1" is not able to
communicate with interface "10.0.2.24" on node "node2" with broadcast
address "255.255.255.255"
node1: PRVG-11138 : Interface "priv" on node "node2" is not able to communicate
with interface "priv" on node "node1" over multicast group "224.0.0.251"
node1: PRVG-11138 : Interface "priv" on node "node1" is not able to communicate
with interface "priv" on node "node1" over multicast group "224.0.0.251"
node1: PRVG-11138 : Interface "priv" on node "node2" is not able to communicate
with interface "priv" on node "node1" over multicast group "230.0.1.0"
node1: PRVG-11138 : Interface "priv" on node "node1" is not able to communicate
with interface "priv" on node "node1" over multicast group "230.0.1.0"
node1: PRVG-11352 : Interface "10.0.2.24" on node "node2" is not able to
communicate with interface "10.0.2.209" on node "node1" with broadcast
address "255.255.255.255"
node1: PRVG-11352 : Interface "10.0.2.209" on node "node1" is not able to
communicate with interface "10.0.2.209" on node "node1" with broadcast
address "255.255.255.255"
node1: PRVG-11138 : Interface "pub" on node "node2" is not able to communicate
with interface "pub" on node "node1" over multicast group "224.0.0.251"
node1: PRVG-11138 : Interface "pub" on node "node1" is not able to communicate
with interface "pub" on node "node1" over multicast group "224.0.0.251"
Verifying Single Client Access Name (SCAN) ...WARNING
node2: PRVG-11368 : A SCAN is recommended to resolve to "3" or more IP
addresses, but SCAN "node-cluster-scan" resolves to only "/10.0.1.233"
node1: PRVG-11368 : A SCAN is recommended to resolve to "3" or more IP
addresses, but SCAN "node-cluster-scan" resolves to only "/10.0.1.233"
- また、AWS同様、仮想化サーバがサポートされていないため、VirtualBoxで仮想マシン作成時に64bitを選択することができなく、Hyper-vも無効になっている。(こちらもBareMetalならできるのかもしれませんが試してません)
あとがき
AWS/OCIどちらも、共有ディスクの仕組み(AWSではEBS Multi Attach, OCIではブロックボリューム共有) があるのと、NIC/IPも複数持てるため、もしかしたらと思ったのですが、やはりGIの構築要件に適合することができませんでした。
そのため、GI(OracleRAC/SEHA)の構築/検証には今まで通りオンプレにESXi/Hyper-V/virtual box等仮想環境を立てるなどして行う必要がありそうです。
今回Azureは検証していません。Azureで、共有ディスク/異なるサブネットのNIC追加/プライベートサブネットでのマルチキャストとブロードキャスト等GIの要件を満たすことができれば、構築可能かと思います。
めも
- Active Directoryは立てず、VIPやSCANの名前解決は各ノードのhostsで行った
- OCIではこんな感じ(各ノードで同じ設定)
- node1, node2は各ノードのホスト名
10.0.1.132 node1 ※node1: Primary VNIC
10.0.1.201 node1-vip ※node1: Primary VNICのセカンダリIP
10.0.1.21 node2 ※node2: Primary VNIC
10.0.1.22 node2-vip ※node2: Primary VNICのセカンダリIP
10.0.1.233 node-cluster-scan ※node1: Primary VNICのセカンダリIP
10.0.2.209 node1-priv ※node1: 追加したVNICのIP
10.0.2.24 node2-priv ※node2: 追加したVNICのIP
-
OCIで追加したVNICを有効にするには、コンパネのネットワークアダプタで対象のネットワークインターフェースを有効化したあと、OCIで提供されているPowerShellスクリプトを実行する
secondary_vnic_windows_configure.ps1
-
OCIのWindowsServerではインスタンス作成時にホスト名を指定しても、実際のコンピュータに適用されない(無視されて、instance-202107のような感じになる)
- GIではホスト名で通信できる必要があるので、ホスト名を正しく設定する
- WindowsServerではWindows標準の手順で問題なかった(システムのプロパティからコンピュータ名を変更して再起動)。リファレンスではLinuxの手順しか存在しないので、本当に正しいかは不明
- LinuxではOS標準の設定に加え、/etc/oci-hostname.confを設定する必要がある
-
AWSではMulti AttachしたEBSは自動的にディスクの管理で認識される。OCIではiSCSIイニシエータの設定画面で認識設定をする。
- 認識後、簡単なDISKPARTまたはPowerShellコマンドでGIで利用可能なRAWデバイスとしてフォーマットできる(後述の参考サイトを参考にさせていただきました)
Get-Disk | Sort-Object Number
$Disk = Get-Disk -Number 1
$Disk | Initialize-Disk -PartitionStyle MBR
$Disk | New-Partition -MbrType Extended -UseMaximumSize
$Disk | New-Partition -UseMaximumSize
- クラスタノード選択画面でnode2を追加して進むときにユーザー等価チェックのエラーがでるときは、インストールユーザでのnode間の
net use \\nodex\c$
がうまくできていないので解決が必要。インストールユーザ以外の権限(アカウント)で張ってもだめ。 - GIインストーラでASMディスク作成画面でRAWデバイスを検出するためには、ディスクをスタンプをクリックして対象のRAWデバイスに対してスタンプ付けを行う必要がある
- 18c以降だとインストールバグがあるので対応必須
PRVF-0002 : COULD NOT RETRIEVE LOCAL NODE NAME
(インストーラに含まれる各バッチをエディタで開いて直す) - GIインストールエラーの切り分けで、vcruntime140.dll不足でCVUが実行できないって言ってたのでVC2019の再配布用パッケージ(VC_redist.x64.exe, 64bitの方)をインストールしてみたけど、あれは意味があったのだろうか(dllエラーは消えたけど、それが重要だったのかどうか不明。あとCVU(-verifyオプション)手動で実行してみたけど動かない。これWindowsで単体で使えるんだろうか)
- なんだかんだactive directory立てちゃったほうが楽
- OCIのDBサービスはRACなので、マネージドであるDBサービス内ではマルチキャスト/ブロードキャストが許可されていると推測
- AWSでも検索すると非公式でOracleRACのAMIとかあるんだけどこれはどうやって動いてるんだろう
参考
OCI よくある質問
https://www.oracle.com/jp/cloud/networking/virtual-cloud-network-faq.html
VCN内でのIPマルチキャストまたはブロードキャストはサポートされていますか?
いいえ、今のところサポートしていません。
参考にさせていただいたサイト
https://blog.shibata.tech/entry/2015/09/17/221849