Oracle WebLogic Server 10.3でのOracle Real Application Clusters(RAC)の設定および使用方法

2009年1月
Pas Apicella, Frances Zhao

はじめに

このデモでは、Oracle WebLogic ServerでOracle Real Application Clusters(Oracle RAC)を使用するための設定方法と、Webアプリケーションを使用して、バックエンドのOracle RACノードへの接続をテストする方法を示します。

Oracle WebLogic Server 10.3には、Oracle Database 11gのOracle Real Application Clusters機能を統合できます。これにより、データベース・アクセス時間を最小化しながら、接続パフォーマンスと可用性の両方を最大化する豊富な プーリング管理機能への透過的アクセスが実現されます。

Oracle WebLogic Serverには、Oracle RAC機能を実現するための設定オプションが複数用意されています。オラクルでは、Oracle WebLogic ServerのJDBCマルチ・データソースを使用することを推奨しています。この方法は、グローバル・トランザクションを使用するかどうかに関係なく適 用できます。また、Oracle WebLogic Serverを設定することで、Oracle JDBCシン・ドライバの接続時フェイルオーバーや、Oracle JDBCドライバの暗黙的接続キャッシュを使用した高速接続フェイルオーバーを使用することもできます。

このデモでは、Oracle WebLogic ServerのJDBCマルチ・データソースを使用して、フェイルオーバーとロードバランシングを実行します。

前提条件

必要な知識

ソフトウェア要件


データベース・サービスの構成とテスト方法、必要なデータソースの作成方法

データベース・サービスの定義

1. Oracle Enterprise Manager Database ControlにSYSとしてログインします。
2. ページ上部の 「 Availability」 リンクをクリックします。
3. 「 Cluster Managed Database Services」 リンクをクリックします。
4. 次に示すとおり、クラスタの資格証明とデータベースの資格証明を入力します。

img3

5. 「 Continue」ボタンをクリックします。
6. 「 Create Service」ボタンをクリックします。
7. スクリーンショットに示すとおり、サービスを定義します。選択した設定は、次のとおりです。

Service Name

MYHASERVICE

Enable Load Balancing Advisory

選択

Throughputラジオ・ボタン・オプション

選択

Connection Load Balancing Goal

LONG


img4

8. 「 OK 」ボタンをクリックして、サービスを作成します。

" Cluster Managed Database Services" ページを使用すると、サービス・ステータスを検証および確認できます。

img5

SQL*Plusを使用した サービスのテスト

1. "lsnrctl status" または"lsnrctl services"を実行すると、先ほど作成したサービスが存在することを確認できます。
2. ここでは、 SQL*Plus を使用して、サービス接続を検証します。

…$ sqlplus juser/juser@HASERVICE
SQL*Plus: Release 11.1.0.6.0 - Production on Tue Nov 18 14:29:46 2008
Copyright (c) 1982, 2007, Oracle.・All rights reserved.
> Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options

SQL>


$ORACLE_HOME/network/admin/tnsnames.ora のエントリは、接続文字列" HASERVICE" に対して次のように定義されています。

 

HASERVICE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = apemrac1-vip)(P ORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = apemrac2-vip)(P ORT = 1521))
    (LOAD_BALANCE = yes)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = MYHASERVICE.ape mrac.au.oracle. com)
    )
  )


3. UNIXシェル・スクリプトを使用してSQL*Plusに接続し、さまざまなインスタンスが使用されていることを確認します。これにより、ロードバランシ ングが機能していることと、RACデータベース設定が正しいことが検証できます。次のとおりに、 " test.sh" というファイルを作成します。

注:次に示すのはLinuxの例です。

#!/bin/sh
count=0
while [ $count -lt 5 ]                                               # Set up a loop control
do                                                                            # Begin the loop
    count=`expr $count + 1`                                      # Increment the counter
    sqlplus -s juser/juser@HAS ERVICE @test.sql
done


4. これにより、test.sqlを使用して環境に関する各種情報が出力され、終了します。出力を読みやすくするため、SQL*Plusはサイレント・モード で起動されています。 次のとおりに、" test.sql"というファイルを作成します。

col "Instance" format a20
col "Host" format a20
col "Service Name" format a20
select sys_context('us erenv', 'instance_name' ) "Instance",
       sys_context('us erenv', 'server_host') "Host",
       sys_context('us erenv', 'service_name') "Service Name"
from dual
exit;

5. このファイルを実行し、出力が正しいことを確認します。

必要なデータソース の作成

Oracle RACでは、マルチ・データソースが使用されています。マルチ・データソースは、RACバックエンドの各インスタンスに対して設定されている個別のデータ ソースで構成されています。アプリケーション・プログラムから、マルチ・プール・データソースのJNDI名を使用して、RACバックエンドを検出します。

最初のノードに対するデータソース#1の作成

ここでは、RACノード内の最初のインスタンスに接続します。このインスタンスは " orcl1" であり、次の例に示すURLが指定されています。

jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = apemrac1-vip)(PORT = 1521))

(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MYHASERVICE.apemrac.au.oracle.com)

(INSTANCE_NAME = orcl1)))

 

1. WebLogic管理コンソールにログインします。

http://<host>:<port>/console

2. " Domain Structure" ツリーの下の「 Services」 ノードを開きます。
3. Expand the 「 JDBC」ノードを開き、「 Data Sources」 をクリックします。
4. 「 New」ボタンをクリックします。
5. 次のスクリーンショットのとおりに、詳細情報を入力します。

img11

6. 「 Next」をクリックします。
7. もう一度、「 Next」をクリックします。
8. いずれかのデータベース・ノードの情報と、データベースのユーザー名およびパスワードを入力し、「 Next」を クリックします。
9. 次の例のとおりにURLを入力します。

jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = apemrac1-vip)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl.apemrac.au.oracle.com)
(INSTANCE_NAME = orcl1)))



10. 「 Test Configuration」をクリックし、次のスクリーンショットのように、接続が成功したこ とを確認します。

img9

11. データソースのターゲットとして、管理対象サーバー「 lemon」を選択します。

img10

12. 「 Finish」をクリックします。

次に、RAC統合に必要なプール設定を変更します。

13. 新しく作成したデータソースをクリックします。
14. 「 Connection Pool」タブをクリックします。
15. ページ下部の「 Advanced」ノードを開いてすべてのプロパティを表示したら、次のプロパティを設定しま す。

 

Initial Capacity:

0

Test Connections On Reserve

CHECKED

Test Frequency:

300

Connection Creation Retry Frequency:

30

Seconds to Trust an Idle Pool Connection:

10


16. 次のドライバ・プロパティを設定します。

oracle.net.CONNECT_TIMEOUT=10000

17. 「 Savestrong>」ボタンをクリックします。
ドメインのconfig/jdbcディレクトリに含まれるデータソースは、次のようになります。

<?xml version='1.0' encoding='UTF-8 '?>
<jdbc-data-sour ce xmlns="http://w ww.bea.com/ns/w eblogic/jdbc-da ta-source" xmlns:sec="http ://www.bea.com/ ns/weblogic/90/ security" xmlns:wls="http ://www.bea.com/ ns/weblogic/90/ security/wls" xmlns:xsi="http ://www.w3.org/2 001/XMLSchema-i nstance" xsi:schemaLocat ion="http://www .bea.com/ns/web logic/jdbc-data -source http://www.bea. com/ns/weblogic /jdbc-data-sour ce/1.0/jdbc-dat a-source.xsd">
  <name>Node1DS</ name>
  <jdbc-driver-pa rams>
<url>jdbc:oracl e:thin:@(DESCRI PTION = (ADDRESS = (PROTOCOL = TCP)(HOST = apemrac1-vip)(P ORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MYHASERVICE.ape mrac.au.oracle. com) (INSTANCE_NAME = orcl1)))</url>
    <driver-name>or acle.jdbc.Oracl eDriver</driver -name>
    <properties>
      <property>
        <name>user</nam e>
        <value>juser</v alue>
      </property>
      <property>
        <name>oracle.ne t.CONNECT_TIMEO UT</name>
        <value>10000</v alue>
      </property>

    </properties>
    <password-encry pted>{3DES}LXJ8 4DPGhe8=</passw ord-encrypted>
  </jdbc-driver-p arams>
  <jdbc-connectio n-pool-params>
    <initial-capaci ty>0</initial-c apacity>
    <max-capacity>1 5</max-capacity >
    <capacity-incre ment>1</capacit y-increment>
    <shrink-frequen cy-seconds>900< /shrink-frequen cy-seconds>
    <highest-num-wa iters>214748364 7</highest-num- waiters>
    <connection-cre ation-retry-fre quency-seconds> 10</connection- creation-retry- frequency-secon ds>
    <connection-res erve-timeout-se conds>10</conne ction-reserve-t imeout-seconds>
    <test-frequency -seconds>300</t est-frequency-s econds>
    <test-connectio ns-on-reserve>t rue</test-conne ctions-on-reser ve>

    <ignore-in-use- connections-ena bled>true</igno re-in-use-conne ctions-enabled>
    <inactive-conne ction-timeout-s econds>0</inact ive-connection- timeout-seconds >
    <test-table-nam e>SQL SELECT 1 FROM DUAL</test-tabl e-name>
    <login-delay-se conds>0</login- delay-seconds>
    <statement-cach e-size>10</stat ement-cache-siz e>
    <statement-cach e-type>LRU</sta tement-cache-ty pe>
    <remove-infecte d-connections>t rue</remove-inf ected-connectio ns>
    <seconds-to-tru st-an-idle-pool -connection>0</ seconds-to-trus t-an-idle-pool- connection>
    <statement-time out>-1</stateme nt-timeout>
    <pinned-to-thre ad>false</pinne d-to-thread>
  </jdbc-connecti on-pool-params>
  <jdbc-data-sour ce-params>
    <jndi-name>jdbc /Node1DS</jndi- name>
    <global-transac tions-protocol> OnePhaseCommit< /global-transac tions-protocol>
  </jdbc-data-sou rce-params>
</jdbc-data-sou rce>



2番目のノードに対するデータソース#2の作成


上記の手順を繰り返し、今回はRACクラスタ内の2番目のノードを選択します。このデータソースの名前は" Node2DS" であり、今回も、ターゲットとして管理対象サーバー「 lemon」を選択します。

jdbc:oracle:thin:@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = apemrac2-vip)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl.apemrac.au.oracle.com)
(INSTANCE_NAME = orcl2)))


マルチ・データソースの作成

1. WebLogic管理コンソールにログインします。

http://<host>:<port>/console

2. " Domain Structure"ツリーの下の「 Services」 ノードを開きます。
3. 「 JDBC」ノードを開き、「 Multi Data Sources」をク リックします。
4. 「 New」ボタンをクリックします。
5. 次のスクリーンショットのとおりに、詳細情報を入力します。

img12

6. 「 Next」をクリックします。
7. マルチ・データソースのターゲットとして管理対象サーバー「 lemon」を選択し、「 Next」 をクリックします。
8. 「 Non XA Driver」オプションを選択し、「 Next」をクリッ クします。
9. のスクリーンショットのとおり、先ほど作成したデータソースを移動します。

img13

10. 「 Next」をクリックします。
11. 「 Finish」をクリックします。
12. 新しく作成したマルチ・データソースをクリックします。
13. " Test Frequency Seconds:" を " 5" 秒に設定します。
14. 「 Save」ボタンをクリックします。

このマルチ・データソースは、次のとおりに、ドメインのconfig/jdbcディレクトリ内に定義されます。

<?xml version='1.0' encoding='UTF-8 '?>
<jdbc-data-sour ce xmlns="http://w ww.bea.com/ns/w eblogic/jdbc-da ta-source" xmlns:sec="http ://www.bea.com/ ns/weblogic/90/ security" xmlns:wls="http ://www.bea.com/ ns/weblogic/90/ security/wls" xmlns:xsi="http ://www.w3.org/2 001/XMLSchema-i nstance" xsi:schemaLocat ion="http://www .bea.com/ns/web logic/jdbc-data -source http://www.bea. com/ns/weblogic /jdbc-data-sour ce/1.0/jdbc-dat a-source.xsd">
  <name>jdbc/racD S</name>
  <jdbc-connectio n-pool-params>
     <test-frequency -seconds>5</tes t-frequency-sec onds>
  </jdbc-connecti on-pool-params>
  <jdbc-data-sour ce-params>
    <jndi-name>jdbc /racDS</jndi-na me>
    <algorithm-type >Load-Balancing </algorithm-typ e>
    <data-source-li st>Node1DS,Node 2DS</data-sourc e-list>

    <failover-reque st-if-busy>fals e</failover-req uest-if-busy>
  </jdbc-data-sou rce-params>
</jdbc-data-sou rce>


の処理が完了すると、ドメインのconfig/jdbcディレクトリには新しく作成されたデータソースとマルチ・データソースが追加され、次のようになり ます。

[…/bea103/user_ projects/domain s/hadomain/conf ig/jdbc]$ d
total 56
-rw-r--r--   1 oracle oinstall  135 Nov 26 09:40 readme.txt
drwxr-xr-x  11 oracle oinstall 4096 Nov 27 12:31 ../
-rw-r--r--   1 oracle oinstall 2259 Dec  3 07:48 jdbc2fscottDS-8 614-jdbc.xml
drwxr-xr-x   2 oracle oinstall 4096 Dec  4 11:14 ./
-rw-r--r--   1 oracle oinstall  857 Dec  4 11:15 jdbc2fracDS-417 7-jdbc.xml
-rw-r--r--   1 oracle oinstall 2508 Dec  4 12:23 Node1DS-0882-jd bc.xml
-rw-r--r--   1 oracle oinstall 2508 Dec  4 12:27 Node2DS-9921-jd bc.xml

設定のテスト方法

設定をテストするため、単純なWARファイルをWebLogicサーバーにデプロイします。

1. ファイル・システムに、次のファイルをダウンロードします。

haweb.zip

2. ファイルを解凍すると、 " haweb.war"ファイルになります。
3. このファイルを管理対象サーバー(ここでは" lemon")にデプロイします。
4. デプロイが完了したら、次に示すように、メインの" Deployments"ページを参照して、アプリケーショ ンが稼働していることを確認します。

img14

5. 次のURLを使用して、アプリケーションを起動します。

http://<server>:<port>/haweb/

img15


これがメインのWebページであり、ここで、データソース・ロケーション、取得する接続の数、接続リクエスト間のスリープ時間を指定できます。最初のテス トでは、RACノード間でロードバランシングが実行されていることのみを確認します。

6. 次の情報を設定し、「 Test Data Source」ボタンをクリックします。

Data Source Location

jdbc/racDS

Connections to Retrieve

5

Sleep Time between Connection Gets

2 Seconds


以下に示すとおり、RACクラスタ内の2つのRACノードに接続できることを確認します。

RAC Integration with Oracle WebLogic Server 10.3

Managed Server Name

lemon

Data Source Location

jdbc/racDS

Number of Connections to Retrieve

5

Sleep Time Between Queries in seconds

2 seconds


Test number #1

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 2 second(s)

Test number #2

Instance

Server Host

Service Name

orcl1

apemrac1

orcl.apemrac.au.oracle.com


Sleeping for 2 second(s)

Test number #3

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 2 second(s)

Test number #4

Instance

Server Host

Service Name

orcl1

apemrac1

orcl.apemrac.au.oracle.com


Sleeping for 2 second(s)

Test number #5

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 2 second(s)

All done...

7. 次のテスト実行では、接続リクエスト間に30秒のスリープ時間を取って、10個の接続を取得します。また、実行中にいずれかのRACノードを強制的に停止 して、アプリケーションの実行が継続されること、そして、クラスタ内の使用可能なRACノードから接続が取得されることを確認します。次のURLを使用し て、メインのWebページへ戻ります。

http://<server>:<port>/haweb/

8. もっとも簡単にインスタンスを強制停止する方法として、いずれかのRACノードに対して"shutdown abort"を実行します。テストの実行を開始してからデータベース・インスタンスを停止するため、ここでは単に接続のみを実行します。


img17

9. テスト・ページを実行します。今回は、次に示すとおり、取得する接続数として10を指定し、接続取得間のスリープ時間として20秒を指定します。

Data Source Location

jdbc/racDS

Connections to Retrieve

10

Sleep Time between Connection Gets

20 Seconds



10. Webページ「 Test Data Source」ボタンをクリックします。

注:これにより、Webテストが開始されます。あとで、このウィンドウに戻ります。

11. データベース・セッション・ウィンドウに戻り、次に示すとおり、"shutdown abort"コマンドを発行します。

img18

12. 次に、Webブラウザに戻り、テストが完了したら、すべてのリクエストが残りのRACノードによって処理されたことを確認します。ここでは、残りのノード は2番目のデータベース・インスタンス・ノードである"orcl2"です。以下からわかるとおり、TEST #2のあと、orcl1は停止されたか、またはインスタンス・クラッシュが発生していますが、アプリケーションはクライアントへのサービスを中断すること なく、実行を継続しています。

RAC Integration with Oracle WebLogic Server 10.3

Managed Server Name

lemon

Data Source Location

jdbc/racDS

Number of Connections to Retrieve

10

Sleep Time Between Queries in seconds

20 seconds


Test number #1

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 20 second(s)

Test number #2

Instance

Server Host

Service Name

orcl1

apemrac1

orcl.apemrac.au.oracle.com


ORCL1 aborted via "shutdown abort" at this part of the TEST

Sleeping for 20 second(s)

Test number #3

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 20 second(s)

Test number #4

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 20 second(s)

Test number #5

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 20 second(s)

Test number #6

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 20 second(s)

Test number #7

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 20 second(s)

Test number #8

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 20 second(s)

Test number #9

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 20 second(s)

Test number #10

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 20 second(s)

All done...

13. 次に示すとおり、データベース・インスタンスを再起動します。

img19


14. 次に、以下のとおり、先ほど起動したインスタンス " orcl1"がロードバランシングに含まれるかどうかを 検証します。

RAC Integration with Oracle WebLogic Server 10.3

Managed Server Name

lemon

Data Source Location

jdbc/racDS

Number of Connections to Retrieve

4

Sleep Time Between Queries in seconds

2 seconds


Test number #1

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 2 second(s)

Test number #2

Instance

Server Host

Service Name

orcl1

apemrac1

orcl.apemrac.au.oracle.com


Sleeping for 2 second(s)

Test number #3

Instance

Server Host

Service Name

orcl2

apemrac2

orcl.apemrac.au.oracle.com


Sleeping for 2 second(s)

Test number #4

Instance

Server Host

Service Name

orcl1

apemrac1

orcl.apemrac.au.oracle.com


Sleeping for 2 second(s)

All done...

トラブルシューティング

Q. "Webテスト・プログラム"では、すべての接続リクエストに対して1つのデータベース・ノードのみが使用されているようです。

A. ラスタ内のすべてのデータベース・インスタンスが稼働していることを確認してください。また、それぞれのインスタンスごとに独自のリスナーが実行されてお り、 "Service Policy"として "preferred"が指定されたサービスがノードごとに起動されていることを確認してください。さらに、中間層へ進む前に、 SQL*Plus テスト・クライアントがノード間でロードバランシングされていることを確認してください。

Q. SQL*Plusからテストを実行するには、データベース・サーバーへ移動する必要がありますか? PCでローカルに、または中間層サーバーでテストを実行する方法はありませんか?

A. RACノードにアクセスできない場合、サポートされている任意のプラットフォームにInstant Clientをインストールして、これをテストに使用できます。使用するデータベース・サーバーのバージョンに合うInstant Clientをダウンロードしてください。

Instant Client のダウンロード

Q. 正しい動作をテストするために、RACインスタンスを正常に停止する方法を教えてください。

A. RACインスタンスを正常終了するには、たとえば、次の2つのオプションを使用できます。

オプション1

1. sqlplus / as sysdba
2. shutdown immediate;

オプション2

1. srvctl stop instance -d R2D1 -i R2D11

Q. haweb.warのソース・コードを入手できますか?

A. ここからOracle JDeveloper 11g BOXERワークスペースをダウンロードできます。 ⇒ WLS103JDBCDemos.zip

Q. Oracle RACやOracle WebLogic Server 10.3に関する情報は、どこから入手できますか?

A. 以下のWebサイトにあるドキュメントを参照してください。

http://otndnld.oracle.co.jp/document/products/wls/docs103/jdbc_admin/oracle_rac.html

Oracle WebLogic Server

Oracle Database 11g Release 2