6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-04-09

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

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?