服務(wù)器端RAC負(fù)載均衡配置代碼
前面我們介紹了RAC的客戶端負(fù)載均衡配置,接下來就到了服務(wù)器端RAC負(fù)載均衡配置的具體代碼介紹了,通過兩方面的配置和測(cè)試之后,整個(gè)負(fù)載均衡才能完全的設(shè)置好。那么就讓我們趕緊來看一下啊具體的服務(wù)器端RAC負(fù)載均衡配置內(nèi)容吧。
從Oracle 10g開始,服務(wù)器端負(fù)載均衡可以根據(jù)RAC中各節(jié)點(diǎn)的負(fù)荷及連接數(shù)情況,而判定將新的客戶端連接分配到負(fù)荷最小的節(jié)點(diǎn)上去。RAC中各節(jié)點(diǎn)的PMON進(jìn)程每3秒會(huì)將各自節(jié)點(diǎn)的負(fù)荷(包括LOAD、最大LOAD、CPU使用率)及連接數(shù)更新到service_register里面,然后假如節(jié)點(diǎn)的負(fù)荷有發(fā)生變化,將會(huì)通知到監(jiān)聽程序,由監(jiān)聽程序再?zèng)Q定新的客戶端連接分配至哪個(gè)節(jié)點(diǎn)。假如RAC中一個(gè)節(jié)點(diǎn)的監(jiān)聽失敗了,PMON每一分鐘會(huì)去檢查一次是否已經(jīng)恢復(fù)正常。
服務(wù)器端的監(jiān)聽配置是在各節(jié)點(diǎn)的tnsnames.ora里面添加一個(gè)連接到各個(gè)節(jié)點(diǎn)監(jiān)聽的條目,然后再在初始化參數(shù)里面設(shè)置remote_listeners這個(gè)參數(shù)。
1、測(cè)試客戶端的TNS
修改客戶端tnsnames.ora的文件,內(nèi)容如下:
- RACDB =
- (DESCRIPTION =
- (ADDRESS_LIST =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.170)(PORT = 1521))
- )
- (CONNECT_DATA =
- (SERVICE_NAME = racdb.chenxu.yo2.cn)
- )
- )
測(cè)試連接:
- SQL> conn sys/chenxu@racdb as sysdba
- 已連接。
- SQL>
- SQL> show parameter instance_name
- NAME TYPE VALUE
- ------------------------------------ ----------- ---------------------
- instance_name string RACDB1
#p#2、配置服務(wù)器端TNS
服務(wù)器端的監(jiān)聽配置是在各節(jié)點(diǎn)的tnsnames.ora里面添加一個(gè)連接到各個(gè)節(jié)點(diǎn)監(jiān)聽的條目(紅色代碼),在服務(wù)器端每個(gè)節(jié)點(diǎn)的tnsnames.ora里面的內(nèi)容如下:
- [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è)置參數(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命令可以撤銷設(shè)置,恢復(fù)默認(rèn)值)
- 系統(tǒng)已更改。
- SQL>
- SQL> show parameter remote_listener
- NAME TYPE VALUE
- ------------------------------------ ----------- ---------------------
- remote_listener string LISTENERS_RACDB
正確配置參數(shù)后,通過lsnrctl status命令看到在監(jiān)聽啟動(dòng)以后,可以看到監(jiān)聽器上有2個(gè)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
這時(shí)在客戶端用sqlplus連接服務(wù)器數(shù)據(jù)庫(kù)可能會(huì)出現(xiàn)如下錯(cuò)誤:
- ERROR:
- ORA-12545: 因目標(biāo)主機(jī)或?qū)ο蟛淮嬖?連接失敗
#p#4、解決ORA-12545連接失敗問題
配置客戶端的Hosts文件
通過在客戶端的Hosts文件中加入對(duì)兩個(gè)服務(wù)名的名字解析可以解決ORA-12545問題。在windows下Hosts文件在C:\WINDOWS\system32\drivers\etc目錄下,在linux修改/etc/hosts文件的內(nèi)容。添加如下內(nèi)容:
- 192.168.1.170 node01
- 192.168.1.171 node02
- 其中node01、node02為服務(wù)器節(jié)點(diǎn)的主機(jī)名。
- [root@NODE01 bin]# hostname
- NODE01
5、通過客戶端測(cè)試RAC負(fù)載均衡配置
- 開啟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
可以看到客戶端能夠連接到實(shí)例RACDB2,說明基于服務(wù)器端RAC負(fù)載均衡配置成功。