oracle12c
WindowsServer2012R2

Windows Oracle MSFC+OFS on ESXi 環境の構築

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 のバージョンによるもののようなので、ここでは無視してこの後の作業を続けた。

MSFC役割追加後のチェックでエラー.png

古いバージョン ( 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 を使用するため。

init{ORACLE_SID}.ORA
  SPFILE=I:\spfile{ORACLE_SID}.ora

$ORACLE_HOME/database 配下に作成されている SPFILE を、共有ディスクにコピーする。

10. グループにデータベースを追加

片方のサーバーで実行する。

データベースを作成すると、Fail Safe Manager の [使用可能なOracleリソース] に、追加したインスタンスが追加される。
このインスタンスを、事前に作成したグループに追加する。
このとき、共有ファイルに作成した PFILE が必要となる。

( ここが悩んだところ )
ただし、このままでは、Oracle サービスが起動したとき、元の SPFILE を見ているようで、OFS からの起動がエラーとなっているようだった。

( SPFILE が非共有ディスクにあるから N.G. のようなメッセージ。以下を参照 )

FS-10288.png

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 が別のサーバーで起動するようになっていればよい。

フェイルオーバーのデフォルト設定では、サービス停止は同じマシンで再起動を試みるようになっているので、停止検知即フェイルオーバーとなるようにパラメータを変更しておく。

param1.png

OFS からはここがうまく設定できなかったので、MSFC の側から設定を変更した。

途中、Oracle サービス停止によるフェールオーバーが、実行時エラー数超過で失敗するようになったので、フェールオーバーリトライ回数の設定を変更して確認した。

failoverRetrySetting.png

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