OceanBaseデータベースプロキシODP(OceanBase Database Proxy、別名 obproxy)は、OceanBase専用のプロキシサービスです。ODP自体が高可用性設計となっています。
ODPのデプロイメントモード
メジャーコンパクションデプロイ
OCP方式で起動する場合
複数のクラスターにアクセスできます。
OCPがダウンした場合、既にアクセス済みのクラスターは正常にアクセス可能ですが、未アクセスのクラスターはアクセスできません。
RSList方式で起動する場合(単一クラスターへのアクセスのみ可能、IPは127.0.0.1)
特定のクラスターへの固定アクセスで、OCPに依存しません。ローカルマシンに障害が発生した場合、SLBが検出してフェイルオーバーを行うため、ODPの追加操作は不要です。
一部のマシン障害シナリオを処理できます。
独立デプロイ
OCP方式で起動する場合
複数のクラスターにアクセスできます。
OCPがダウンした場合、既にアクセス済みのクラスターは正常にアクセス可能ですが、未アクセスのクラスターはアクセスできません。
RSList方式で起動する場合
- 特定のクラスターへの固定アクセスで、OCPに依存しません。RS Listに障害が発生した場合、クラスターがアクセス不能になる可能性があります。
ODPの災害復旧機能
故障の検出
定期タスクにより、ノード、ゾーン、プライマリ/スタンバイクラスターの状態を更新します。
- プランの制限:ノードの状態更新に依存します。ノードに障害(例:ディスクハング)が発生しても、inactiveまたはstop serverになっていない場合、状態は変わりません。
Server接続はKeepAliveプローブ機構を維持し、ODPとバックエンドノード間の接続状況を検出します。アイドル接続が異常に切断された場合、obproxyは迅速に検出し、除外して新規に接続を確立できます。
Client KeepAlive 探活メカニズムにより、obproxyとClient間の接続状態を検出し、SLBなどのロードバランシングにおけるアイドルタイムアウトを回避します。
故障時の処理
進行中のリクエストの処理
非同期中止メカニズムにより、マシンの故障が検出された場合、直ちにリクエストを中止し、長時間の待機や業務接続プールのパンクを防ぎます。
新規リクエストの処理
ブラックリストメカニズムにより、新規リクエストが故障したマシンに送信されるのを防ぎます。
ノードへのアクセス失敗が複数回あるとブラックリストに追加されます。ブラックリストに追加されて一定期間経過すると、そのマシンがアクセス可能かどうかを検出するプローブリクエストが送信されます。
制限事項:クライアント側で先にタイムアウトして接続が切断された場合は、ブラックリストに追加されません。
ノードの状態が非activeに変わった場合も、ブラックリストに追加されます。
制限事項:RTOは【故障検出-定期タスク】のサイクル(現在は20秒、設定可能)とノードの検出時間に依存します。
非同期テーブルロケーションキャッシュのリフレッシュメカニズムにより、レプリカの切り替えを検出します。マシンが故障した後にレプリカ切り替えが発生した場合、迅速に新しいレプリカにルーティングできます。
制限事項:ノードがODPにルーティングに問題があることを通知することに依存します。ノードに問題がある場合、応答が返されないため、テーブルロケーションキャッシュは自動的にリフレッシュされません。
二センター物理スタンバイデータベース構成では、プライマリ/スタンバイ切り替えメカニズムがあります。プライマリデータベースで切り替えが発生した場合、迅速に新しいプライマリデータベースに切り替えることができます。
制限事項:RTOは【故障検出-定期タスク】のサイクル(現在は20秒、設定可能)とノードの切り替え時間に依存します。