ORACLE RAC负载均衡与local_listener、remote_listener两个参数的配置关系

原文地址:https://www.2cto.com/database/201206/136056.html

ORACLE RAC负载均衡与local_listener、remote_listener两个参数的配置关系

 

ORACLE RAC 负载均衡与local_listener、remote_listener两个参数的配置关系

 RAC的负载均衡主要由客户端和服务器端两种实现方式。

 

 1,客户端的实现,直接在tnsnames.ora中配置LOAD_BALANCE参数来实现。默认值是NO

 clinet_LB =

  (DESCRIPTION =

    (LOAD_BALANCE = YES)

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

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

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

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

    (CONNECT_DATA =

      (SERVICE_NAME = srv_epm1)

    )

  )

  2,服务器端的负载均衡LB设置。主要是通过两个初始化参数local_listener、remote_listener来实现的。通过这两个参数,oracle分别向这两个参数指向的listener进行注册,这样,listener就能知道各个服务的状态,进而进行连接分发。

  11gr2版本,这两个参数默认设置为如下

 

SQL> show parameter listener

 

NAME                                 TYPE        VALUE

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

listener_networks                    string

local_listener                       string      (DESCRIPTION=(ADDRESS_LIST=(AD

                                                 DRESS=(PROTOCOL=TCP)(HOST=10.4

                                                 .124.244)(PORT=1521))))

remote_listener                      string      dtydb-scan2:1521

  www.2cto.com  

由于以上设置,数据库实例分别向local_listener和remote_listener进行注册。

 

本地listener只注册了+ASM2和epmdb2两个实例

 

LSNRCTL> set current_listener LISTENER

Current Listener is LISTENER

LSNRCTL> service

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))

Services Summary...

Service "+ASM" has 1 instance(s).

  Instance "+ASM2", status READY, has 1 handler(s) for this service...

    Handler(s):

      "DEDICATED" established:10765 refused:0 state:ready

         LOCAL SERVER

Service "epmdb" has 1 instance(s).

  Instance "epmdb2", status READY, has 1 handler(s) for this service...

    Handler(s):

      "DEDICATED" established:10 refused:0 state:ready

         LOCAL SERVER

The command completed successfully

 

SCAN listener注册了所有数据库实例默认service和运行在epmdb1实例上的服务srv_epm1

查看服务注册情况,SCAN

 

LSNRCTL> set current_listener LISTENER_SCAN1

Current Listener is LISTENER_SCAN1

LSNRCTL> service

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))

Services Summary...

Service "epmdb" has 3 instance(s).

  Instance "epmdb1", status READY, has 1 handler(s) for this service...

    Handler(s):

      "DEDICATED" established:0 refused:0 state:ready

         REMOTE SERVER

         (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.4.124.243)(PORT=1521)))

  Instance "epmdb2", status READY, has 1 handler(s) for this service...

    Handler(s):

      "DEDICATED" established:0 refused:0 state:ready

         REMOTE SERVER

         (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.4.124.244)(PORT=1521)))

  Instance "epmdb3", status READY, has 1 handler(s) for this service...

    Handler(s):  www.2cto.com  

      "DEDICATED" established:4 refused:0 state:ready

         REMOTE SERVER

         (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.4.124.245)(PORT=1521)))

Service "srv_epm1" has 1 instance(s).

  Instance "epmdb1", status READY, has 1 handler(s) for this service...

    Handler(s):

      "DEDICATED" established:0 refused:0 state:ready

         REMOTE SERVER

         (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.4.124.243)(PORT=1521)))

The command completed successfully

 

tnsnames.ora的配置如下

tydb_srv_epm1 =

  (DESCRIPTION =

    (LOAD_BALANCE = NO)

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

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

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

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

    (CONNECT_DATA =

      (SERVICE_NAME = epmdb)

    )

  )

epmdb_scan =

  (DESCRIPTION =

    (LOAD_BALANCE = NO)

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

    (CONNECT_DATA =

      (SERVICE_NAME = epmdb)

    )

  )

 

当我们连接时tydb_srv_epm1,由于顺序关系,会连接到epmdb1实例

 

sqlplus system/oracle@tydb_srv_epm1

 

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 6月 14 16:10:21 2012

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management,

OLAP,

Data Mining and Real Application Testing options

 

SQL> select instance_name from v$instance;

  www.2cto.com  

INSTANCE_NAME

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

epmdb1

 

SQL> exit

 

连接scan IP时,由于scan listener了注册了各个数据库实例,负载均衡的效果就产生了

 

>sqlplus system/oracle@epmdb_scan

 

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 6月 14 16:11:26 2012

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management,

OLAP,

Data Mining and Real Application Testing options

 

SQL> select instance_name from v$instance;

 

INSTANCE_NAME

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

epmdb1

 

SQL> exit

从 Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management,

OLAP,

Data Mining and Real Application Testing options 断开

 

sqlplus system/oracle@epmdb_scan

 

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 6月 14 16:12:57 2012

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management,

OLAP,

Data Mining and Real Application Testing options

 

SQL> select instance_name from v$instance;

 

INSTANCE_NAME

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

epmdb3

 

SQL>

 

3,10gr2版本以上,TAF主要是通过service的配置来实现。已如下已配置的service srv_epm1为例

 

[grid@dtydb3 ~]$ srvctl config service -d epmdb -s srv_epm1

Service name: srv_epm1

Service is enabled

Server pool: epmdb_srv_epm1

Cardinality: 1

Disconnect: false

Service role: PRIMARY

Management policy: AUTOMATIC

DTP transaction: false

AQ HA notifications: false

Failover type: SELECT

Failover method: BASIC

TAF failover retries: 180

TAF failover delay: 5

Connection Load Balancing Goal: LONG

Runtime Load Balancing Goal: NONE

TAF policy specification: BASIC

Edition:

Preferred instances: epmdb1

Available instances: epmdb2

 

tnsnames.ora的连接配置如下

 

epmdb_scan_taf =

  (DESCRIPTION =

    (LOAD_BALANCE = NO)

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

    (CONNECT_DATA =

      (SERVICE_NAME = srv_epm1)

    )

  )

 

 由于服务只运行于epmdb1,因此必定连接epmdb1实例

  

sqlplus system/oracle@epmdb_scan_taf

 

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 6月 14 16:21:42 2012

 

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

 

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management,

OLAP,

Data Mining and Real Application Testing options

 

SQL> select instance_name from v$instance;

 

INSTANCE_NAME

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

epmdb1

  

  数据库实例EPMDB1 down后,service发生了切换,再次连接数据库,已经运行于instane 2 .

  sys@EPMDB1(10.4.124.233)> shutdown immediate;

  

[grid@dtydb3 ~]$ srvctl status service -d epmdb -s srv_epm1

Service srv_epm1 is running on instance(s) epmdb2

    www.2cto.com  

SQL> select instance_name from v$instance;

 

INSTANCE_NAME

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

epmdb1

 

SQL> /

 

INSTANCE_NAME

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

epmdb2

 

 

 

作者 hijk139


猜你喜欢

转载自blog.csdn.net/cuiyan1982/article/details/79715515