もしもみなみんがDBをクラウドで動かしてみたら 連載Indexページ
※本記事は2020/04/20時点のものになります
みなさん、こんにちは。
先日、Database Cloud Service(DBCS)とExadata Cloud Service(ExaCS)で、リージョン間での自動Data Guard機能がリリースされました!日本国内であれば、東京-大阪リージョン間での冗長構成が簡単に組めるということですね。今回のテーマは、その自動Data Guard機能について解説していきます。
目次
Oracle Data Guardとは、変更履歴(REDO)を利用して自動でリアルタイム・データベース複製を持つことが出来る機能です。この機能を利用することによって、データベース障害やリージョン障害などのRTO/RPOを短くすることができ、広範囲な計画停止(メンテナンス)においても切り替えることによって停止時間を極小化することが可能です。バックアップを取得していても、有事の際の復旧において、大量データのリストアが必要になる場合ではRTOを満たせないケースもあります。こういったケースに備えて、バックアップだけでなく、すぐに切り替えられるスタンバイを持つことは重要です。災害対策(DR)としてのデータ保護はもちろんのこと、移行やアップグレードの停止時間短縮といった利用用途もあります。また、参照専用として利用可能なActive Data Guardにしたり、一時的に読み書き可能なスナップショット・スタンバイとして利用したりと、普段から利用できるスタンバイ・データベースを持つことができます。参照処理をオフロードしたり、この仕組みを応用してデータ破損が検知された場合にクライアントにエラーを返すことなく自動修復をしてくれる自動メディア・ブロックリカバリ機能も使えるため、Data Guardであればスタンバイのリソースも有効活用してROIを高めつつ、きちんと切り替えられるスタンバイを持つということが可能です。
Oracle Cloud上でData Guardを利用する際の基本的な構成については、大きく分けて3つのパターンがあります。
クラウドの画面上から、(1) 同一リージョン内と(2) 別リージョン間でのData Guard構成が、簡単に構築・管理が可能です。(3)のハイブリッドの場合は、手動で構成が必要となりますが手順を解説したホワイト・ペーパーがあるのでご参照ください。
まずは、構築するにあたり前提条件を確認してみましょう。
1) Data Guard/Active Data Guardを使うのに必要なエディション
2) Oracle Cloudのインフラ側の前提条件
3) DBCSとExaCSのDBシステム側の前提条件
3のDBシステム側の前提条件を満たせない構成の場合、手動でData Guardを構築することは可能です(1と2は必須)。例えば、2つ以上のスタンバイを持ちたい場合や、DBCSとExaCS間などです。なお、(*)が付いている条件はOracle Data Guardとしての前提条件になります。
DBCSとExaCSで作成手順が少し異なるので、それぞれの大まかな流れを最初に説明します。
・DBCSの場合
・ExaCSの場合
それでは、それぞれのサービスごとに作成していきましょう。上記の手順1のDBシステムは作成済として、2の部分を解説します。
1.プライマリDBシステム上のプライマリ・データベースの『データベース詳細』ページから、『Data Guardアソシエーション』を選択
2.『Data Guardの有効化』をクリック
3.スタンバイDBシステムとデータベースの情報を入力
ピアDBシステムの作成(スタンバイDBシステム)
スタンバイ・データベースの構成
4.作成された構成を確認
今回は、同一リージョン内(アシュバーン)で作成してみました。下の画面イメージは、東京リージョンのプライマリDBシステム側でData Guardアソシエーションを確認した画面です。
1.プライマリDBシステム上のプライマリ・データベースの『データベース詳細』ページから、『Data Guardアソシエーション』を選択
2.『Data Guardの有効化』をクリック
3.スタンバイ・データベースの情報を入力
ピアDBシステムの選択(スタンバイDBシステム)
スタンバイ・データベースの構成
4.作成された構成を確認
DBCSでは同一リージョン間で構成したので、ExaCSは別リージョン間(東京-大阪間)で作成してみました。下の画面イメージは、東京リージョンのプライマリDBシステム側でData Guardアソシエーションを確認した画面です。ピア・データベースとして、大阪リージョンにあるDBシステムにスタンバイ・データベースが作成されていることを示しています。
自動Data Guard機能で構築されると、下記の状態で構成されます(2020/04時点)
DBCSのOS上のコマンドツールはdbcli、ExaCSのOS上のコマンドツールはdbaascliが用意されており、rootユーザーでData Guard関連の管理や操作も可能です。
・DBCSのコマンドツール dbcliでの、Data Guard構成確認 マニュアル
# /opt/oracle/dcs/bin/dbcli list-dgconfigs # /opt/oracle/dcs/bin/dbcli describe-dataguardstatus -i <ID>
# /opt/oracle/dcs/bin/dbcli list-dgconfigs ID Name Database Name Role Protection Mode Apply Lag Transport Lag Apply Rate Status ---------------------------------------- -------------------------------- -------------------- ---------- ------------------ --------------- --------------- --------------- ---------- f468c07c-ccb6-4f0f-b740-a242659c93d9 DGP_iad17t_DGP_iad23s DGP Primary MaxPerformance 0 seconds 0 seconds 13.00 KByte/s Configured # /opt/oracle/dcs/bin/dbcli describe-dataguardstatus -i f468c07c-ccb6-4f0f-b740-a242659c93d9 Dataguard Status details ---------------------------------------------------------------- ID: f468c07c-ccb6-4f0f-b740-a242659c93d9 Name: DGP_iad17t_DGP_iad23s Database Name: DGP Role: Primary Protection Mode: MaxPerformance Apply Lag: 0 seconds Transport Lag: 0 seconds Apply Rate: 11.00 KByte/s Status: Configured
・ExaCSのコマンドツール dbaascliでの、Data Guard構成確認
# dbaascli dataguard status --dbname <DB名>
# dbaascli dataguard status --dbname emdgp DBAAS CLI version 19.4.4.0.0 Executing command dataguard status SUCCESS : Dataguard is up and running DETAILS: Connected to "emdgp_nrt1mv" Connected as SYSDG. Configuration - fsc Protection Mode: MaxPerformance Members: emdgp_nrt1mv - Primary database emdgp_kix1qh - Physical standby database Properties: FastStartFailoverThreshold = '30' OperationTimeout = '30' TraceLevel = 'USER' FastStartFailoverLagLimit = '30' CommunicationTimeout = '180' ObserverReconnect = '0' FastStartFailoverAutoReinstate = 'TRUE' FastStartFailoverPmyShutdown = 'TRUE' BystandersFollowRoleChange = 'ALL' ObserverOverride = 'FALSE' ExternalDestination1 = '' ExternalDestination2 = '' PrimaryLostWriteAction = 'CONTINUE' ConfigurationWideServiceName = 'emdgp_CFG' Fast-Start Failover: Disabled Configuration Status: SUCCESS
・ocicli でのData Guard構成の確認
$ oci db data-guard-association list --database-id <DBのOCID>
$ oci db data-guard-association list --database-id ocid1.database.oc1.ap-tokyo-1.abxhiljr34y6k27mzesnia7qr3xxhmyevgwqguxbuz3djahugmmn4ej4oejq { "data": [ { "apply-lag": "0 seconds computed 2 seconds ago", "apply-rate": "2.46 MByte/s", "database-id": "ocid1.database.oc1.ap-tokyo-1.abxhiljr34y6k27mzesnia7qr3xxhmyevgwqguxbuz3djahugmmn4ej4oejq", "id": "ocid1.dgassociation.oc1.ap-tokyo-1.abxhiljrybsfqmz3amypzbxp6r4f6pib4q546n25fxw6gwqtoqcqykuvu77q", "lifecycle-details": null, "lifecycle-state": "AVAILABLE", "peer-data-guard-association-id": "ocid1.dgassociation.oc1.ap-osaka-1.abvwsljru3pnn2kjfyi3gi5cu3eckkuz2trrx2tn6bnbzqo6ewtcwc5cvyoq", "peer-database-id": "ocid1.database.oc1.ap-osaka-1.abvwsljraquduk67djge3zusvipkidjnbyorzpe3bawknsogihoh5q3sxqhq", "peer-db-home-id": "ocid1.dbhome.oc1.ap-osaka-1.abvwsljrrxyfdcqvgel4n576snhcky3p3asqt7jvkle2rtmd22nfsfcw6fpq", "peer-db-system-id": "ocid1.dbsystem.oc1.ap-osaka-1.abvwsljrgockrpzpvx3e236egr3xqqkkeqg4c5bffuwux77wmlixjx66cgyq", "peer-role": "PRIMARY", "protection-mode": "MAXIMUM_PERFORMANCE", "role": "STANDBY", "time-created": "2020-04-03T11:47:29.417000+00:00", "transport-type": "ASYNC" } ] }
DBCSとExaCSの自動Data Guardの環境は、管理の簡易化からOracle Data Guard BrokerとOracle Flashback Databaseの機能が有効になっています。Data Guard Brokerは、Data Guardの管理フレームワークです。これを有効にすることで、常時Data Guard構成や状態がチェックされ、通常プライマリとスタンバイそれぞれで実行する必要がある処理を、DGMGRLというData Guard Brokerのコマンドツールで簡単に管理・運用が出来るようになります。コンソールやdbcliやdbaascliなどのクラウドツールでのData Guardの管理操作では、裏ではData Guard Brokerが動いています。そのため、Data Guard Brokerを無効にしてしまうと、クラウドツールが動作しなくなる可能性があるので無効化しないようにしましょう。
Flashback Databaseは、フェイルオーバー実施後に旧プライマリ・データベースを簡単にスタンバイとして回復させるために有効になっています。詳細は、次の章でお話ししますが、こちらも無効化してしまうと「回復」機能が使えなくなるので有効化のままがおすすめです。上記のようなコマンドラインで詳細情報も確認可能ですが、最低限必要なデータベース・ロールと適用ラグは、コンソールからも確認できます。
コンソールやCLIから、簡単にData Guardの切り替え(スイッチオーバー、フェイルオーバー)や旧プライマリの回復(フェイルオーバー実施後に旧プライマリ・データベースを簡単にスタンバイとして復旧)が可能です。前述したクラウドツールのCLIでももちろん実行可能です。
スイッチオーバーは主に計画停止用途のもので、スタンバイにREDOを転送・適用をしきった状態で、プライマリとスタンバイを切り替えます。そのため、切り替え後には旧プライマリは新スタンバイとしてData Guard構成を保った状態となります。スイッチオーバーは、プライマリDBシステムのData GuardアソシエーションのスタンバイDBが表示されている箇所から実行します。
フェイルオーバーは主に計画外停止用途のもので、プライマリ側が利用できない状態の際にスタンバイ側に切り替える際に用いられます。旧プライマリは壊れている状態で切り替えられ、非同期転送をしている場合には未転送分データがない可能性もあり、基本的には切り替え後にスタンバイがない構成となります。そのため、フェイルオーバー後にもData Guardでの可用性構成を組むために、スタンバイを作成して再度Data Guardを構成することが必要となります。フェイルオーバーは、スタンバイDBシステムのData GuardアソシエーションのプライマリDBが表示されている箇所から実行します。
フェイルオーバー後に活用されるのがFlashback Database機能です。旧プライマリを障害発生直前(スタンバイが切り替わる前の時点)までデータを戻し(フラッシュバック)、スタンバイにロールを変換してData Guard構成に組み込まれ、フラッシュバックしたことで生じる差分も自動で同期されるため、一からスタンバイを構築する必要はありません。そのため、DBCSやExaCSのData Guard機能では、コンソール上の『回復』というボタンをクリックするだけで簡単にData Guardが再構成されます。回復は、プライマリDBシステムのData GuardアソシエーションのスタンバイDB(旧プライマリ)が表示されている箇所から実行します。
Data Guardアソシエーションに含まれるデータベースもしくはDBシステムを削除する場合、最初にスタンバイ・データベース(DBシステム)を削除しましょう。スタンバイ・データベースが紐づけられている状態の時に、プライマリ・データベースを削除しようとするとエラーが表示され、削除できません。もし、プライマリ・データベースの環境のみを削除したい場合には、一度ロールを切り替えて削除対象の環境をスタンバイ・ロールにしてから削除という形をとって頂ければと思います。
業務継続性の担保のために、計画停止/計画外停止を考慮した可用性構成をとることは大切です。ただ、可用性構成をとることが目的ではなく、必要な時にすぐに切り替えられ、きちんと使えるスタンバイを持つことが重要です。そのために、単にデータファイルをコピーしているわけではないデータを意識した同期方法、日頃から利用することで切り替え時にスタンバイも利用できないという事態を防ぎ、いざ切り替える際には簡単に切り替え・再構成できる環境であることが重要で、そういった観点で実装・機能拡張を続けているのがOracle Data Guardです。クラウド上であれば、ご紹介したように簡単に構築・管理ができるので、データベースはData Guardでの冗長構成を検討してみてください。
Q1) プライマリとスタンバイを異なるシェイプ同士で利用可能ですか
A1) はい、可能です。以前は同一シェイプである必要がありましたが、現在は異なるシェイプ間も対応しています
Q2) スタンバイの時だけ小さいシェイプにして、切り替えてプライマリにした時に大きいシェイプにすることは可能ですか
A2) DBCSの場合、可能です。切り替え後に、スケール・アップ(シェイプの変更)をすることによって大きいシェイプに変更可能です。ExaCSの場合は、シェイプの変更ができません。そのため、異なるシェイプ間での構成は組むことはできますが、切り替え後に旧プライマリとは異なることを考慮する必要があります
関連リンク
・Oracle Cloud Infrastructure ドキュメント DBCS Oracle Data Guardの使用
・Oracle Cloud Infrastructure ドキュメント Exadata DBシステムでのOracle Data Guardの使用