熟悉Oracle数据库的朋友们应该都清楚RAC的负载均衡分为两种。那么现在,我们针对其中一种——客户端RAC负载均衡配置进行一个全面具体的介绍。文中包含了主要的配置代码,希望通过介绍,能让大家清楚配置过程。稍后我们还会介绍RAC服务器负载均衡配置。
负载均衡是指连接的负载均衡。RAC的负载均衡主要是指新会话连接到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>
#p#3、在客户端配置TNS:
客户端RAC负载均衡配置相对简单,只需要在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
#p#开启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各节点的负荷及连接数情况,有可能负荷大的节点还会源源不断地增加新的连接,导致RAC节点无法均衡工作。