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
に直接接続します。
親トピック: 接続ロード・バランシングの理解