负载均衡设备oracle,Oracle RAC 服务器端联接负载均衡(Load Balance)
Oracle RAC 服務器端連接負載均衡(Load Balance)
Oracle RAC服務器端的負載均衡是根據RAC中各節點的連接負荷數情況,將新的連接請求分配到負荷最小的節點上去。當數據庫處于運行時,RAC中各節點的PMON進程每3秒會將各自節點的連接負荷數更新到service_register。而對于節點中任意監聽器故障或監聽器意外失敗時,PMON進程會每1秒鐘檢查當前節點上的監聽是否重啟,以獲得最新的負載信息來及時調整負載均衡。本文主要演示suse 10 + oracle 10g rac下的服務器端的負載均衡。
有關客戶端的負載均衡可參考
Oracle RAC 客戶端連接負載均衡(Load Balance)
配置RAC負載均衡與故障轉移
有關Oracle 網絡配置相關基礎以及概念性的問題請參考:
配置ORACLE 客戶端連接到數據庫
配置非默認端口的動態服務注冊
配置sqlnet.ora限制IP訪問Oracle
Oracle 監聽器日志配置與管理
設置 Oracle 監聽器密碼(LISTENER)
Oracle RAC 監聽配置
ORACLE RAC 下非缺省端口監聽配置(listener.ora tnsnames.ora)
一、服務器端負載均衡配置1、為tnsnames.ora 添加相應的網絡服務名(每個節點配置)
oracle@bo2dbp:~> more $ORACLE_HOME/network/admin/tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/oracle/db/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
remote_lsnr_gobo4 =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))
)
local_lsnr_gobo4a =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))
)
local_lsnr_gobo4b =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))
)
2、設置remote_listener參數
alter system set remote_listener='' scope=both sid='*';
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string GOBO4A
SQL> show parameter listener
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string
remote_listener string
SQL> alter system set remote_listener='remote_lsnr_gobo4' scope=both sid='*';
System altered.
3、配置客戶端tnsnames.ora
-->客戶端為suse 10
SZDB:~ # ifconfig eth1 | grep "inet addr"|cut -d " " -f12|cut -d : -f2 #--客戶端主機的ip
192.168.7.2
SZDB:~ # su - oracle
oracle@SZDB:~> tail -10 $ORACLE_HOME/network/admin/tnsnames.ora
GOBO4 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))
(LOAD_BALANCE = off) #--由于僅僅測試寄予服務器端的負載均衡,因此關閉客戶端負載均衡選項
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = GOBO4)
)
)
#Author : Robinson Cheng
#Blog : http://blog.csdn.net/robinson_0612
4、檢查監聽情況
oracle@bo2dbp:~> lsnrctl status
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.61)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.51)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...
Service "GOBO4" has 2 instance(s).
Instance "GOBO4A", status READY, has 2 handler(s) for this service...
Instance "GOBO4B", status READY, has 1 handler(s) for this service..
.......
oracle@bo2dbs:~> lsnrctl status
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.62)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.52)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM2", status BLOCKED, has 1 handler(s) for this service...
Service "GOBO4" has 2 instance(s).
Instance "GOBO4A", status READY, has 1 handler(s) for this service...
Instance "GOBO4B", status READY, has 2 handler(s) for this service...
..........
#--如果監聽或數據庫需要重啟異常請考慮重新啟動監聽器或數據庫
#--下面清空監聽日志以便于后續統計連接信息
oracle@bo2dbp:/u01/oracle/db/network/log> cat /dev/null>listener_bo2dbp.log
oracle@bo2dbs:/u01/oracle/db/network/log> cat /dev/null>listener_bo2dbs.log
二、測試服務器端的負載均衡1、從客戶端建立連接
oracle@SZDB:~> more load_balance.sh
#!/bin/bash
for i in {1..1000}
do
echo $i
sqlplus -S system/oracle@GOBO4 <
select instance_name from v\$instance;
EOF
sleep 1
done
exit 0
oracle@SZDB:~> ./load_balance.sh >srv_load_bal.log
2、分析監聽日志
oracle@bo2dbp:/u01/oracle/db/network/log> more listener_bo2dbp.log
12-OCT-2012 12:00:10 * service_update * GOBO4B * 0 #節點bo2dbs上的實例GOBO4B的更新到bo2dbp上監聽器的更新信息
12-OCT-2012 12:00:35 * service_update * GOBO4B * 0
12-OCT-2012 12:01:04 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)
(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=50322)) * establish * GOBO4 * 0
12-OCT-2012 12:01:05 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)
(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=50325)) * establish * GOBO4 * 0
12-OCT-2012 12:01:07 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)
(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=50328)) * establish * GOBO4 * 0
12-OCT-2012 12:01:08 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)
(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=50330)) * establish * GOBO4 * 0
#上面的日志片斷中可以看出全部是客戶端發起的到bo2dbp節點上的建立連接的信息
#下面來查看bo2dbs上的監聽日志
oracle@bo2dbs:/u01/oracle/db/network/log> more listener_bo2dbs.log
12-OCT-2012 12:00:10 * service_update * GOBO4B * 0
12-OCT-2012 12:00:10 * service_update * GOBO4B * 0
12-OCT-2012 12:00:14 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=bo2dbs)(USER=oracle))(COMMAND=status)(ARGUMENTS=64)
(SERVICE=LISTENER_BO2DBS)(VERSION=169870080)) * status * 0
12-OCT-2012 12:00:35 * service_update * GOBO4B * 0
12-OCT-2012 12:00:35 * service_update * GOBO4B * 0
12-OCT-2012 12:01:04 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)
(USER=oracle))(INSTANCE_NAME=GOBO4B)) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=61862)) * establish * GOBO4 * 0
12-OCT-2012 12:01:07 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)
(USER=oracle))(INSTANCE_NAME=GOBO4B)) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=61868)) * establish * GOBO4 * 0
12-OCT-2012 12:01:09 * (CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=GOBO4)(CID=(PROGRAM=sqlplus@SZDB)(HOST=SZDB)
(USER=oracle))(INSTANCE_NAME=GOBO4B)) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.2)(PORT=61872)) * establish * GOBO4 * 0
#在12-OCT-2012 12:01:04時刻,連接信息中有INSTANCE_NAME=GOBO4B的連接信息,而節點bo2dbp上也有一條類似的信息,因此該條連接
#日志是由節點bo2dbp轉發過來而建立的連接請求。
#同樣在12-OCT-2012 12:01:07時刻,節點bo2dbp轉發過來而建立的連接請求。
#小結一下,
#對于直接連接,監聽器日志中將出現establish,且不含有INSTANCE_NAME=GOBO4B 字樣
#而對于轉發的連接,則轉發節點與接收的節點同時存在連接信息,轉發節點上存在連接信息的與普通的連接請求一樣,
#而接收的節點上存在INSTANCE_NAME= 信息
3、檢查負載均衡結果
oracle@SZDB:~> grep GOBO4A srv_load_bal.log |wc -l
755
oracle@SZDB:~> grep GOBO4B srv_load_bal.log |wc -l
245
#從上面的日志文件中可知總共有755個客戶端連接到了gobo4a,有245各客戶端連接到了gobo4b
#下面查看監聽器日志來獲得連接信息
#下面的查詢中在節點bo2dbp上總共有接受了1000個用戶連接
oracle@bo2dbp:/u01/oracle/db/network/log> grep establish listener_bo2dbp.log |wc -l
1000
#下面的查詢查看是否有從節點bo2dbs轉發過來的連接,結果為0,說明沒有任何連接請求從bo2dbs轉發過來
oracle@bo2dbp:/u01/oracle/db/network/log> grep INSTANCE_NAME=GOBO4 listener_bo2dbp.log |wc -l
0
#接下來查看節點bo2dbs的監聽日志,可以看出總共接受了245個連接請求
oracle@bo2dbs:/u01/oracle/db/network/log> grep establish listener_bo2dbs.log |wc -l
245
#下面的過濾情況也表明在節點bo2dbs上的連接是從bo2dbp上轉發的連接,而非客戶端直接到bo2dbs的請求連接
oracle@bo2dbs:/u01/oracle/db/network/log> grep INSTANCE_NAME=GOBO4 listener_bo2dbs.log |wc -l
245
#從監聽器的日志檢查可以,測試中的連接全部請求到節點bo2dbp,是由于tnsnames.ora中ADDRESS的第一個IP地址就是bo2dbp的IP
#因此所有的連接都是請求到bo2dbp,而沒有客戶端發出到bo2dbs的連接請求
#其次是盡管在bo2dbp有1000個連接請求,而真正建立連接的只有755個,有245轉發到了節點bo2dbs
三、總結????? 1、服務器端的負載均衡需要配置remote_listener參數,而該參數的值依賴于tnsnames.ora的連接字符串
2、對于基于服務器端的連接負載均衡,監聽器會根據當前節點、實例上的連接負載情況進行轉發到空閑的實例
3、轉發的依據僅僅是當前節點監聽的連接數量的多少,而非當前實例的過度負載
4、從上面的測試可以得出,各個節點的連接并不算均衡,是相對的均衡,因此應結合客戶端連接負載協同工作
5、對于當前實例的過度負載的情形,應結合配置service方法來實現負載均衡
四、更多參考
有關基于用戶管理的備份和備份恢復的概念請參考
Oracle 冷備份
Oracle 熱備份
Oracle 備份恢復概念
Oracle 實例恢復
Oracle 基于用戶管理恢復的處理
SYSTEM 表空間管理及備份恢復
SYSAUX表空間管理及恢復
Oracle 基于備份控制文件的恢復(unsing backup controlfile)
有關RMAN的備份恢復與管理請參考
RMAN 概述及其體系結構
RMAN 配置、監控與管理
RMAN 備份詳解
RMAN 還原與恢復
RMAN catalog 的創建和使用
基于catalog 創建RMAN存儲腳本
基于catalog 的RMAN 備份與恢復
RMAN 備份路徑困惑
有關ORACLE體系結構請參考
Oracle 表空間與數據文件
Oracle 密碼文件
Oracle 參數文件
Oracle 聯機重做日志文件(ONLINE LOG FILE)
Oracle 控制文件(CONTROLFILE)
Oracle 歸檔日志
Oracle 回滾(ROLLBACK)和撤銷(UNDO)
Oracle 數據庫實例啟動關閉過程
Oracle 10g SGA 的自動化管理
Oracle 實例和Oracle數據庫(Oracle體系結構)
總結
以上是生活随笔為你收集整理的负载均衡设备oracle,Oracle RAC 服务器端联接负载均衡(Load Balance)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab 自动扫雷,MATLAB自动
- 下一篇: oracle备份慢,诊断Oracle R