Search

oracle rac ロードバランス

2015年10月19日

ロードバランシングについて

racのロードバランシングには大きく2種類ある。

・クライアント・ロード・バランス

・サーバサイド・ロード・バランス (リスナー・ロード・バランス)

わかりやすいイメージは以下になります。

http://enterprisezine.jp/dbonline/detail/4600?p=2 より参照

クライアント・ロード・バランス

ランダムにリスナーへ接続をする。(ラウンドロビンではなく、ランダム)
アルゴリズムは不明。注意点としては、ランダムなので、100%均等に振り分けられるわけではない。

設定方法

クライアントのtnsnames.oraに以下のように記載する。

(LOAD_BALANCE=ON)を記載することで有効になる。

TEST=
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (LOAD_BALANCE=ON)
      (ADDRESS = (PROTOCOL = TCP)(HOST = [VIP1])(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = [VIP2])(PORT = 1521))
     )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = hoge)
    )
  )

サーバサイド・ロード・バランス

これはcpuの負荷、またはセッション数のどちらかで負荷分散を可能とする。

注意点としては、100%均等に振り分けられるわけではない。振り分けられていることを確認するために数時間のセッションデータが必要となる。

設定方法 <セッション数での負荷分散の場合>

セッション数での負荷分散の場合

show parameter _listener

NAME            TYPE        VALUE
--------------- ----------- ------------------------------
local_listener  string      (DESCRIPTION=(ADDRESS_LIST=
                              (ADDRESS=(PROTOCOL=TCP)(HOST=[VIP1])(PORT=1521))))
remote_listener string      hoge
≪DBサーバのtnsnames.oraに以下を記載≫
hoge =
  (ADDRESS_LIST=
    (ADDRESS=(PROTOCOL=TCP)(HOST=[VIP1])(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=[VIP2])(PORT=1521))
  )
)
1
<div>設定方法 <CPU負荷での負荷分散の場合> ※これは実際にやったことない。。。</div>
セッション数での負荷分散の設定と合わせ、dbms_serviceを操作し、ロード・バランシング・アドバイザを設定するそうです。

<a href="http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19245-02/d_serv.htm" target="_blank">dbms_serviceの設定</a>

ちなみに以下のような状態はGOAL値はロードバランシング無効となっている。
1
select SERVICE_ID
     , NAME
     , NETWORK_NAME
     , GOAL
     , CLB_GOAL
  from dba_services
;
SERVICE_ID NAME            NETWORK_NAME    GOAL         CLB_G
---------- --------------- --------------- ------------ -----
         1 SYS$BACKGROUND                  NONE         SHORT
         2 SYS$USERS                       NONE         SHORT
         3 racXDB          racXDB                       LONG
         4 hoge            rac                          LONG
----------------------------------------
確認方法

hoge1のlistener.logに以下のようなログが確認できればOK。
(INSTANCE_NAME=hoge1)が出ているとこちらに振り分けられたという意味。

03-JUN-2013 10:11:52 *
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=hoge)(CID=(PROGRAM=checksubscribelog)(HOST=******)(USER=mail))(INSTANCE_NAME=hoge1))
* (ADDRESS=(PROTOCOL=tcp)(HOST=******)(PORT=******)) * establish * rac * 0

詳しい解説

 

備考

クライアント・ロード・バランスとサーバサイド・ロード・バランスは併用することが可能。