13.2.1 共有サーバーの構成のための接続ロード・バランシングの例
図13-1は、同じサービスsales.us.example.comの2つのインスタンスsales1およびsales2を持つ、Oracle RACの共有サーバー・データベースを示しています。インスタンスsales1およびsales2は、それぞれコンピュータsales1-serverおよびsales2-serverに常駐します。インスタンスsales1は1つのディスパッチャ、インスタンスsales2は2つのディスパッチャを持ちます。listenerという名前のリスナーは、それぞれノード1および2上で稼働しています。DISPATCHERSパラメータのlistener属性が構成され、両方のリスナーに対して情報のサービス登録が可能になっています。
この例では、sales2-serverがロード量が最小のノード、sales2がロード量が最小のインスタンス、dispatcher2がロード量が最小のディスパッチャです。次のロード情報が登録されます。
-
各インスタンスの1分当たりのロード量平均は、
sales1の場合600、sales2の場合400になります。これは、sales1-serverに必要な処理が多い場合に発生する可能性があります。 -
各インスタンスへの接続数は、
sales1の場合200、sales2の場合300になります。 -
各インスタンスへのディスパッチャ接続数は、
dispatcher1の場合200、dispatcher2の場合100、dispatcher3の場合200になります。 -
sales1への接続数(200)は、その唯一のディスパッチャであるdispatcher1への接続数と同じです。 -
sales2の接続数(300)は、その2つのディスパッチャであるdispatcher2の接続数(100)とdispatcher3の接続数(200)の合計になります。
(LISTENER=listeners_sales)のlisteners_salesの値は、両方のサーバー上に存在するローカルのtnsnames.oraファイルによって、次のように決定します。
listeners_sales=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521))))
環境に応じて、次のような処理が実行されます。次の各処理に付いている番号は、図13-2に示す矢印の番号に対応しています。
-
LREGプロセスは、インスタンス
sales1およびsales2を、両方のリスナーに登録します。リスナーは、インスタンスおよびディスパッチャのロード時に動的に更新されます。 -
クライアントが接続要求を送信します。接続記述子が構成されプロトコル・アドレスが1つ成功するまで、各プロトコル・アドレスがランダムに試行されます。
sales.us.example.com= (DESCRIPTION= (
LOAD_BALANCE=on) (FAILOVER=on) (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)))sales1-server上のリスナーがランダムに選択されて、クライアント接続要求を受信します。sales1-server上のリスナーは、インスタンスsales1およびsales2のロード量を比較します。この比較では、ノードsales1-serverおよびsales2-server上のロード量がそれぞれ考慮されます。sales2-serverのロード量はsales1-serverのロード量より少ないため、リスナーは、sales1-serverよりsales2-serverを選択します。 -
リスナーは、ディスパッチャ
dispatcher2のロード量とdispatcher3のロード量を比較します。dispatcher2のロード量はdispatcher3のロード量より少ないため、リスナーはクライアント接続要求をdispatcher2にリダイレクトします。 -
クライアントは、
dispatcher2に直接接続します。
親トピック: 接続ロード・バランシングの理解

