Oracle RACによるメンテナンスのためのドレインとアプリケーション・コンティニュイティの仕組み (2023/11/01)

Oracle RACによるメンテナンスのためのドレインとアプリケーション・コンティニュイティの仕組み (2023/11/01)

https://database-heartbeat.com/2023/11/01/draining-ac-rac/




はじめに


Oracle RACは、Oracle Databaseのスケーラビリティと高可用性を提供します。1つのサーバー(RACノード)に障害が発生した場合、またはメンテナンスのためにオフラインになった場合でも、追加のノードを介してデータベースにアクセスできます。ただし、メンテナンスの開始時に、データの読取りまたは変更に関係なく、一部の作業を実行しているクライアント・セッションはどうなりますか。この作業は中断され、ドレインを実装してアプリケーション・コンティニュイティまたは透過的アプリケーション・コンティニュイティを有効にしないかぎり、エンドユーザーまたはアプリケーションによって再度実行する必要があります。



環境


2ノードのOracle RACを例に挙げて、高速アプリケーション通知(FAN)、ドレインおよびアプリケーション・コンティニュイティによってメンテナンス・イベントがエンドユーザーに透過的になる方法を理解しましょう。アプリケーションは、30個のセッションを保持するように構成された接続プールを使用しています。



通常の操作


通常の操作中は、両方のRACノードが起動し、アプリケーションを実行しています。ロード・バランシング戦略によっては、セッションの数が両方のノード間で異なるか、均等に分散される場合があります。次の図をよりよく視覚化するために、ノード2のノード1および20のセッションに10のセッションがあるとします。



セッションは、アイドル状態(接続されているが何もしていない)またはアクティブ状態(リクエストの途中)にできます。リクエストは、データの読取り(SELECT)または操作(INSERT、DELETE、UPDATE)が可能です。



ドレインによるサービスの停止


ある時点で、システムのメンテナンスが必要になります。2ノードRACがあるため、メンテナンスはローリング方式で、1つのノードを順番に(ほとんどの場合)実行できます。メンテナンスは、たとえば、オペレーティング・システム、Grid Infrastructureまたはデータベースにパッチを適用できます。


メンテナンスから開始するには、まずノード2でデータベース・サービスを停止します。ただし、これらをすぐに停止することはありませんが、停止を300秒(5分)後にして、サービスが実際に停止してセッションが切断される前に、アクティブなセッションが作業を終了できるようにします。これは、ドレインタイムアウトが5分であるドレインと呼ばれます。


srvctl stop service -db RACCDB_fra -service acsrv -instance RACCDB1 -drain_timeout 300


サービスの停止時に、ノード2には5つのアイドル・セッションと15のアクティブ・セッションがありました。


高速アプリケーション通知(FAN)は、停止イベントを送信します。接続プールは、その通知に応答し、ノード2の5つのアイドル・セッションをただちにクローズします。


アプリケーションによってリクエストされると、ノード1でさらに新しい接続が確立され、オープンされます。アプリケーションが常に30の接続を必要とすると、ノード1で5つの新しい接続が開かれます。


ノード2の残りの15のアクティブ・セッションは、引き続き作業を実行します。ドレイン・タイムアウト(5分)で作業が終了し、接続をプールに戻すと、セッションはクローズされ、リクエストされたときにノード1で新しいセッションが確立されます。


トランザクションが短いOLTPアプリケーションがある場合、またはすべてのアクティブ・セッションが排出(=)して作業を終了するのに十分な大きさのドレイン・タイムアウトを選択した場合、アプリケーション側でエラーや中断が発生することはありません。


ここでは、5分以内に排出された15のアクティブ・セッションのうち13のセッションを想定します。残りの2人のユーザーは、コミットせずにトランザクションを終了していました。


ノード1で28セッション、およびドレインタイムアウトの直前にノード2で2つの残りのセッションが終了します。




アプリケーション・コンティニュイティ/透過的アプリケーション・コンティニュイティ


ドレイン・タイムアウトが完了すると、ノード2の残りの2つのセッションが切断されます。アプリケーション・コンティニュイティが設定されていない場合、エンド・ユーザーはエラーを受け取り、それを処理する必要があります。


アプリケーション・コンティニュイティを構成すると、セッションがノード1に再接続され、中断された処理中の作業がエンド・ユーザーに透過的にリプレイされます。



これで、30セッションすべてがノード1にあり、ノード2はメンテナンスの準備ができました。



まとめ


Oracle RACは、Oracle Databaseの高可用性を提供します。アプリケーションの観点では、高速アプリケーション通知(FAN)により、実行中のノードにセッションを再配置でき、ドレインにより、アクティブ・セッションは事前定義済のドレイン・タイムアウト内にリクエストを終了でき、アプリケーション・コンティニュイティはドレインしなかったセッションの中断されたリクエストを再実行します(= リクエストの実行を終了)。これらはすべて、エンドユーザーおよびアプリケーションに対して透過的に行われます。


関連情報

コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

Oracle APEXのInteractive Gridで、Oracle Formsと比較して、重複行の検証を制御/通過させる方法 (2022/07/21)

Oracle APEX 24.1の一般提供の発表 (2024/06/17)