服務器端RAC負載均衡配置代碼
前面我們介紹了RAC的客戶端負載均衡配置,接下來就到了服務器端RAC負載均衡配置的具體代碼介紹了,通過兩方面的配置和測試之后,整個負載均衡才能完全的設置好。那么就讓我們趕緊來看一下啊具體的服務器端RAC負載均衡配置內容吧。
從Oracle 10g開始,服務器端負載均衡可以根據(jù)RAC中各節(jié)點的負荷及連接數(shù)情況,而判定將新的客戶端連接分配到負荷最小的節(jié)點上去。RAC中各節(jié)點的PMON進程每3秒會將各自節(jié)點的負荷(包括LOAD、最大LOAD、CPU使用率)及連接數(shù)更新到service_register里面,然后假如節(jié)點的負荷有發(fā)生變化,將會通知到監(jiān)聽程序,由監(jiān)聽程序再決定新的客戶端連接分配至哪個節(jié)點。假如RAC中一個節(jié)點的監(jiān)聽失敗了,PMON每一分鐘會去檢查一次是否已經恢復正常。
服務器端的監(jiān)聽配置是在各節(jié)點的tnsnames.ora里面添加一個連接到各個節(jié)點監(jiān)聽的條目,然后再在初始化參數(shù)里面設置remote_listeners這個參數(shù)。
1、測試客戶端的TNS
修改客戶端tnsnames.ora的文件,內容如下:
- RACDB =
- (DESCRIPTION =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.170)(PORT = 1521))
- )
- (CONNECT_DATA =
- (SERVICE_NAME = racdb.chenxu.yo2.cn)
- )
- )
測試連接:
- SQL> conn sys/chenxu@racdb as sysdba
- 已連接。
- SQL>
- SQL> show parameter instance_name
- NAME TYPE VALUE
- ------------------------------------ ----------- ---------------------
- instance_name string RACDB1
#p#2、配置服務器端TNS
服務器端的監(jiān)聽配置是在各節(jié)點的tnsnames.ora里面添加一個連接到各個節(jié)點監(jiān)聽的條目(紅色代碼),在服務器端每個節(jié)點的tnsnames.ora里面的內容如下:
- [root@NODE01 admin]# pwd
- /orac/orahome/oracle/product/10.2.0/db_1/network/admin
- [root@NODE01 admin]#
- [root@NODE01 admin]# more tnsnames.ora
- # tnsnames.ora Network Configuration File: /orac/orahome/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora
- # Generated by Oracle configuration tools.
- RACDB1 =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = vip01)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = RACDB.chenxu.yo2.cn)
- (INSTANCE_NAME = RACDB1)
- )
- )
- RACDB =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = vip01)(PORT = 1521))
- (ADDRESS = (PROTOCOL = TCP)(HOST = vip02)(PORT = 1521))
- (LOAD_BALANCE = yes)
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = RACDB.chenxu.yo2.cn)
- )
- )
- LISTENERS_RACDB =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP)(HOST = vip01)(PORT = 1521))
- (ADDRESS = (PROTOCOL = TCP)(HOST = vip02)(PORT = 1521))
- )
- RACDB2 =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = vip02)(PORT = 1521))
- (CONNECT_DATA =
- (SERVER = DEDICATED)
- (SERVICE_NAME = RACDB.chenxu.yo2.cn)
- (INSTANCE_NAME = RACDB2)
- )
- )
#p#3、在初始化參數(shù)中設置參數(shù)remote_listeners
- SQL> conn sys/chenxu@racdb as sysdba
- 已連接。
- SQL> show parameter remote_listener
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------
- remote_listener string
- SQL>
- SQL> alter system set remote_listener='LISTENERS_RACDB' sid='*';
- #(reset命令可以撤銷設置,恢復默認值)
- 系統(tǒng)已更改。
- SQL>
- SQL> show parameter remote_listener
- NAME TYPE VALUE
- ------------------------------------ ----------- ---------------------
- remote_listener string LISTENERS_RACDB
正確配置參數(shù)后,通過lsnrctl status命令看到在監(jiān)聽啟動以后,可以看到監(jiān)聽器上有2個instance。
- [root@NODE01 bin]# lsnrctl status
- LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 18-DEC-2008 05:40:08
- Copyright (c) 1991, 2005, Oracle. All rights reserved.
- Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
- STATUS of the LISTENER
- ------------------------
- Alias LISTENER_NODE01
- Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production
- Start Date 18-DEC-2008 00:18:07
- Uptime 0 days 5 hr. 22 min. 1 sec
- Trace Level off
- Security ON: Local OS Authentication
- SNMP OFF
- Listener Parameter File /orac/orahome/oracle/product/10.2.0/db_1/network/admin/listener.ora
- Listener Log File /orac/orahome/oracle/product/10.2.0/db_1/network/log/listener_node01.log
- Listening Endpoints Summary...
- (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.170)(PORT=1521)))
- (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.180)(PORT=1521)))
- (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
- Services Summary...
- Service "+ASM" has 1 instance(s).
- Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...
- Service "+ASM_XPT" has 1 instance(s).
- Instance "+ASM1", status BLOCKED, has 1 handler(s) for this service...
- Service "RACDB.chenxu.yo2.cn" has 2 instance(s).
- Instance "RACDB1", status READY, has 2 handler(s) for this service...
- Instance "RACDB2", status READY, has 1 handler(s) for this service...
- Service "RACDBXDB.chenxu.yo2.cn" has 2 instance(s).
- Instance "RACDB1", status READY, has 1 handler(s) for this service...
- Instance "RACDB2", status READY, has 1 handler(s) for this service...
- Service "RACDB_XPT.chenxu.yo2.cn" has 2 instance(s).
- Instance "RACDB1", status READY, has 2 handler(s) for this service...
- Instance "RACDB2", status READY, has 1 handler(s) for this service...
- The command completed successfully
這時在客戶端用sqlplus連接服務器數(shù)據(jù)庫可能會出現(xiàn)如下錯誤:
- ERROR:
- ORA-12545: 因目標主機或對象不存在,連接失敗
#p#4、解決ORA-12545連接失敗問題
配置客戶端的Hosts文件
通過在客戶端的Hosts文件中加入對兩個服務名的名字解析可以解決ORA-12545問題。在windows下Hosts文件在C:\WINDOWS\system32\drivers\etc目錄下,在linux修改/etc/hosts文件的內容。添加如下內容:
- 192.168.1.170 node01
- 192.168.1.171 node02
- 其中node01、node02為服務器節(jié)點的主機名。
- [root@NODE01 bin]# hostname
- NODE01
5、通過客戶端測試RAC負載均衡配置
- 開啟sqlplus_1:
- SQL> conn sys/chenxu@racdb as sysdba
- 已連接。
- SQL> show parameter instance_name
- NAME TYPE VALUE
- ------------------------------------ ----------- ---------------
- instance_name string RACDB1
開啟sqlplus_2:
- SQL> conn sys/chenxu@racdb as sysdba
- 已連接。
- SQL> show parameter instance_name
- NAME TYPE VALUE
- ------------------------------------ ----------- -------------
- instance_name string RACDB2
可以看到客戶端能夠連接到實例RACDB2,說明基于服務器端RAC負載均衡配置成功。