はじめに
DB技術本部のDB運用技術チームの齋です。
OracleRAC構築を行う際に、知ってもらいたい項目として「ロードバランシング」があります。
意外と設定されていなかったり、設計書に「サーバサイド・ロードバランシングを有効」と書かれているのにもかかわらず、初期化パラメータの設定がきちんとされていない場合があります。
その逆もありで、無効にも関わらず、設定されている場合があります。
本記事では、ロードバランシングについて紹介していこうと思います。
目次
ロードバランシング まとめ |
ロードバランシング
Oracle RAC Databaseには、ロードバランシングを実現するための機能として以下が提供されています。
RACにおけるロードバランシングは、上記のロードバランスを組み合わせて使用することが可能です。
更新処理を意識したアプリ設計が行われている環境では、各ノード(インスタンス)で接続されるアプリケーション(処理)を固定することで、キャッシュフュージョン転送量を抑えることが可能です。このような環境では、ロードバランス機能を使用すると悪影響を及ぼす可能性があるため、ロードバランスをしない構成にする場合があります。
ロードバランシング機能は、RACの各インスタンスにセッション数を均等に割り振りたい場合や負荷の分散、可用性を求める場合に使用を検討します。
接続ロード・バランシング
・クライアント・ロード・バランシング(クライアントサイドロードバランス)
Oracleクライアントが、DBインスタンス間でセッション数が均一になるように、Oracleリスナーをリダイレクトして振り分けます。
クライアント側のTNS設定
接続記述子の設定:LOAD_BALANCE=ON
複数のADDRESS句からランダムで選ばれる。
(DESCRIPTION =
(LOAD_BALANCE=ON)
FAILOVER=ON OFF
(ADDRESS=(PROTOCOL=TCP)
(HOST=<vip1>) (PORT = <port> ) )
(ADDRESS=(PROTOCOL=TCP)
(HOST=<vip2>) (PORT = <port> ) )
(ADDRESS=(PROTOCOL=TCP)
(HOST=<vip3>) (PORT = <port> ) )
(CONNECT_DATA=
(SERVICE_NAME=SERVICE ) )
)
クライアントロードバランシングの特性のみでロードバランスを行いたい場合には、全てのインスタンスにおいてサーバサイドロードバランシングはOFFにすること。
・サーバサイド・ロード・バランシング(サーバサイドロードバランス)
サーバサイド・ロード・バランシングは、リスナーが接続要求を受けた際に、
各インスタンスで登録されているサービスと、負荷状況を基に接続先インスタンスを決定する。
リダイレクトにより最も負荷が低いインスタンスに接続が行われる。
※リスナーが各リスナーとサービスを把握している必要がある。※事項で説明
デフォルトの振り分け方(負荷指標)は「セッション数均等化」
サービス属性の「CLB_GOAL=LONG」で設定
LONG:サービスに属するインスタンスでセッション数が均等になるように振り分ける。
SHORT:サービスに属するインスタンスのロードバランシングアドバイザのガイドを元に接続を振り分ける。
必要な設定
サーバサイド・ロード・バランシングを使用するためには各インスタンスからリスナーに負荷状況を送る必要があり、以下の初期化パラメータを設定する必要があります。
local_listener:インスタンスが存在するノードのリスナーの情報を記載
remote_listener:他のインスタンスが存在するノードのリスナーの情報を記載※
listener_networks:デフォルトVIP以外のVIPを追加した場合にローカルノード追加VIPをエンドポイントするリスナー名とリモートノードのリスナー名を記載
※SCANをクライアント接続に使用する場合、SCANリスナー名を指定(DBCAによるデフォルト)
クライアント・ロード・バランシングを介してサーバサイドで接続先をリダイレクト
例の通り、クライアント・ロード・バランシングよりサーバ・サイド・ロードバランスが優先されます。
ランタイム接続ロードバランシング
コネクションプールを利用している環境で、接続要求に対してロードバランシングアドバイザの情報をもとに、接続プールから論理コネクションを獲得することができます。
ランタイム接続ロードバランシングは、ロードバランシングアドバイザからの情報に基づいて高い性能を示すインスタンスに、より多く処理を割り振る動作であり、全体としてのスループット向上を目的とする。
サービス属性の「RLB_GOAL」で設定
SERVICE_TIME:応答時間に基づいて接続を振り分ける。
THROUGHPUT:スループットに基づいて接続を振り分ける。
まとめ
■接続ロード・バランシング
・クライアント・ロード・バランシング(クライアントサイドロードバランス)
⇒RACの場合には、ランダムで振り分けられるため、セッションの偏りを誘発するため、サーバサイドロードバランスと併用することが望ましい。
・サーバサイド・ロード・バランシング(サーバサイドロードバランス)
⇒RACの場合には、サーバサイドバランスを設定し、各ノードに適切にセッションを分散させるのが望ましい。
※ただし、以下の場合には、ロードバランスを利用しない場合があります。
RAC環境を利用しており、「キャッシュフュージョン(バッファキャッシュのノード間のデータブロック転送)」で処理の遅延が著しい場合には、キャッシュフュージョン予防するため、 「クライアントロードバランス、サーバサイドロードバランス及び インターノード・パラレルクエリー(RAC Node間のリソースを使用したパラレル処理)」を停止して、
クライアント側の制御で接続するDBNodeを制御して、実行するSQL(業務処理)をノード毎で偏らせて「キャッシュフュージョン」を抑制する手法もあります。
■ランタイム接続ロードバランシング
・コネクションプーリングを利用している環境で、より処理性能を向上させるための仕組みです。DBサーバリソースを有効活用するため、ノード間でセッションの移動が行われます。
・コネクションプーリング:
アプリケーション側(クライアント側)でコネクションプーリングを利用可能な場合には、はじめから一定数のDB接続を確保して、確保した接続数をアプリケーションで使いまわす仕組みです。
DB接続プールをアプリケーションで共有して接続時する。
処理毎に1回、1回新規に接続する場合にはそれだけ、接続に時間を要します。(コネクション接続でDB内部処理も発生します)
コネクションプーリングは、その接続時の処理を軽減します。