ラベル Windows Oracle の投稿を表示しています。 すべての投稿を表示
ラベル Windows Oracle の投稿を表示しています。 すべての投稿を表示

2021年8月14日土曜日

(その6)Nutanix環境上にLife Keeper for Windowsを利用したOracleのHAクラスターを作成する

前回までに、LifeKeeperでのOracleインスタンスの保護が完了しました。またアクティブなサーバーに障害が発生した際にもスタンバイサーバーでサービスが再起動し、クライアントから仮想IPに対して接続が出来ることを確認できれば、これで問題ないと思います。

これで作業は終わりと思われたかともしれませんが、細かい設定事項をいくつかお知らせします。


26.アンチアフィフィニティの設定

今回アクティブのサーバーとスタンバイのサーバー2台の仮想マシンを作成しましたが、2台の仮想マシンが、同一のNutanix上で稼動するホストで動作していた場合、物理ホストに障害が発生すると、ハイパーバイザーのHAが稼動し別のホストで仮想マシンが再起動します。別にこれであっても問題があるわけではありませんが、2台のサーバーが同時に落ちてしまい、ハイパーバイザーのHAでOSから再起動する時間を考えると、2台の仮想マシンは別のホストで稼働し、仮にアクティブなサーバーが稼動する物理ホストが落ちてもすぐに他の物理ホストで稼動していたスタンバイサーバーに切り替わる方が、より早くサービス復旧が可能となります。

このような、2台のサーバーを同じ物理ホストで稼働させない設定を行うことが出来ます。
vSphereの場合、Enterprise Plusに搭載されるDRSの中にある機能で、AHVの場合は、ADSの機能でそれぞれアンチアフィニティールールで設定を行います。

今回は、AHVでの設定をご紹介します。

まず、CVMにSSHで接続します。

SSHでacliコマンドレットに入り、以下のコマンドを入力します。

acli
vm_group.create oraclelk
vm_group.add_vms oraclelk vm_list=ORACLE19C-LK01,ORACLE19C-LK02
#保護対象の「ORACLE19C-LK01」と「
ORACLE19C-LK02」をグループに入れる
vm_group.antiaffinity_set oraclelk
exit

これで、「ORACLE19C-LK01」と「ORACLE19C-LK02」が同一のサーバーで稼動しない設定が完了しました。

Prismを見ると2台の仮想マシンが別のホストで稼動していることが分ります。


なお、意図的にライブマイグレーションを行い、アフィニティールール違反を起こすと、一時的に同一物理ホストで2台の仮想マシンが稼働しますが、しばらくするとADSが発動し自動的に別々の物理ホストに仮想マシンがライブマイグレーションされます。



27.サービス起動順序の制御

スタンバイのサーバーを再起動すると、環境によっては本来アクティブなホストしかアクセスできない共有ドライブにアクセスが出来てしまう事象があります。

スタンバイのサーバーで共有ドライブ自体は、読み取り専用になっておりファイルを書き込むことは出来ませんが、中身がのぞけてしまうのは些か気持ちが悪いところがあります。

▼スタンバイサーバーで共有ディスクの中を開きファイルをコピーしたらアクセス権がないと言われる

これは、LifeKeeperのサービスが共有ストレージが見えるタイミングに問題があります。

イベントログを見てみるとNutanixからiSCSIで提供される共有ボリュームである、Oドライブのアクセスに失敗しているのが分ります。


これは、WindowsのiSCISイニシエーターである「Microsoft iSCSI Initiator Service」が、LifeKeeperのサービスよりも後に起動することにより、LifeKeeperのサービスが共有ストレージの制御に失敗していることを表しています。

LifeKeeperの古いドキュメントを読んでいると、LifeKeeperのサービスをiSCSIイニシエーターサービスとの依存関係を作成するような手順も紹介されていますが、私が確認する限り依存関係を作ってもこの事象は、解決しませんでした。

そのため以下のようなバッチファイルを作成し、これをスタートアップスクリプトとして設定することで対処を行います。
この作業は、2台ある仮想マシンそれぞれ両方で行います。

バッチファイルは、「c:\admin\lkstart.bat」とします。

net start "Microsoft iSCSI Initiator Service"
timeout /t 10 /nobreak > nul
net start "LifeKeeper External Interface"
timeput /t 5 /nobreak > nul
net start "LifeKeeper"


サーバー側にバッチファイルを作成する


次に、ローカルグループポリシーエディタを開き、スタートアップスクリプトを設定します。
まず、ファイル名を指定して実行から「gpedit.msc」開き、ポリシーエディターを開きます。


コンピューターの構成→Windows の設定→スクリプトから、スタートアップで、先程作成したスクリプトを登録します。


この設定後、iSCSIイニシエーターやLifeKeeperのサービスを自動起動から手動起動にに変更します。

これで設定は完了です。

懸念展としては、SPFILEやPWDファイルが、仮想マシンそれぞれで保持されていることにあります。Windowsも現在ではシンボリックリンクの作成が可能ですので、SPFILEやPWDファイルも共有ドライブに配置し、シンボリックリンクで各サーバーの場所から見えるようにすることも検討する必要があります。





2021年8月13日金曜日

(その5)Nutanix環境上にLife Keeper for Windowsを利用したOracleのHAクラスターを作成する

前回までにデーターベースインスタンスを2台のサーバーでそれぞれ作成をしました。

今回は、より調整事項やLifeKeeperでOracleインスタンスを管理するための細かい設定に入っていきます。

22.権限設定

1号機でデーターベースインスタンスを作成後、作成したDBFやCTLファイルといった共有ドライブに作成されたファイルを全て削除し、2号機で1号機で作成したパラメーターと揃えて再び共有ドライブにデーターベースを作成しました。

この2号機で作成したデーターベースファイルを1号機でもマウントし、正常に稼動させる必要があります。

まずは、現在2号機で稼動しているOracle系の全てのサービスを停止します。


LifeKeeperの管理画面で現在2号機がアクティブになっているのを、1号機をアクティブに変更します。


切り替えると「ORACLE19C-LK01」がアクティブになります。


では、1号機でOralceのインスタンスとリスナーのサービスを起動してみます。


Oracleのインスタンスが起動したら、SQLPlusで、OS認証を使ってログインします。
ここで試しに、「alter database open」コマンドを実行し、データーベースがオープンされているかを確認しておきます。こちらの画面では正常にOpenされていることが分ります。


この際にうまくデーターベースがOpen出来ないケースがあります。これは、Workgroup特有で起きる事象なのですが、1号機のoracleユーザーで作成後、2号機のoracleユーザーで再度インスタンスを再作成したため、ADではなく、Workgroupの場合、1号機と2号機で同じoracleユーザーであってもアカウントが別物であるため、2号機で再作成した後、1号機のoracleユーザーで権限が正常に設定されていないことがあります。
この場合は、Oドライブ及びPドライブを1号機で開き、oracleユーザーに対して権限を付与し、1号機、2号機のどちらのoracleユーザーでもアクセスできるようにすることで対応します。

▼Oドライブのデーターベースファイルが格納される場所に、「oracle」ユーザーのフルコントロールが必要


1号機でうまく動作しなかった場合、権限付与後再度Oracleのインスタンスサービスを再起動し、正常にデーターベースが起動したことを確認して下さい。


23.PDBの自動起動(任意)

今回コンテナデーターベースで作成をしています。フェールオーバーした際にコンテナデーターベースを手動で起動するは面倒ですので、自動起動するように設定を入れます。

具体的には以下の手順で行います。

sqlplus / as sysdba
alter pluggable databse pdb open;
alter pluggable databse all save state;


これで、フェールオーバー時もPDBも自動で起動できるようになりました。


24.リスナーの設定

LifeKeepeerの仕様で、リスナー名とSID名が同一である必要があるという仕様条件があります。現在はLISTENERという名称でリスナーができているため、リスナー名をORACLE_SIDと同じORCLに変更します。

この作業は、2台のサーバーそれぞれで2台とも行ってください。

まずNet Configuration Assistantを起動します。


ウィザードに従いリスナーの削除・追加を行います。







これで既存リスナーは削除されました。続いて新しいリスナーを作成します。


ここでは、リスナー名はORACLE_SIDと同じ名称にします。
Oraclホームユーザーは、Windowsで作成したOracleユーザーのパスワードとなります。






これでLISTNERの作成は完了です。

次にリスナーのリッスンアドレスの設定を行います。

LifeKeeprの資料を見ると、Oracleのリスナーで設定するIPアドレスは、LifeKeeperが提供する”仮想IP"を指定する必要があると記載されています。

しかし、Windows版のOracleの場合、リスナー名をホスト名しないと動作せず、IPアドレスで記載をした場合は、正常にリッスン出来ません。

▼tnsnames.oraのホストをLifeKeeperの仮想IPにした場合


▼「lsnrctl status」でリスナー状態を見たとき


▼tnsnames.oraを本来のホスト名で設定した場合

▼正常にリッスンしている


このことから、Windows版のOracleの場合、ホスト名でないと正しくLISTENERでリッスンしてくれないようです。一方で、LifeKeeperのOracleResourceKitを利用する場合、VIPのみをLISTENERで認識させるようにしないと、正常に動作しません。

そのため、hostsファイルに仮想のホスト名を付与し、そこにLifeKeeperで設定した仮想IPを付与することで、明示的にホスト名からVIPを割り出すようにさせます。

hostsファイルは2台のサーバーそれぞれで2台とも行って下さい。

編集ファイル「C:\Windows\System32\Drivers\etc\hosts」


この上で、listner.oraファイルもリッスンホストをこの仮想ホスト名にします。

listener.oraの変更は、2台のサーバーそれぞれで、2台とも行って下さい。

編集ファイル「%ORACLE_HOME%\network\admin\listener.ora」
(この場合は、d:\app\oracle\product\19.0.0\dbhome_1\network\admin\listener.ora)


このセッテを行った後、LifeKeeperのアクティブ系のホスト(この場合ORACLE19C-LK01)のリスナーを再起動し、「lsnrctl status」コマンドやOracle Net Configuration Assistantなどを利用し、正常にリッスン・接続できることを確認します。

正常に接続できたことを確認した上で、スタンバイ機に切り替え、再度Oracleインスタンスとリスナーを起動します。



切り替えてアクティブになったマシンで、再度Oracleサービスを起動し、Oracle Net Configuration Assistantなどを利用し、正常に接続できることを確認します。


これでLISTENERの設定は完了です。


24.OracleサービスをLifeKeeperで保護する

最後に、LifeKeeperでOracleサービスを保護する設定を入れます。

現在2号機がアクティブになっていますので、1号機をアクティブに切り替えます。(Oracleサービスをすべて停止したうえで1号機への切り替えを行ってください

切り替え完了後、1号機のLifeKeeperの管理画面からツールバーからリソース追加のボタンをクリックします。



プライマリは「ORACLE19C-LK01」、スタンバイは「ORACLE19C-LK02」で設定します。


保護するアプリケーションで「Oracle」を選択します。


ORACLE_HOMEを選択します。


SIDを選択します(今回はORCL)


Oracleの管理者ユーザーを入力します。(SYSTEMユーザー)


SYSTEMアカウントのパスワードを設定します。(今回は、Nutanix4u-)


オプショナルサービスが出てきますので、ScheduleORCLを選択し次に進みます。


タグ名称(表示名)の設定が表示されます。今回はSIDであるORCLのまま次に進みます。


Succesfullyになっていることを確認し次に進みます。

拡張前スクリプトもSuccessfulであることを確認し次に進みます。もしここでエラーになる場合、スタンバイクラスターのリスナー名がORACLE_SIDと同じになっているかを今一度確認します。


優先度の設定はデフォルトのまま次に進めます


設定が行われます。completedになっていることを確認し、終了します。


これでクラスターの作成は完了しました。仮想IPアドレスに紐づけていた、OドライブとPドライブがOracleインスタンスはいかにも紐づいてしまっているため、仮想IPアドレスからOドライブとPドライブの依存関係を解除します。
まず、仮想IPである「192.168.32.95」を右クリックし、依存関係の削除をクリックします。


依存関係を削除するサーバーを選択します。ここでは、サーバー「ORACLE19C-LK01」を選択し、次に進めます。


まずPドライブを依存関係から外します。


依存関係を削除します。


Successfulになっていることを確認し、完了します。


同様にOドライブも同じ操作で、依存関係を削除して下さい。
依存関係の削除が完了するとLifeKeeperの設定は以下の通りとなります。


これでLifeKeeperの設定は完了です。

クライアントから、LifeKeeprで接続した仮想IPでTNS接続識別子を作成後、アクティブになっているホストでoracle.exeを強制終了させたり、ホストを強制的にストップするなどして、クライアントから正常にOracleインスタンスに接続が出来るかのテストおをこないましょう。


次回は、LifeKeeperを稼動させるための諸設定をご紹介します。