ORACLE RAC load balance测试

# ORACLE RAC load balance测试

 

 

 

====================================

 

测试分三种模式:

\1. client-side LB模式

2.server-side LB模式

3.client-side和server-side混合模式

 

====================================

1.单纯的 client-side LB模式:

 

(1)配置客户端tnsnames.ora内容如下:

 

RAC =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))

(LOAD_BALANCE = yes)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RAC)

)

)

 

(2)数据库的准备工作:

 

去掉server-side load balance内容:

 

SQL> alter system set remote_listener='' scope=spfile sid='*';

 

System altered.

 

重启database 和listener:

 

[oracle@rac1 ~]$ srvctl stop database -d rac

[oracle@rac1 ~]$ srvctl stop listener -n rac2

[oracle@rac1 ~]$ srvctl stop listener -n rac1

[oracle@rac1 ~]$ srvctl start listener -n rac1

[oracle@rac1 ~]$ srvctl start listener -n rac2

[oracle@rac1 ~]$ srvctl start database -d rac

 

 

 

重启后,清空两节点的Listener日志:

 

[oracle@rac1 ~]$ cd /u01/oracle/product/10.2.0/db_1/network/log/

[oracle@rac1 log]$ cat /dev/null>listener_rac1.log

 

[oracle@rac2 ~]$ cd /u01/oracle/product/10.2.0/db_1/network/log/

[oracle@rac2 log]$ cat /dev/null>listener_rac2.log

 

(3)执行测试脚本,参数设置为1000,代表有1000客户端建立连接。

 

[oracle@st01 LB]$ ./test.sh rac 1000 > rac.log

 

(4)检查测试结果:

 

[oracle@st01 LB]$ grep RAC1 rac.log |wc -l

521

[oracle@st01 LB]$ grep RAC2 rac.log |wc -l

479

 

(5)提取两节点的Listener日志内容:

 

 

RAC1节点上的实例1:

 

[oracle@rac1 log]$ grep establish listener_rac1.log |wc -l

521

此处的521,说明节点RAC1一共接收了521个用户连接。

 

[oracle@rac1 log]$ grep INSTANCE_NAME=RAC listener_rac1.log |wc -l

0

 

其中,说明这521个连接中有0个是从节点RAC2的实例2的Listener路由过来的,计算client-side Load Balance为:521-0=521,

客户端发出了521个到实例1的连接请求。

 

 

RAC2节点上的实例2:

 

[oracle@rac2 log]$ grep establish listener_rac2.log |wc -l

479

说明一共接收了765个用户连接。

 

[oracle@rac2 log]$ grep INSTANCE_NAME=RAC listener_rac2.log |wc -l

0

其中,有479个连接中有0个是从节点RAC1的实例1的Listener路由过来的,计算client-side Load Balance为:479-0=479,

客户端发出了479个到实例2的连接请求。

 

这里只是用了 client-side LB,也就是说客户端从TNS地址列表中随机选择实例发送请求,这个随机算法的结果是521/470,

可见这个随机算法还是比较平均的。

 

****************************************************************************

 

 

2.测试单纯的server-side LB模式:

 

(1)配置客户端tnsnames.ora内容如下,关闭client-side LB模式:

 

RAC =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))

(LOAD_BALANCE = off)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RAC)

)

)

 

(2)数据库服务端的准备工作:

 

启动server-side Load balance:

SQL> show parameter remote

 

NAME TYPE VALUE

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

remote_archive_enable string true

remote_dependencies_mode string TIMESTAMP

remote_listener string

remote_login_passwordfile string EXCLUSIVE

remote_os_authent boolean FALSE

remote_os_roles boolean FALSE

 

 

SQL> alter system set remote_listener='LISTENERS_RAC' scope=spfile sid='*';

 

System altered.

 

重启database和listener:

 

[oracle@rac1 ~]$ srvctl stop database -d rac

[oracle@rac1 ~]$ srvctl stop listener -n rac2

[oracle@rac1 ~]$ srvctl stop listener -n rac1

[oracle@rac1 ~]$ srvctl start listener -n rac1

[oracle@rac1 ~]$ srvctl start listener -n rac2

[oracle@rac1 ~]$ srvctl start database -d rac

 

清空两节点上的listener日志 :

[oracle@rac1 log]$ cat /dev/null > listener_rac1.log

[oracle@rac2 log]$ cat /dev/null > listener_rac2.log

 

(3)执行测试脚本 :

 

[oracle@st01 LB]$ ./test.sh rac 1000 > rac_sl.log

 

(4)检查测试结果:

 

 

[oracle@st01 LB]$ grep RAC1 rac_sl.log |wc -l

235

[oracle@st01 LB]$ grep RAC2 rac_sl.log |wc -l

765

 

(5)提取两节点的Listener日志内容:

 

 

RAC1节点上的实例1:

 

[oracle@rac1 log]$ grep establish listener_rac1.log |wc -l

1000

此处的1000,说明节点RAC1一共打接收了1000个用户连接。

 

[oracle@rac1 log]$ grep INSTANCE_NAME=RAC listener_rac1.log |wc -l

0

其中,有0个是从节点RAC2的实例2的Listener路由过来的,计算client-side Load Balance为:1000-0=1000,

客户端发出了1000个到实例1的连接请求。

 

 

RAC2节点上的实例2:

 

[oracle@rac2 log]$ grep establish listener_rac2.log |wc -l

765

说明一共接收了765个用户连接。

 

[oracle@rac2 log]$ grep INSTANCE_NAME=RAC listener_rac2.log |wc -l

765

其中,有765个是从节点RAC1的实例1的Listener路由过来的,计算client-side Load Balance为:765-765=0,

客户端发出了0个到实例2的连接请求。

 

在这个实验中,客户端的tnsnames.ora配置中,使用LOAD_BALANCE = OFF,禁用了client-side Load Balance,所以,

用户的1000个连接全部发给了实例1,因为地址列表中rac2-vip是放在第条的。其他结果说明以下几条:

 

(1)Listener路由到实例的连接请求数量:实例1=1000-765=235,实例2=0-0=0;

(2)远程的Listener路由到本实例连接请求数量:实例1=0,实例2=765;

(3)Server-side load balance的分配=235/765,从数量上看,不如client-side LB那么均匀。

 

****************************************************************************

 

 

 

3.测试client-side和server-side混合模式:

 

(1)配置客户端tnsnames.ora内容如下,关闭client-side LB模式:

 

RAC =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))

(LOAD_BALANCE = yes)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = RAC)

)

)

 

(2)数据库服务端的准备工作:

 

启动server-side Load balance:

SQL> show parameter remote

 

NAME TYPE VALUE

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

remote_archive_enable string true

remote_dependencies_mode string TIMESTAMP

remote_listener string

remote_login_passwordfile string EXCLUSIVE

remote_os_authent boolean FALSE

remote_os_roles boolean FALSE

 

 

SQL> alter system set remote_listener='LISTENERS_RAC' scope=spfile sid='*';

 

System altered.

 

重启database和listener:

 

[oracle@rac1 ~]$ srvctl stop database -d rac

[oracle@rac1 ~]$ srvctl stop listener -n rac2

[oracle@rac1 ~]$ srvctl stop listener -n rac1

[oracle@rac1 ~]$ srvctl start listener -n rac1

[oracle@rac1 ~]$ srvctl start listener -n rac2

[oracle@rac1 ~]$ srvctl start database -d rac

 

清空两节点上的listener日志 :

[oracle@rac1 log]$ cat /dev/null > listener_rac1.log

[oracle@rac2 log]$ cat /dev/null > listener_rac2.log

 

(3)执行测试脚本:

 

[oracle@st01 LB]$ ./test.sh rac 1000 > rac_mix.log

 

(4)检查测试结果:

 

[oracle@st01 LB]$ grep RAC1 rac_mix.log |wc -l

735

[oracle@st01 LB]$ grep RAC2 rac_mix.log |wc -l

265

 

(5)提取两节点的Listener日志内容:

 

 

RAC1节点上的实例1:

 

[oracle@rac1 log]$ grep establish listener_rac1.log |wc -l

937

此处的937,说明节点RAC1一共打接收了937个用户连接。

 

[oracle@rac1 log]$ grep INSTANCE_NAME=RAC listener_rac1.log |wc -l

448

其中,在937个连接中有448个是从节点RAC2的实例2的Listener路由过来的,计算client-side Load Balance为:937-448=489,

客户端发出了489个到实例1的连接请求。

 

 

RAC2节点上的实例2:

 

[oracle@rac2 log]$ grep establish listener_rac2.log |wc -l

713

说明一共接收了765个用户连接。

 

[oracle@rac2 log]$ grep INSTANCE_NAME=RAC listener_rac2.log |wc -l

202

 

 

其中,有202个是从节点RAC1的实例1的Listener路由过来的,计算client-side Load Balance为:713-202=511,

客户端发出了511个到实例2的连接请求。

 

这个实验混合了client-side和server-side两种Load Balance,结果说明如下:

 

(1)client-side Load Balance=489/511;

(2)Listener路由到实例的连接请求数量:实例1=489-202=284,实例2=511-448=63;

(3)远程的Listener路由到本实例连接请求数量:实例1=448,实例2=202;

(4)Server-side load balance的分配=448/202,从数量上看,同样不如client-side LB那么均匀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值