Windows Oracle MSFC+OFS on ESXi 環境の構築
仕事上、Oracle HA 環境を作ることになったので、その時やった作業についてのメモを残します。
1. サーバー環境の設定
ESXi に仮想サーバーを 2 台 ( サーバーA, B ) を作成する。
ハードディスク
サーバーA 側には、投票ディスク、データディスクの 2 つのハードディスクを追加する。
サーバーA
SCSI(0:0) OS 用
サイズ: 100 GB
プロビジョニングタイプ: Thin Provision
SCSI コントローラタイプ: LSI Logic SAS
SCSI バスの共有: なし
SCSI(1:0) 投票ディスク用
サイズ: 40 GB ( これは多くても数 GB 程度でよさそう )
プロビジョニングタイプ: シックプロビジョニング ( Eager Zeroed )
モード: 独立型 ( 通常 )
SCSI コントローラタイプ: LSI Logic SAS
SCSI バスの共有: 物理
SCSI(2:0) データディスク用
サイズ: 40 GB
プロビジョニングタイプ: シックプロビジョニング ( Eager Zeroed )
モード: 独立型 ( 通常 )
SCSI コントローラタイプ: LSI Logic SAS
SCSI バスの共有: 物理
サーバーB
基本的にサーバー A と同じ。
SCSI(1:0),SCSI(2:0) は、作成時に、[既存の仮想ディスクを使用] で、サーバーA で
作成したディスクを選択する。
ネットワーク
パブリックネットワーク、プライベートネットワーク用に 2 つを設定する。
今回作った環境では、VN Network, RAC Internal の 2 つを使った。( RAC 環境と同じものを使ったため )
ネットワークの設定は、ESXi サーバー自身のプロパティ > 構成 から行う。
アダプタタイプ: E1000E ( これは環境によって変わるものだと思う。 )
CPU
各サーバーに 1 ソケット 2 コアを割り当てる。
メモリ
各サーバーに 6 GB を割り当てる。
2. AD 環境の設定
Active Directory も必要なため、サーバーがないときはこれも合わせて作っておく。
ドメインユーザーには、Domain Admin の権限を付けておく。
ここでは、ドメインを test、ドメインユーザーを cluster とする。
3. OS のインストール
Windows Server 2012 R2 を使った。
インストール後、次の設定をする。
-
マシン名を分かりやすいものに変更する。( デフォルトのものは分かりにくい。)
-
時刻設定の NTP サーバーを変更する。( 社内のサーバーに合わせて。)
-
投票ディスク、データディスクを NTFS でフォーマットして、両方のサーバーで同じドライブレターを割り当てる。
今回は、投票ディスク用に H、データディスク用に I を割り当てた。 -
ネットワーク名を両サーバーで同じになるように変更する。( Public ( VN Network )、Private ( RAC Internal ) )
ネットワークアドレス:
サーバーA: (Public) 172.18.101.51 (Private) 10.0.0.51 (DNS1) AD の IP アドレス (DNS2) 通常の DNS の IP アドレス
サーバーB: (Public) 172.18.101.52 (Private) 10.0.0.52
Private ネットワークの、NetBIOS over TCP/IP を無効にする。
ネットワークアダプタの詳細設定で、ネットワークのバインド順を 1.Public 2.Private、1.インターネット プロトコル バージョン 4 2.インターネット プロトコル バージョン 6 に変更する。
一通りの設定が終わった後で、コンピュータをドメインに参加させる。
ファイアウォール設定をすべて ( ドメイン、パブリック、プライベート ) 無効にする。
4. MSFC のインストール
両方のサーバーの電源を OFF にして、最初のサーバーのみ再起動する。
サーバーマネージャ > 管理 > 役割と機能の追加 > 機能 から
フェールオーバークラスタリング
マルチパス I/O ( いるかどうかわからなかったが一応入れた。iSCSI とか使うなら必要。 )
をインストールする。
フェールオーバークラスタマネージャより、MSFC が稼働していることを確認する。
もう一台のサーバーも再起動して、同様に MSFC をインストール、確認する。
1 台目のサーバーで、新しいクラスタを作成する。
作成後のチェックでこのようなエラーが出ていたが、ESXi のバージョンによるもののようなので、ここでは無視してこの後の作業を続けた。
古いバージョン ( MSCS ) では、ネットワークなど細かく設定する必要があったようだが、今回の MSFC では、インストールのみで、適切な設定がされているよう。
5. Oracle のインストール
両方のサーバーで、Oracle のアプリケーションのみをインストールする。
インストール先は、ローカルディスク ( C: など ) にする。
6. Oracle Fail Safe のインストール
両方のサーバーで、標準インストールする。
インストールは 1 サーバーずつ、インストール完了後、再起動してから次のサーバーのインストールをする。
ドメインユーザー:test\cluster
7. MSFC/OFS のグループを作成
片方のサーバーのみで実行する。
フェイルオーバークラスタマネージャー > { クラスタ名 } > 役割 > 役割の構成より新しい役割を作成する。
この役割が、OFS 側で見ると、グループになる。
後の作業で、このグループに仮想 IP アドレス ( 172.18.101.54 ) を設定するため、この対応を hosts ファイルに追加する。( 両方のサーバーで )
8. データベースを作成
片方のサーバーのみで実行する。
DBCA を使って、データベースを作成する。
データは共有ディスク ( I: ) の直下に配置するため、デフォルトで環境変数 ( ORACLE_BASE, ORACLE_HOME ) を使っているところを変更する。
インストール後、Oracle のサービスを停止する。
9. OFS 用 PFILE の作成
OFS では、Oracle 起動に PFILE を使う。
共有ディスクに、PFILE ( init{ORACLE_SID}.ORA ) を作成する。 <= OFS で PFILE を使用するため。
SPFILE=I:\spfile{ORACLE_SID}.ora
$ORACLE_HOME/database 配下に作成されている SPFILE を、共有ディスクにコピーする。
10. グループにデータベースを追加
片方のサーバーで実行する。
データベースを作成すると、Fail Safe Manager の [使用可能なOracleリソース] に、追加したインスタンスが追加される。
このインスタンスを、事前に作成したグループに追加する。
このとき、共有ファイルに作成した PFILE が必要となる。
( ここが悩んだところ )
ただし、このままでは、Oracle サービスが起動したとき、元の SPFILE を見ているようで、OFS からの起動がエラーとなっているようだった。
( SPFILE が非共有ディスクにあるから N.G. のようなメッセージ。以下を参照 )
SQL> show parameter spfile
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
spfile string
C:\APP\CLUSTER\PRODUCT\12.1.0\
DBHOME_1\DATABASE\SPFILEORA121
02.ORA
そのため、oradim プログラムを使って、両方のサーバーで、Oracle インスタンス起動時の PFILE パラメータを追加した。
c:\app\cluster\product\12.1.0\dbhome_1\BIN>oradim -edit -sid ora12102 -pfile I:\
initORA12102.ORA
Oracle サービスを起動して、共有ディスク上の SPFILE が参照されていることを確認する。
SQL> show parameter spfile
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
spfile string
I:\SPFILEORA12102.ORA
この状態で、Oracle サービスを再度停止して、OFS グループ追加を再実行する。
ここまでで完了。
11. 確認
Oracle が稼働しているサーバーで、Oracle サービス ( OracleService{ORACLE_SID} ) を停止してみる。
これで、Oracle が別のサーバーで起動するようになっていればよい。
フェイルオーバーのデフォルト設定では、サービス停止は同じマシンで再起動を試みるようになっているので、停止検知即フェイルオーバーとなるようにパラメータを変更しておく。
OFS からはここがうまく設定できなかったので、MSFC の側から設定を変更した。
途中、Oracle サービス停止によるフェールオーバーが、実行時エラー数超過で失敗するようになったので、フェールオーバーリトライ回数の設定を変更して確認した。
12. Appendix
事後確認で、サーバーA を停止して、サーバーB へのフェールオーバーを確認したところ、フェールオーバー後、Oracle への接続ができなかった。
( ORA-12560: TNS: プロトコル・アダプタ・エラーが発生しました。 )
レジストリを見てみると、サーバーB の方だけ、ORACLE_SID のキーが設定されていなかった。
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1
サーバーA と同じ値を設定することで、起動できるようになった。
ORACLE_SID キーがなかった理由・原因は不明。
環境設定後、再度 dbca コマンドでデータベースを作ろうとした可能性があり、ここで ORACLE_SID が削除されてしまった可能性がある。
複数インスタンスを登録しようとしたとき、この値が、新しいものに変わったりしていたので、その辺が怪しい。
とりあえずは、作業ミスと思われる。
参考
意外と簡単!? Windows ソリューション - Oracle Fail Safe 編 -
http://otndnld.oracle.co.jp/easy/win_solution/ofs/
Oracle Databaseプラットフォーム・ガイド
12cリリース2 (12.2) for Microsoft Windows
ORADIMを使用したOracle Databaseインスタンスの管理について
https://docs.oracle.com/cd/E82638_01/NTQRF/about-administering-an-oracle-database-instance-using-oradim.htm
@IT SQL Serverトラブルシューティング(11)
SQL Serverが正しく再起動しなくなってしまった ( 起動トラブル )
http://www.atmarkit.co.jp/ait/articles/1608/03/news044.html#l_si_sqls-11-03.jpg