EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

004 11g R2 RAC データベースへの接続フェイルオーバーとロードバランシング

edited by DB Online   2013/03/01 00:00

2. 接続ロードバランシング

 接続ロードバランシング(CLB:Connection Load Balancing)は、クラスタのインスタンス間でクライアント接続を分散する機能です。

 ロード・バランシングには、クライアント・サイドとサーバー・サイドの併用可能な 2 種類のロード・バランシングがあります。クライアント・サイドのロード・バランシングでは、接続要求を送信するリスナーをランダムに選択することで負荷分散します。サーバー・サイドのロード・バランシングでは、クライアントから接続要求を受信したリスナーが、最適なインスタンスに接続要求を割り当てます。

 

図2 クライアント・サイド・ロードバランシングとサーバー・サイド・ロードバランシング
図2 クライアント・サイド・ロードバランシングとサーバー・サイド・ロードバランシング

 

 クライント・サイド・ロードバランシング

 クライアント・サイド・ロードバランシングは、クライアントからリスナーをランダムに選択することで負荷分散する機能です。tnsnames.ora の ADDRESS_LIST句 に指定された宛先からランダムに選択し、負荷をインスタンス間で分散します。クライアント・ロード・バランシングを使用しないと、ADDRESS_LIST句の上から順に成功するまで接続を試行するため、特定のインスタンスに負荷が偏ってしまいます。

 設定は tnsnames.ora の接続記述子に LOAD_BALANCE=ON を記述します。SCAN が導入されていないリリース11.1 以前は ADDRESS_LIST句 に全ノード分の VIP ホスト名(またはIPアドレス)を指定したADDRESS句を列記して、宛先を定義していましたが、SCAN 利用時は ADDRESS_LIST句に SCAN名を指定したADDRESS句を 1 つ記載して、宛先を定義します。ADDRESS_LIST句に全ノードのADDRESS句を列記する必要がないため、CTF と同様に、ノードの追加、削除の際に各クライアントの tnsnames.ora の修正が不要になりました。

 なお、ADDRESS句にSCAN名を指定した場合は、SCAN名をDNS名前解決して得られる複数のIPアドレスから1つを選択し、接続先として使用します。このとき、DNSラウンドロビンの働きにより、複数IPアドレスの順序はランダムになるため、クライアント・サイド・ロードバランシングと同等の効果を得られます。しかし、一部の環境では、複数IPアドレスがOS のライブラリ関数により特定の順序でソートされ、順序がランダムにならないことがあります。この場合は、特定のSCAN リスナーへのみ接続が行われてしまいますので、対処として tnsnames.ora へ明示的に LOAD_BALANCE=ON を記述します。

例:SCAN未導入時の設定方法(tnsnames.ora)
=================================================================================
TEST_CLB =
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (LOAD_BALANCE=ON)
      (ADDRESS = (PROTOCOL = TCP)(HOST = [VIP1])(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = [VIP2])(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = [VIP3])(PORT = 1521))
     )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
=================================================================================
例:SCANを利用した設定方法(tnsnames.ora)
=================================================================================
TEST_CLB =
  (DESCRIPTION =
    (LOAD_BALANCE=ON)
    (ADDRESS = (PROTOCOL = TCP)(HOST = [SCAN])(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
=================================================================================

サーバー・サイド・ロードバランシング

 サーバー・サイド・ロードバランシングは、クライアントから接続要求を受信したリスナーが負荷の少ないインスタンスへ接続するように負荷を分散させる機能です。

 この機能は、PMON プロセスが初期化パラメータ LOCAL_LISTENER および REMOTE_LISTENER に定義されているリスナーに負荷情報を継続的に通知する事で実現しています。

 設定は、初期化パラメータ LOCAL_LISTENER および REMOTE_LISTENER に対象とするリスナーを定義します。SCAN が導入されていないリリース11.1 以前のリリースでは REMOTE_LISTENER の値を tnsnames.ora の ADDRESS_LIST句 へ列記していましたが、11g R2 では DBCA から RAC データベースを作成すると LOCAL_LISTENER,REMOTE_LISTENER は以下のように構成されます。

 ・LOCAL_LISTENER:未設定

 ・REMOTE_LISTENER:[SCAN]:[ポート番号]

 LOCAL_LISTENER はインスタンス起動時に Oracle Clusterware の CRS エージェントが動的に設定を行います。REMOTE_LISTENER は SCAN が指定されることで RAC データベースを構成する全ノードで同じ設定となり、CTF と同様にノードの追加、削除の際に各ノードの tnsnames.ora を編集する必要がなくなりました。

例:SCAN未導入時の設定(LOCAL_LISTENER,REMOTE_LISTENER,tnsnames.ora)
=================================================================================
≪初期化パラメータ≫

SQL> show parameter _listener

NAME            TYPE        VALUE
--------------- ----------- ------------------------------
local_listener  string      (DESCRIPTION=(ADDRESS_LIST=
                              (ADDRESS=(PROTOCOL=TCP)(HOST=[VIP1])(PORT=1521))))
remote_listener string      LISTENERS_ORCL

≪tnsnames.ora≫

LISTENERS_ORCL =
  (ADDRESS_LIST=
    (ADDRESS=(PROTOCOL=TCP)(HOST=[VIP1])(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=[VIP2])(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=[VIP3])(PORT=1521))
  )
)
=================================================================================
例:SCANを利用した設定(LOCAL_LISTENER,REMOTE_LISTENER)
=================================================================================
SQL> show parameter _listener

NAME            TYPE        VALUE
--------------- ----------- ------------------------------
local_listener  string      (DESCRIPTION=(ADDRESS_LIST=
                              (ADDRESS=(PROTOCOL=TCP)(HOST=[VIP1])(PORT=1521))))
remote_listener string      [SCAN]:1521
=================================================================================

著者プロフィール

  • 岡野 平八郎(オカノ ヘイハチロウ)

      株式会社 コーソル Oracleサポートグループ   2004年に新卒で独立系ソフトハウスへ入社。約4年間、大手製造業向けのシステム保守部隊にて、主にDB2、 SQL Serverの運用管理者として活躍した。次第に保守フェーズ以外の経験を積んでみたいと考えるようになり、経験を活かしながらスキルアップできる環境があり、行動指針にも共感できたコーソルへ、2006年4月に転職した。現在は、サポートアナリストとして、お客様への技術支援を行う傍ら、チームの「ご意見番」として、蓄積した技術や対応スキルなどを惜しみなくメンバーへ伝えている。   ORACLE MASTER Platinum Oracle Database 11g(2011年5月取得)、Oracle Database 11g: Real Application Clusters Administrator Certified Expert(2012年10月取得)など、保有資格は多数。   趣味はアコースティックギター。様々な曲をギター 1 本で演奏するソロギタースタイルに傾倒。最近はお気に入りの曲を自らアレンジし、楽譜作成に挑戦中。  

バックナンバー

連載:目指せリア充!コーソル流 RAC 活のススメ ~シングル卒業~
All contents copyright © 2007-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5