Shoeisha Technology Media

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

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

テーマ別に探す

RACへの接続とロード・バランシング

2017/09/08 06:00

 前回の連載ではOracle Real Application Clusters(RAC)のノード間データの一貫性を取るキャッシュ・フュージョンの仕組みを解説しました。アプリケーション・サーバー等のOracleクライアントは、RACのどのインスタンスに接続しても同じようにSQLを実行することができます。今回はOracleクライアントがどのOracleインスタンスに接続するかを決定するロード・バランシングについて解説します。JDBCドライバなどのOracleクライアントのソフトウェアにはシングル・インスタンス用またはRAC用という区別はありません。単一のバイナリでどちらへの接続にも対応しています。

Oracleクライアントは「サービス」に接続する

 Oracleクライアントは、ユーザー名とパスワード、Oracleリスナーのホスト名とポート番号、そしてサービス名を指定して接続リクエストを発行します。これはシングル・インスタンスでもRACでも同じです。Oracleインスタンスは自身の担当するサービス名をOracleリスナーに登録しています。このようにして、OracleリスナーはどのOracleインスタンスがどのサービスを担当しているかを把握します(図1)。RACの場合、複数のOracleインスタンスが同じ名前のサービスを担当することができます。サービス名のデフォルト値はデータベース名(Oracle初期化パラメータのDB_NAME.DB_DOMAIN)です。

 Oracleリスナーは、Oracleクライアントから指定されたサービスを担当するOracleインスタンスと接続するためのOracleサーバー・プロセスを生成し、セッションを確立します。

RACの接続ロード・バランシング

 RAC 11g R2以降では、各ノードにOracle Grid Infrastructure(GI)が管理するローカル・リスナー以外に、クラスタを代表するSingle Client Access Name(SCAN)リスナーと、SCANリスナーに対応するSCAN Virtual IPアドレス(SCAN VIP)がセットでクラスタのいずれかのノードで起動しています。SCANリスナーとSCAN VIPは可用性のために複数起動しています。複数あるSCAN VIPのIPアドレスはDNSで1つのホスト名に対応付けられます。もしSCANリスナーが起動しているノードで障害が発生すると、別の正常ノードにSCANリスナーがSCAN VIPとともにフェイルオーバーします。

 Oracleインスタンスはローカル・ノードのOracleリスナーに担当サービスを登録するとともに、SCANリスナーにも登録します。そのため、SCANリスナーはRACの全インスタンスがどのサービスを担当しているかを把握しています(図2)。

 Oracleリスナーには2つの役割があります。1つ目はOracleクライアントの接続リクエストを、ロード・バランシングを考慮しつつ適切なローカル・リスナーにリダイレクトすることです。2つ目はOracleインスタンスとのセッションを確立することです。接続リクエストのリダイレクト用にサービス登録するOracle初期化パラメータはREMOTE_LISTENERです。そしてセッション確立用にサービス登録するOracle初期化パラメータはLOCAL_LISTENERです。REMOTE_LISTENRに指定されたリスナーに全Oracleインスタンスからサービスの登録があるように構成されます。アプリケーション・サーバーなどのOracleクライアントは、このREMOTE_LISTENERで指定されたリスナーに接続リクエストを発行します。Oracleクライアントの接続文字列に記述するホスト名とポート番号は、シングル・インスタンスの場合はローカル・リスナーですが、RACの場合はリダイレクト用のリスナー(SCANリスナー)のものです。

 SCANリスナーが実装される前のRAC 11g R1までは、すべてのローカル・リスナーにOracleインスタンスがサービスを登録し、すべてのローカル・リスナーが接続リクエストのリダイレクトとセッション確立の2つの役割を兼ねていました(図3)。SCANリスナーはRAC 11g R2で導入されました。SCANリスナーは接続リクエストのリダイレクト専用のリスナーで、ローカル・リスナーはセッションの確立を行います。

 デフォルトのサービス名(=データベース名)はOracle Enterprise Managerなどの管理ツールが使用するので、アプリケーション接続用にはデフォルト・サービス名であるデータベース名ではなく、別途srvctlコマンドでサービスを作成するのを推奨します(図4)。

 追加したサービスにはロード・バランシングの属性を設定することが可能です。追加したサービス(-service)に接続するには、Oracleクライアントの接続記述子のサービス名にOracle初期化パラメータDB_DOMAINを付加したものを指定します。各Oracleインスタンスへの物理コネクションの本数の配分は、接続ロード・バランシングの属性(-clbgoal)で設定します。これには長時間コネクションを維持する場合に使用するLONGと、短時間でコネクションを解放する場合に使用するSHORTがあります。

※この続きは、会員の方のみお読みいただけます(登録無料)。


著者プロフィール

  • 日下部 明(クサカベ アキラ)

    日本オラクル データベース担当。Oracle GRID Centerのラインマネージャとしてオラクルの持つ最新技術をパートナー各社と共同で検証し、多くのホワイトペーパーを執筆・レビュー。以後、その経験を元にミッションクリティカルな案件のソリューションデザインの提案などを担当。データベースセキュリティ...

バックナンバー

連載:イチから学ぶデータベース最新技術 - Oracle Real Application Clusters編
All contents copyright © 2007-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5