Oracle 10g RAC的負載均衡配置[轉載]

Oracle 10g RAC的負載均衡配置php

負載均衡是指鏈接的負載均衡。RAC的負載均衡主要是指新會話鏈接到RAC數據庫時,如何斷定這個新的鏈接要連到哪一個節點進行工做。在RAC中,負載均衡分爲兩種,一種是基於客戶端鏈接的,另一種是基於服務器端的。html

1、客戶端負載均衡的配置node

1、當前服務器中的數據庫版本以下:linux

SQL> select * from v$version;web

 

BANNERsql

----------------------------------------------------------------數據庫

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prodwindows

PL/SQL Release 10.2.0.1.0 - Production服務器

CORE    10.2.0.1.0      Productionoracle

TNS for Linux: Version 10.2.0.1.0 - Production

NLSRTL Version 10.2.0.1.0 - Production

2、在客戶端的tnsnames.ora的配置中,只要鏈接的是整個數據庫的服務名,不是實例名。

在服務器端查看RAC數據庫的service_names:

SQL> show parameter service_names

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

service_names                        string      RACDB.chenxu.yo2.cn

SQL>

3、在客戶端配置TNS:

客戶端的負載均衡配置相對簡單,只須要在tnsnames.ora中添加LOAD_BALANCE=ON這麼一個選項便可。

RACDB =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.170)(PORT = 1521))

      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.171)(PORT = 1521))

      (LOAD_BALANCE = on)

    )

    (CONNECT_DATA =

      (SERVICE_NAME = racdb.chenxu.yo2.cn)

    )

  )

配置TNS中的HOST值是服務器端RAC配置中的虛擬IP即VIP,以下:

[root@NODE01 admin]# more /etc/hosts

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1       localhost.localdomain   localhost

::1     localhost6.localdomain6 localhost6

 

192.168.1.180         node01

192.168.1.181         node02

192.168.1.170         vip01

192.168.1.171         vip02

10.10.10.1            priv01

10.10.10.2            priv02

四、在客戶端測試:

開啓sqlplus_1:

SQL> conn sys/chenxu@racdb as sysdba

已鏈接。

SQL>

SQL> show parameter instance_name

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

instance_name                        string      RACDB2

SQL>

SQL> select instance_name from gv$instance;

 

INSTANCE_NAME

----------------

RACDB1

RACDB2

開啓sqlplus_2:

SQL> conn sys/chenxu@racdb as sysdba

已鏈接。

SQL> show parameter instance_name

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

instance_name                        string      RACDB1

開啓sqlplus_3:

SQL> conn sys/chenxu@racdb as sysdba

已鏈接。

SQL>

SQL> show parameter instance_name

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

instance_name                        string      RACDB2

開啓sqlplus_4:

SQL> conn sys/chenxu@racdb as sysdba

已鏈接。

SQL> show parameter instance_name

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

instance_name                        string      RACDB1

5、總結

這樣當客戶端鏈接RAC數據庫時,會隨機在TNS裏面挑個監聽地址進行鏈接。在Oracle 10g之前,假若有節點宕機或者相似事故時,客戶端可能仍是選擇鏈接到這個節點,這樣會發生較長時間的TCP等待超時。而在10g之後,因爲VIP和FAN的引入,這樣的狀況能夠獲得很大程度的改善。客戶端的負載均衡在一般狀況下可以較好地工做,可是因爲鏈接是在客戶端隨機發起的,這樣客戶端並不知道RAC各節點的負荷及鏈接數狀況,有可能負荷大的節點還會源源不斷地增長新的鏈接,致使RAC節點沒法均衡工做。

 

2、服務器端負載均衡的配置

從Oracle 10g開始,服務器端的負載均衡能夠根據RAC中各節點的負荷及鏈接數狀況,而斷定將新的客戶端鏈接分配到負荷最小的節點上去。RAC中各節點的PMON進程每3秒會將各自節點的負荷(包括LOAD、最大LOAD、CPU使用率)及鏈接數更新到service_register裏面,而後假如節點的負荷有發生變化,將會通知到監聽程序,由監聽程序再決定新的客戶端鏈接分配至哪一個節點。假如RAC中一個節點的監聽失敗了,PMON每一分鐘會去檢查一次是否已經恢復正常。

服務器端的監聽配置是在各節點的tnsnames.ora裏面添加一個鏈接到各個節點監聽的條目,而後再在初始化參數裏面設置remote_listeners這個參數。

一、測試客戶端的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

 

2、配置服務器端TNS

服務器端的監聽配置是在各節點的tnsnames.ora裏面添加一個鏈接到各個節點監聽的條目(紅色代碼),在服務器端每一個節點的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)

    )

  )

3在初始化參數設置參數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命令能夠撤銷設置,恢復默認值)

系統已更改。

 

SQL>

SQL> show parameter remote_listener

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

remote_listener                      string      LISTENERS_RACDB

正確配置參數後,經過lsnrctl status命令看到在監聽啓動之後,能夠看到監聽器上有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鏈接服務器數據庫可能會出現以下錯誤:

ERROR:

ORA-12545: 因目標主機或對象不存在,鏈接失敗

4、解決ORA-12545鏈接失敗問題

方法1、配置客戶端的Hosts文件

經過在客戶端的Hosts文件中加入對兩個服務名的名字解析能夠解決ORA-12545問題。在windows下Hosts文件在C:"WINDOWS"system32"drivers"etc目錄下,在linux修改/etc/hosts文件的內容。添加以下內容:

192.168.1.170   node01

192.168.1.171   node02

 

其中node0一、node02爲服務器節點的主機名。

 

[root@NODE01 bin]# hostname

NODE01

方法2、配置參數local_listener

這邊就不詳細描述,具體參考論壇文章,網址以下:(http://www.itpub.net/viewthread.php?tid=1060068)

五、經過客戶端測試負載均衡

開啓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,說明基於服務器端的負載均衡配置成功。

 

轉自:http://www.cnblogs.com/millen/archive/2009/05/06/1450844.html

相關文章
相關標籤/搜索