株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

Dbvisit : スイッチオーバーとフェイルオーバーの比較

Dbvisit : スイッチオーバーとフェイルオーバーの比較

渡部です。Dbvisitは稼働中のOracleデータベースに対してスタンバイDBを作成して、高可用性構成を実現するソフトウェアです。

スタンバイDBを持つ高可用性構成における運用作業でスイッチオーバーとフェイルオーバーがあります。 スタンバイDBを持つ高可用性構成に馴染みのない方からすると、スイッチオーバーとフェイルオーバーの違いが理解しにくいように感じます。このため、本エントリでは、Dbvisitを前提にスイッチオーバーとフェイルオーバーについて記載します。

コーソルでは、Dbvisit Standbyの販売および設計、導入、製品サポートを行っています。Dbvisit Standbyをご検討の際はぜひコーソルにお声がけください。

スイッチオーバーとフェイルオーバーの比較

スイッチオーバーとフェイルオーバーの表形式で比較したのが以下のものです。

プライマリDBまたはプライマリサーバ全体に、突発的な障害が発生した時に使用するのがフェイルオーバー(failover)です。 プライマリDBはもはや使用できない状況にありますので、プライマリDBには頼らず、スタンバイDBだけでサービスを継続できる状態への復旧を目指します。

具体的には、スタンバイDBをプライマリDBに速やかに昇格させます。

Dbvisitの高可用性構成では、プライマリDBとスタンバイDB間の変更内容の伝搬はアーカイブログファイル単位で行われます。 このため、プライマリDBで突発的な障害が発生すると、プライマリDBからスタンバイDBに伝搬できない更新が発生します。これは、アーカイブログファイル単位で変更内容の伝搬を行う仕組み上、避けがたい制約です。よって、プライマリDBで更新SQLを実行してコミットが成功したにも関わらず、失われる更新が発生することになります(更新ロスの発生)。

一方、スイッチオーバーは、計画的にプライマリDBまたはプライマリサーバ全体を停止する場合に使用します。プライマリサーバのハードウェアメンテナンスや再起動を伴うOSアップデート、プライマリサーバが配置されているデータセンターの停止などが想定されます。

スイッチオーバーでは、更新ロスが発生しません

スイッチオーバーの動作

更新ロスを発生させないため、スイッチオーバーでは比較的複雑な処理が実行されます。

スイッチオーバーの全体の動きを図式化したのが以下の図です。

旧プライマリDBが新スタンバイDBとなります。再度スイッチオーバーして、元の構成に戻すことも可能です。

スイッチオーバーの実行中(図の②~④直前)は、一時的にアプリケーションがデータベースに接続できない状態になることに注意してください。

しかし、更新ロスは発生しません。スイッチオーバー前に、プライマリDBで更新SQLを実行してコミットが成功したならば、更新は決して失われることはありません。更新が失われないように、Dbvisitが内部処理を制御します。具体的には、スイッチオーバー処理の中でDbvisitが適切に全てのREDOログをプライマリDBからスタンバイDBに転送+適用してくれます。

フェイルオーバーの動作

フェイルオーバーの全体の動きを図式化したのが以下の図です。

すでに説明しましたが、フェイルオーバーは、 プライマリDBまたはプライマリサーバ全体に、突発的な障害が発生した時に使用します。 このため、プライマリDBはもはや使用できない状況にありますから、プライマリDBには頼らず、スタンバイDBだけでスタンバイDBをプライマリDBに速やかに昇格させて、サービスを継続できる状態とします。

プライマリDBで突発的な障害が発生すると、プライマリDBからスタンバイDBに伝搬できない更新が発生します。これは、アーカイブログファイル単位で変更内容の伝搬を行う仕組み上、避けがたい制約です。

スイッチオーバーの場合は、DbvisitがプライマリDBを制御して、全てのREDOログが失われないように動作します。しかし、フェイルオーバーはプライマリDBはもはや使用できない状況を想定した処理ですから、このようなことは実行できません。

また、フェイルオーバーを実行すると、旧プライマリDBはもはや使用できず、削除するしかありません。 このままですと、高可用性構成ではありません。高可用性構成に戻すには、新プライマリDBからスタンバイDBを作成する必要があります。

スイッチオーバー実行時の内部動作

スイッチオーバーに関する処理はDbvisitが自動的に実行してくれますが、実際の処理内容はなかなか煩雑です。

例えば、Dbvisitを使用せずに手動で行う場合(いわゆる基本スタンバイをツールなしで運用する場合)は、以下の処理を実行する必要があります。

  1. プライマリDBのshutdown
  2. プライマリDBの制御ファイル、spfile、オンラインREDOログファイルを別の場所に退避
  3. プライマリDBからスタンバイDBへscpコマンドなどで2. で退避したファイルとアーカイブログファイルをリモートコピー
  4. スタンバイDBで転送したアーカイブログファイルを適用
  5. スタンバイDBをshutdown
  6. スタンバイDBの制御ファイル、spfile、オンラインREDOログファイルをプライマリDBのものに差し替え
  7. スタンバイDBを読み書きモードでOPENし、新プライマリDBにロール変更
  8. 旧プライマリDBをstandby databaseとしてmountし、新スタンバイDBにロール変更

これらの処理をミスなく行うのはなかなか大変です。Dbvisitの有用性をご理解いただけるのではないでしょうか。

Dbvisitのスイッチオーバー画面遷移

Dbvisitでスイッチオーバーを実行したときの画面遷移を以下に示します。

Dbvisitのフェイルオーバー画面遷移

Dbvisitでフェイルオーバーを実行したときの画面遷移を以下に示します。

コーソルでは、Dbvisit Standbyの販売および設計、導入、製品サポートを行っています。Dbvisit Standbyをご検討の際はぜひコーソルにお声がけください。

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

68LD3LWce1j8

守田 典男

・新しもの好きな Oracle Fighter。
・保有資格 : ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ