星期四, 12月 01, 2011

[轉載 + 心得] Oracle 9i , 10g , 11g load balance

Oracle 9i , 10g , 11g load balance
--
Ref : http://space.itpub.net/35489/viewspace-600653
-
在Oracle9i,10g,11g版本中都適用的LB配置分為以下兩種。
(1) Client Side Connect Time Load Balance
(2) Server SideListenerConnection Load Balance (此處的Listener用以跟10g之後的Server Side Service Load Balance區分開)  關於10g之後的設定則看[[Oracle 10g rac workload balancing]]
1. Client Side Connect Time Load Balance
既然是Client端的LB,那麼也就是不需要在資料庫伺服器端配置任何參數,完全由用戶端機器上的tnsnames.ora檔中對於TNS的配置來決定,實際上也就是LOAD_BALANCE參數。
看一個例子,下面這樣的TNS配置就是啟用了用戶端的LB。
CLIENT_LOADBALANCE =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521))
      (LOAD_BALANCE = yes)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = rac_lb)
    )
  )
(LOAD_BALANCE = yes)指示SQLNet隨機選擇ADDRESS_LIST列表中的任意一個監聽,將用戶端請求發送到此監聽上,通過這種方法來實現負載平衡。如果(LOAD_BALANCE = no)那麼將會按照ADDRESS_LIST列表中的順序選擇監聽,只要這個監聽能夠正常連接那麼就使用該監聽。
因此在某些負載平衡的解決方案中會使用(LOAD_BALANCE = no)但是在多個用戶端或者應用伺服器端配置順序不同的ADDRESS_LIST,以此來實現人為的負載平衡。
如果在TNS配置時使用的是ADDRESS_LIST語法,那麼必須顯示設置LOAD_BALANCE = yes,預設值LOAD_BALANCE = no。
2. Server Side Listener Connection Load Balance
要實現server side load balance要求監聽能夠知道在整個RAC環境中的各節點負載情況,節點負載情況是由PMON進程來定期更新的,而要讓PMON進程能夠通知其他節點自己節點的負載情況則需要設置資料庫初始化參數REMOTE_LISTENER。
在RAC資料庫伺服器端的每個節點上的tnsnames.ora檔中設置如下的TNS名稱。
LISTENERS_RAC =
(DESCRIPTION =
 (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST=node1-vip)(PORT = 1521))
  (ADDRESS = (PROTOCOL = TCP)(HOST=node2-vip)(PORT = 1521))
 )
)
然後設置REMOTE_LISTENER參數值為LISTENERS_RAC
sql>ALTER system SET REMOTE_LISTENER='LISTENERS_RAC' scope=BOTH;
當某個實例的監聽收到用戶端連接請求,將會統籌考慮RAC環境中各個節點的負載情況,然後將該連接傳遞到具有最小負載的節點的最小負載實例上。
在10gR2版本之後,節點和實例的負載計算通過lbscore來完成,而lbscore則由兩個動態值決定:”goodness” 和 “delta”,這兩個值均由PMON來定期更新,計算公式如下:
Lbscore = Goodness (Received from PMON update)
Delta = New Delta (Received from PMON update)
在PMON定期更新的間隔,如果有新連接進入,那麼lbscore的計算公式是:
Lbscore = Lbscore(previous) + Listener Delta
可以通過添加監聽的trace(TRACE_LEVEL_LISTENER = 16)來獲取lbscore的產生情況,更詳細的文檔請參看Metalink Note: 263599.1。
關於Failover,多說一句,其實Failover也有兩種,一種是Connect Time Failover,由用戶端TNS配置的(failover=on)參數控制,另外一種是TAF,由用戶端TNS配置中的failover_mode參數控制。

--
10g的connection load balancing可參考[[Oracle 9i , 10g , 11g load balance]] (B28759)''Oracle® Database
2 Day + Real Application Clusters Guide 10g Release 2 (10.2)''
-
Server load  balancing
(p.103)Workload balancing 可以選用兩種
1.Service Time-所有連線加總時間,如較少則分給該Node
2.Throughput - 根據消耗的CPU time,
OEM->[Maintenance]->[Services]
設定[Enable Load Banancing Advisory]: 選擇 Service TimeThroughput

Client load balancing : 在tnsnames.ora中/ AP端的Connection String定義

--For 10g RAC tests
經過實測後 發現 就算關閉Client load balance (LOAD_BALANCE = no) , (FAILOVER=yes) 後, 為何還是會隨機連到 RAC nodes
==> 須關閉Server load balance
==> unset remote listener parameter

--For 11g RAC test
remote_listener 是註冊到scan-listener , 所以預設也是會有server load balance....
ex : remote_listener string myrac-cluster-scan:1521

2015.12.3.update
failover預設值為yes
(failover=on) is default for ADDRESS_LISTs, DESCRIPTION_LISTs, and a set of  DESCRIPTIONs., therefore, you do not have to specify it explicitly. 

沒有留言:

LinkWithin-相關文件

Related Posts Plugin for WordPress, Blogger...