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

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

テーマ別に探す

003 高可用性を実現する11g R2の接続、サービスのアーキテクチャ

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

3. SCAN (Single Client Access Name)

 11g R2からSCAN (Single Client Access Name) という新しい接続方式が導入されました。 SCANを使用すると、クラスタを構成するサーバーが増減しても、接続に関わるOracle Net設定の変更が不要となります。 なお、ポリシー管理型データベースの利点の1つにインスタンスが動作するサーバー数を容易に増減できることが挙げられますが、クライアントとデータベースの接続に関わる設定を都度変更する必要があっては、その利点が大きく損なわれます。したがって、ポリシー管理型データベースを使用する場合は、SCANの使用がほぼ必須であるといえます。

 サーバー数が増減した場合、従来は以下の設定をメンテナンスする必要がありました。

  •  Oracleクライアントのtnsnames.oraに記載したサーバーのIPアドレスのリスト
  •  データベースのREMOTE_LISTENER初期化パラメータに設定したサーバーのIPアドレスのリスト

 しかし、SCANを使用することで、これらの設定のメンテナンスが不要となります。

 SCANを使用するためには、以下の構成が必要となります。

 SCAN名の名前解決の構成

 SCAN名とはSCAN VIPのホスト名のことで、名前解決のためにDNSか、/etc/hostsファイルへの追加をします。(DNSの使用が推奨されています)SCAN VIPは最大3つ割り当てられますが、その際にはDNSへの登録が必須となります。

 SCAN VIPの構成

 SCAN接続用のVIPを構成します。SCAN名を名前解決すると得られるVIPになります。なお、従来のVIPと異なり、SCAN VIPは起動するサーバーが固定されていません。

 SCANリスナーの構成

 SCAN VIPを使用してリスニングする、SCAN接続用のリスナーを構成します。SCANリスナーはSCAN VIPとペアで動作し、SCAN VIPが起動するサーバーで起動します。

 データベースのREMOTE_LISTENER初期化パラメータの設定

 ホスト名に対応する箇所にSCAN名を指定します。

 Oracleクライアントのtnsnames.oraの設定

 接続先サーバーのホスト名に対応する箇所(HOST句)にSCAN名を指定します。

 上記の構成手順のうち、Oracleクライアントのtnsnames.oraの設定を以下に示します。HOST句にSCAN名を指定します。サーバーのホスト名を指定しないため、サーバー数が増減した場合でも、tnsnames.oraをメンテナンスする必要がありません。

SCAN使用時のクライアントのtnsnames.ora

A202R =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = la202-scan.jp.oracle.com)(PORT = 1521)) ←★
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = a202r)
    )
  )

 なお、SCANを使用しない場合は、ADDRESS-LIST句にデータベースが配置されたサーバーのホスト名(VIPに対応)をリストします。そのため、サーバー数が増減した場合、tnsnames.oraのADDRESS-LIST句の記載内容をメンテナンスする必要があります。

SCANを使用しない場合のクライアントのtnsnames.ora

A202R =
  (DESCRIPTION =
    (ADDRESS-LIST
      (ADDRESS = (PROTOCOL = TCP)(HOST = la202r1-vip.jp.oracle.com)(PORT = 1521)) 
      (ADDRESS = (PROTOCOL = TCP)(HOST = la202r2-vip.jp.oracle.com)(PORT = 1521)) 
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = a202r)
    )
  )

 最後に、SCANを使用した場合にOracleクライアントがOracle Databaseに接続するまでの流れを説明します。ここで、SCAN VIP、SCAN リスナーは2つ構成されています。SCAN VIP、SCAN リスナーが起動するサーバーは不定ですが、ここではサーバー1、サーバー3で起動しています。

 ①SCAN名を名前解決し、SCAN VIPのIPアドレスを取得します。複数のIPアドレスが取得できた場合、1つのIPアドレスを選択します。

 ②クライアントはSCAN VIPのIPアドレスをリスニングするSCANリスナーに対して接続要求を送信します。

 ③SCANリスナーは、クライアントから受信した接続要求をローカルリスナー(各サーバーで起動しているリスナー)に転送します。

 ④クライアントとサーバー間で接続を確立します。

図3 SCANを使用した接続
図3 SCANを使用した接続

 上記のとおり、SCANリスナーはクライアントからの接続要求をローカルリスナーに転送します。これが可能なのは、SCANリスナーがデータベースを構成するインスタンスがどのサーバーで起動しているかを知っているためです。

 インスタンスは、REMOTE_LISTENER初期化パラメータの設定に基づき、SCANリスナーに自インスタンスの状態を通知します。 REMOTE_LISTENER初期化パラメータには、ホスト名としてSCAN名が指定されています。なお、ここで、リスナーがリスニングするTCPポートはデフォルトの1521としています。

REMOTE_LISTENER初期化パラメータ

SQL> show parameter remote_listener

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_listener                      string      la202-scan.jp.oracle.com:1521

REMOTE_LISTENER初期化パラメータの設定に基づき、SCANリスナーに登録されたインスタンスの状態は、lsnrctl services [リスナー名] コマンドで確認できます。

SCANリスナーに登録されたインスタンスの状態


Service "a202r" has 2 instance(s).
  Instance "a202r1", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0 state:ready
         REMOTE SERVER
         (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.11)(PORT=1521)))
  Instance "a202r2", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0 state:ready
         REMOTE SERVER
         (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.12)(PORT=1521)))

 上記出力から IPアドレス 192.168.1.11 を持つサーバーにインスタンスa202r1が起動しており、192.168.1.12を持つサーバーにインスタンスa202r2が起動しているという情報が、SCANリスナーに登録されていることが分かります。

 このように、1つのSCAN名に対して複数のIPアドレスを対応付ける名前解決の仕組みと、SCANリスナーが接続要求を転送する仕組みにより、クライアントはサーバー名やインスタンスの起動状態を意識することなく、データベースに接続できるようになります。このため、サーバー数が増減したり、インスタンスの配置状態、起動状態が変化した場合も、設定のメンテナンスが不要となります。これがSCANの大きなメリットです。

 第3回目は以上となります。

 今回は、RAC 11g R2のOracle Clusterwareで導入されたポリシー管理型データベースとSCANについて説明しました。 もし第1回目を参考に環境を構築している方は、既存の環境のSCANリソースの設定や動作について 確認してみてください。

 次回は、フェイルオーバー、ロードバランスについて触れていく予定です。



著者プロフィール

  • 藤原 直人(フジワラ ナオト)

    株式会社 コーソル Oracleサポートグループ 中学生の頃、学校の授業で初めて触れた「コンピューター」に強い興味を持ち、大学では電子情報工学を専攻。もっと「コンピューター」全般についての知識を深めたいと考え、1997年に新卒でハードウェア保守の会社へ入社した。約4年間、フィールドエンジニアやその技術的なバックサポートを担うエンジニアとして、医療事務用コンピューターや大型複合機などの保守・サポートを担当する。技術力でお客様ビジネスを支える仕事に大きなやりがいを感じていたものの、次第にハードウェアに加えて、ソフトウェアのスキルも身に付けたいと考えるようになり、転職を決意した。ソフトウェア開発者への転身を希望していたものの、転職先でアサインされたのは携帯電話の電気的評価業務。なかなか異動も叶わず、強みを身に付けられないことにもどかしさを感じつつも、「まずはできることから」と、独学でLinuxやOracleなどの学習を始めた。Oracleについては、最初はとっつきにくい印象であったが、学ぶうちにどんどんその奥深さに魅せられ、独学でORACLE MASTER Silverを取得。「この難しいけれども奥深い技術を極め、市場価値の高いエンジニアになりたい」という明確なビジョンを抱くことができたため、2008年3月にコーソルへ転職。 コーソルでは、一貫してOracle DB製品サポート業務に従事している。入社3年目にサブリーダーに就任し、以来、チームメンバーの育成や評価なども担う。面倒見の良さには定評があり、社内セミナーの講師を務める他、「直人さんに聞けば分かる!」という評判を聞きつけた新人からの質問・相談が後を絶たない。 2009年10月にORACLE MASTER Platinum Oracle Database 10gを取得。他にもOracle Database 10g: Real Application Clusters Administrator Certified Expert(2008年12月取得)、ORACLE MASTER Platinum Oracle Database 11g(2011年4月取得)など、資格取得を成長のマイルストーンにしながら、日々技術を磨いている。 プライベートでは、2人の娘の父親として育児を楽しむ傍ら、コーソルフットサルチームの代表として、社内有志と共に IT企業特有の課題である運動不足をカバーすべく練習試合をセッティング。社員同士の団結の場を設ける事で、オフタイムでの社内活性化においてもコーソルを牽引している。

バックナンバー

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