Oracle 10g RAC的负载均衡配置

  Oracle 10g RAC的负载均衡配置  2011-02-17 16:39:47

分类: Oracle

负载均衡是指连接的负载均衡。 RAC 的负载均衡主要是指新会话连接到RAC数据库时,如何判定这个新的连接要连到哪个节点进行工作。在RAC中,负载均衡分为两种,一种是基于客户端连接的,另外一种是基于服务器端的。

一、客户端负载均衡的配置

1、当前服务器中的数据库版本如下:

SQL> select * from v$version;

BANNER

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

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod

PL/SQL Release 10.2.0.1.0 - Production

CORE 10.2.0.1.0 Production

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

4、在客户端测试:

开启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节点无法均衡工作。

二、服务器端负载均衡的配置

从Oracle 10g开始,服务器端的负载均衡可以根据RAC中各节点的负荷及连接数情况,而判定将新的客户端连接分配到负荷最小的节点上去。RAC中各节点的PMON进程每3秒会将各自节点的负荷(包括LOAD、最大LOAD、CPU使用率)及连接数更新到service_register里面,然后假如节点的负荷有发生变化,将会通知到监听程序,由监听程序再决定新的客户端连接分配至哪个节点。假如RAC中一个节点的监听失败了,PMON每一分钟会去检查一次是否已经恢复正常。

服务器端的监听配置是在各节点的tnsnames.ora里面添加一个连接到各个节点监听的条目,然后再在初始化参数里面设置remote_listeners这个参数。

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

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值