7
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?

ExaDB-XSの新機能「Automatic Failover(FSFO)」を試す - その2:フェイルオーバー

7
Posted at

はじめに

前回は、ExaDB-XSのData Guard GroupでOCI管理のAutomatic Failoverを有効化し、Fast-Start Failover(FSFO)が有効になっていることを確認しました。

今回は、プライマリ・データベースPの障害を模擬し、手動のフェイルオーバー操作を行わずに、Physical StandbyであるSが自動でプライマリへ昇格するかを確認します。

Automatic Failoverでは、OCI管理のObserverがプライマリとスタンバイを監視します。プライマリが利用不可と判断されると、FSFOがフェイルオーバーを実行します。

本記事は検証環境で実施した結果です。本番環境で同様の停止操作を実行する前には、業務影響、アプリケーションの接続方式、データ保護要件、復旧手順を十分に確認してください。

構成と試験条件

項目 内容
サービス Oracle Exadata Database Service on Exascale Infrastructure(ExaDB-XS)
Data Guardリソース Data Guard Group
データベース・バージョン Oracle AI Database 26ai 23.26.3.0.0
障害前のプライマリ P(Oracle RAC、2インスタンス)
障害前のスタンバイ S(Physical Standby、Oracle RAC、2インスタンス)
Protection Mode Maximum Performance
Redo転送 ASYNC
FSFO Enabled in Potential Data Loss Mode
Failover Target S
Observer OCI管理Observer
Failover Threshold 30秒
Lag Limit 30秒

今回の構成はMaximum Performance/ASYNCです。ASYNCは、プライマリの処理をスタンバイへのRedo到達完了まで待たせない非同期転送方式です。そのため、障害時には未転送Redoの範囲でデータ損失が起こる可能性があります。

Oracle公式ドキュメントでも、Maximum Performanceでのフェイルオーバーではデータ損失が発生する可能性があると説明されています。
Use Oracle Data Guard with Oracle Exadata Database Service on Exascale Infrastructure

試験前の確認

障害を模擬する前に、DGMGRLでFSFO、Observer、スタンバイのフェイルオーバー準備状態を確認しました。

show configuration verbose;
show fast_start failover;
show observer;
validate database verbose S;

主な確認結果は以下です。

Configuration Status:
SUCCESS

Fast-Start Failover: Enabled in Potential Data Loss Mode
  Active Target:      S
  Potential Targets:  "S"
    S                 valid
  Observer:           primary-5k524-1787101929052
  Shutdown Primary:   TRUE
  Auto-reinstate:     TRUE

Ready for Failover: Yes (Primary Running)
Apply State:         Running
Apply Lag:           5 seconds
Transport Lag:       0 seconds
Transport Status:    Success

この時点で、Sはフェイルオーバー・ターゲットとして有効であり、Redo Applyも実行中でした。

障害を模擬する

Pは2インスタンスのOracle RAC構成です。片方のインスタンスだけが停止してもデータベース全体としては稼働し続けるため、今回は両インスタンスを停止しました。

P側で、以下を実行します。

srvctl status database -db P
srvctl stop database -db P -stopoption ABORT
srvctl status database -db P

実行結果です。

Instance Primary1 is running on node momo1-beyai
Instance Primary2 is running on node momo2-uhszk

Instance Primary1 is not running on node momo1-beyai
Instance Primary2 is not running on node momo2-uhszk

-stopoption ABORTは、通常の停止処理を待たずにデータベースを停止する指定です。今回はプライマリが利用不可になった状況を明確に作るために使用しました。

重要な点として、手動のFAILOVER TO Sは実行していません。Sへの昇格がFSFOによる自動フェイルオーバーであることを確認するためです。

Sが自動昇格したことを確認する

P停止後、S側でDGMGRLを実行してBroker構成を確認しました。

show configuration verbose;
show fast_start failover;
show observer;

DGMGRLでは、SがPrimary databaseとして表示されました。

Configuration - primary_dgconf

  Members:
  S - Primary database

  P - (*) Physical standby database (disabled)
    ORA-16661: The standby database must be reinstated.

この時点で、旧プライマリPは障害状態のためdisabledなPhysical Standbyとして表示されます。これは、フェイルオーバー直後の旧プライマリが再参加できる状態になるまでの想定された表示です。

さらに、SでSQLを実行してデータベース・ロールとオープン・モードを確認します。

select database_role, open_mode
from v$database;

結果は以下でした。

DATABASE_ROLE     OPEN_MODE
----------------  --------------------
PRIMARY           READ WRITE

PRIMARY/READ WRITEであるため、Sが読み書き可能な新プライマリとして稼働していることを確認できました。

ここまでの結果から、PのRAC全インスタンス停止後、手動フェイルオーバーを実行することなく、SがFSFOによって自動昇格したと判断できます。

フェイルオーバー後、しばらくするとコンソールにも反映され、旧スタンバイは「無効化されたスタンバイ」と表示されます。

image (59).png

Oracle公式ドキュメントでも、Automatic Failoverを有効化した場合、プライマリが利用不可になるとOracleがスタンバイへのフェイルオーバーを開始すると説明されています。
Oracle Exadata Database Service on Exascale InfrastructureでのOracle Data Guardの使用

旧プライマリPを起動する

続いて、旧プライマリPを起動します。

srvctl start database -db P
srvctl status database -db P

起動後、旧Pで以下を実行します。

select database_role, open_mode
from v$database;

結果は以下でした。

DATABASE_ROLE      OPEN_MODE
-----------------  --------------------
PHYSICAL STANDBY   MOUNTED

PはPHYSICAL STANDBY / MOUNTEDとして起動しました。また、DGMGRLでも現在のロールは以下のとおりでした。

S - Primary database
P - Physical standby database

コンソールでもスタンバイに昇格したことが確認できます。

image.png

MOUNTEDは、Physical StandbyがRedo Applyを行う一般的な状態です。今回の結果から、旧Pはプライマリではなく、Physical Standbyのロールで起動・再参加したことを確認できました。

結果

成功したこと

  • PのRAC全インスタンスを停止して、プライマリ障害を模擬した
  • 手動のFAILOVER TO Sを実行しなかった
  • P停止後、SがPrimary databaseとして表示された
  • SでPRIMARY / READ WRITEを確認した
  • 旧Pを起動後、PHYSICAL STANDBY / MOUNTEDを確認した
  • OCI管理のAutomatic Failoverによるロール切替を確認できた

まとめ

ExaDB-XSのAutomatic Failoverを有効にしたData Guard Groupで、プライマリPのRAC全インスタンスを停止して障害を模擬しました。

結果として、手動のFAILOVER TOを実行せずに、Physical StandbyであったSがPRIMARY / READ WRITEへ自動昇格しました。これは、OCI管理ObserverとFSFOによる自動フェイルオーバーが動作したことを示していおり、正常にFSFOが動作していることが確認できました。

7
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
7
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?