負載平衡是指把負載平均分配到叢集中的各個節點,從而提高整體效能。Oracle RAC提供兩種方式實現負載平衡,以下就為大家詳細介紹一下,需要的朋友可以參考下
Oracle RAC提供兩種方式實現負載平衡,第一種是純技術手段,即在使用者串連時,根據系統當前的負載情況決定由哪個節點處理使用者請求;第二種是面向業務,人為的把應用切分成很多service,通過某個service過來的串連請求都由某個節點處理。下面來具體看看這兩種手段:
純技術手段 (連線導向的負載平衡)
1. 用戶端負載平衡
配置方法是在用戶端tnsnames.ora檔案中設定LOAD_BALANCE=YES,當用戶端發起串連時,會從地址清單中隨機選取一個,把串連請求隨機分散給各個執行個體。
這個技術的最大缺點在於不能根據各個執行個體的真實負載情況來分散請求,太過粗糙,因此很少使用。
2. 伺服器端負載平衡
伺服器端負載平衡依賴於Listener收集的負載資訊,在資料庫運行過程 中,pmon進程會收集系統的負載資訊,定期更新至Listener中。如果你配置了Remote_listener參數,pmon進程不但能把負載資訊 註冊到本地Listener,也可以註冊到其它執行個體的Listener。這樣有了pmon自動註冊機制後,叢集的每個節點的Listener都掌握了所有 節點的負載資訊,當收到用戶端請求時,會把串連分配給負載最小的執行個體。
面向業務手段 (利用Service負載平衡)
上 面介紹了純技術手段進行的負載平衡,看起來很美好,但在實際使用中,可能會帶來非常大的效能問題。大家都知道,RAC由於其share-disk的架構, 它的效能很大程度上依賴於記憶體融合(Cache Fusion),純技術手段無法知道業務的具體情況,因此它可能把同一個業務的串連分散到各個執行個體中,導致大量的記憶體融合,效能急劇下降。
如果我們換一種思路,把同一種應用程式的串連分到同一個執行個體上,比如A應用程式的串連都連在A執行個體,B應用程式的串連都連在B執行個體上,這樣就能夠有效地減少記憶體融合。
對應用的劃分可以通過service實現,這需要DBA和開放人員合作,在瞭解業務特點的情況下配置service