vcdog 发表于 2011-12-23 03:53

ORACLE RAC--LB三种模式的测试

<DIV>ORACLE RAC--LB三种模式的测试</DIV>
<DIV>&nbsp;</DIV>
<DIV>====================================</DIV>
<DIV><FONT color=#0000f0>测试分三种模式:<BR>&nbsp;1. client-side LB模式<BR>&nbsp;2.server-side LB模式<BR>&nbsp;3.client-side和server-side混合模式</FONT><BR></DIV>
<DIV>====================================&nbsp;<BR>&nbsp;1.单纯的 client-side LB模式:<BR>&nbsp;<BR>&nbsp;(1)配置客户端tnsnames.ora内容如下:<BR>&nbsp;<BR>RAC =<BR>&nbsp; (DESCRIPTION =<BR>&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))<BR>&nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))<BR>&nbsp;&nbsp;&nbsp; <FONT color=#f00000>(LOAD_BALANCE = yes)<BR></FONT>&nbsp;&nbsp;&nbsp; (CONNECT_DATA =<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVER = DEDICATED)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SERVICE_NAME = RAC)<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp; )</DIV>
<DIV>&nbsp;(2)数据库的准备工作:<BR>&nbsp;<BR>&nbsp;去掉server-side load balance内容:<BR>&nbsp;<BR>&nbsp;SQL&gt; <FONT color=#0000f0>alter system set remote_listener='' scope=spfile sid='*';</FONT></DIV>
<DIV>&nbsp;&nbsp;System altered.&nbsp;<BR>&nbsp;<BR>&nbsp;重启database 和listener:<BR>&nbsp;<BR>&nbsp;$ srvctl stop database -d rac<BR>&nbsp;$ srvctl stop listener -n rac2<BR>&nbsp;$ srvctl stop listener -n rac1<BR>&nbsp;$ srvctl start listener -n rac1&nbsp; <BR>&nbsp;$ srvctl start listener -n rac2<BR>&nbsp;$ srvctl start database -d rac</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;重启后,清空两节点的Listener日志:<BR></DIV>
<DIV>&nbsp;$ cd /u01/oracle/product/10.2.0/db_1/network/log/<BR>&nbsp;$ cat /dev/null&gt;listener_rac1.log&nbsp; </DIV>
<DIV>&nbsp;$ cd /u01/oracle/product/10.2.0/db_1/network/log/<BR>&nbsp;$ cat /dev/null&gt;listener_rac2.log <BR>&nbsp;<BR>&nbsp;(3)执行测试脚本,参数设置为1000,代表有1000客户端建立连接。<BR>&nbsp;<BR>&nbsp;$ ./test.sh rac 1000 &gt; rac.log <BR>&nbsp;<BR>&nbsp;(4)检查测试结果:<BR>&nbsp;<BR>&nbsp;$ grep RAC1 rac.log |wc -l<BR>&nbsp;521<BR>&nbsp;$ grep RAC2 rac.log |wc -l<BR>&nbsp;479<BR>&nbsp;<BR>&nbsp;(5)提取两节点的Listener日志内容:<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;RAC1节点上的实例1:<BR>&nbsp;<BR>&nbsp;$ grep establish listener_rac1.log |wc -l <BR>&nbsp;521<BR>&nbsp;此处的521,说明节点RAC1一共接收了521个用户连接。&nbsp;<BR>&nbsp;<BR>&nbsp;$ grep INSTANCE_NAME=RAC listener_rac1.log |wc -l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;0<BR>&nbsp;<BR>&nbsp;其中,说明这521个连接中有0个是从节点RAC2的实例2的Listener路由过来的,计算client-side Load Balance为:521-0=521,<BR>&nbsp;客户端发出了521个到实例1的连接请求。<BR>&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;RAC2节点上的实例2:<BR>&nbsp;<BR>&nbsp;$ grep establish listener_rac2.log |wc -l<BR>&nbsp;479<BR>&nbsp;说明一共接收了765个用户连接。&nbsp;<BR>&nbsp;<BR>&nbsp;$&nbsp; grep INSTANCE_NAME=RAC listener_rac2.log |wc -l<BR>&nbsp;0<BR>&nbsp;&nbsp;其中,有479个连接中有0个是从节点RAC1的实例1的Listener路由过来的,计算client-side Load Balance为:479-0=479,<BR>&nbsp;客户端发出了479个到实例2的连接请求。<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;这里只是用了&nbsp;client-side LB,也就是说客户端从TNS地址列表中随机选择实例发送请求,这个随机算法的结果是521/470,<BR>&nbsp;可见这个随机算法还是比较平均的。<BR>&nbsp;<BR>****************************************************************************</DIV>
<DIV><BR>&nbsp;2.测试单纯的server-side LB模式:<BR>&nbsp;<BR>&nbsp;(1)配置客户端tnsnames.ora内容如下,关闭client-side LB模式:<BR>&nbsp;<BR>&nbsp;RAC =<BR>&nbsp;&nbsp; (DESCRIPTION =<BR>&nbsp; &nbsp;&nbsp; &nbsp;(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))<BR>&nbsp; &nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))<BR>&nbsp;&nbsp; &nbsp;&nbsp; <FONT color=#f00000>(LOAD_BALANCE = off)<BR></FONT>&nbsp; &nbsp;&nbsp; &nbsp;(CONNECT_DATA =<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;(SERVER = DEDICATED)<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;(SERVICE_NAME = RAC)<BR>&nbsp;&nbsp; &nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;<BR>&nbsp;(2)数据库服务端的准备工作:<BR>&nbsp;<BR>&nbsp;启动server-side Load balance:<BR>&nbsp;SQL&gt; show parameter remote</DIV>
<DIV>&nbsp;NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE<BR>&nbsp;------------------------------------ ----------- ------------------------------<BR>&nbsp;remote_archive_enable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; true<BR>&nbsp;remote_dependencies_mode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIMESTAMP<BR>&nbsp;<FONT color=#f00000>remote_listener&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string<BR></FONT>&nbsp;remote_login_passwordfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXCLUSIVE<BR>&nbsp;remote_os_authent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean&nbsp;&nbsp;&nbsp;&nbsp; FALSE<BR>&nbsp;remote_os_roles&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean&nbsp;&nbsp;&nbsp;&nbsp; FALSE</DIV>
<DIV><BR>&nbsp;SQL&gt; <FONT color=#0000f0>alter system set remote_listener='LISTENERS_RAC' scope=spfile sid='*';</FONT></DIV>
<DIV>&nbsp;System altered.&nbsp;<BR>&nbsp;<BR>&nbsp;重启database和listener:<BR>&nbsp;<BR>&nbsp;$ srvctl stop database -d rac<BR>&nbsp;$ srvctl stop listener -n rac2<BR>&nbsp;$ srvctl stop listener -n rac1<BR>&nbsp;$ srvctl start listener -n rac1&nbsp; <BR>&nbsp;$ srvctl start listener -n rac2<BR>&nbsp;$ srvctl start database -d rac</DIV>
<DIV>&nbsp;清空两节点上的listener日志 :<BR>&nbsp;$ cat /dev/null &gt; listener_rac1.log <BR>&nbsp;$ cat /dev/null &gt; listener_rac2.log <BR>&nbsp;<BR>&nbsp;(3)执行测试脚本 :<BR>&nbsp;<BR>&nbsp;$ ./test.sh rac 1000 &gt; rac_sl.log<BR>&nbsp;<BR>&nbsp;(4)检查测试结果:<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;$&nbsp; grep RAC1 rac_sl.log |wc -l<BR>&nbsp;235<BR>&nbsp;$&nbsp; grep RAC2 rac_sl.log |wc -l <BR>&nbsp;765<BR>&nbsp;<BR>&nbsp;(5)提取两节点的Listener日志内容:<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;RAC1节点上的实例1:<BR>&nbsp;<BR>&nbsp;$ grep establish listener_rac1.log |wc -l <BR>&nbsp;1000<BR>&nbsp;此处的1000,说明节点RAC1一共打接收了1000个用户连接。&nbsp;<BR>&nbsp;<BR>&nbsp;$ grep INSTANCE_NAME=RAC listener_rac1.log |wc -l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;0<BR>&nbsp;其中,有0个是从节点RAC2的实例2的Listener路由过来的,计算client-side Load Balance为:1000-0=1000,<BR>&nbsp;客户端发出了1000个到实例1的连接请求。<BR>&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;RAC2节点上的实例2:<BR>&nbsp;<BR>&nbsp;$ grep establish listener_rac2.log |wc -l<BR>&nbsp;765<BR>&nbsp;说明一共接收了765个用户连接。&nbsp;<BR>&nbsp;<BR>&nbsp;$&nbsp; grep INSTANCE_NAME=RAC listener_rac2.log |wc -l<BR>&nbsp;765<BR>&nbsp;&nbsp;其中,有765个是从节点RAC1的实例1的Listener路由过来的,计算client-side Load Balance为:765-765=0,<BR>&nbsp;客户端发出了0个到实例2的连接请求。<BR>&nbsp;<BR>&nbsp;在这个实验中,客户端的tnsnames.ora配置中,使用LOAD_BALANCE = OFF,禁用了client-side Load Balance,所以,<BR>&nbsp;用户的1000个连接全部发给了实例1,因为地址列表中rac2-vip是放在第条的。其他结果说明以下几条:</DIV>
<DIV>&nbsp;&nbsp;(1)Listener路由到实例的连接请求数量:实例1=1000-765=235,实例2=0-0=0;<BR>&nbsp;&nbsp;(2)远程的Listener路由到本实例连接请求数量:实例1=0,实例2=765;&nbsp;<BR>&nbsp;&nbsp;(3)Server-side load balance的分配=235/765,从数量上看,不如client-side LB那么均匀。<BR>&nbsp;&nbsp;<BR>&nbsp;****************************************************************************&nbsp;<BR>&nbsp;&nbsp;</DIV>
<DIV><BR>&nbsp;3.测试client-side和server-side混合模式:<BR>&nbsp;<BR>&nbsp;&nbsp;(1)配置客户端tnsnames.ora内容如下,关闭client-side LB模式:<BR>&nbsp;<BR>&nbsp;RAC =<BR>&nbsp;&nbsp; (DESCRIPTION =<BR>&nbsp; &nbsp;&nbsp; &nbsp;(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))<BR>&nbsp; &nbsp;&nbsp;&nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))<BR>&nbsp;&nbsp; &nbsp;&nbsp; <FONT color=#f00000>(LOAD_BALANCE = yes)<BR></FONT>&nbsp; &nbsp;&nbsp; &nbsp;(CONNECT_DATA =<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;(SERVER = DEDICATED)<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;(SERVICE_NAME = RAC)<BR>&nbsp;&nbsp; &nbsp;&nbsp; )<BR>&nbsp;&nbsp;&nbsp; )<BR>&nbsp;<BR>&nbsp;&nbsp;(2)数据库服务端的准备工作:<BR>&nbsp;<BR>&nbsp;启动server-side Load balance:<BR>&nbsp;SQL&gt; show parameter remote</DIV>
<DIV>&nbsp;NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE<BR>&nbsp;------------------------------------ ----------- ------------------------------<BR>&nbsp;remote_archive_enable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; true<BR>&nbsp;remote_dependencies_mode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIMESTAMP<BR>&nbsp;<FONT color=#f00000>remote_listener&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string<BR></FONT>&nbsp;remote_login_passwordfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXCLUSIVE<BR>&nbsp;remote_os_authent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean&nbsp;&nbsp;&nbsp;&nbsp; FALSE<BR>&nbsp;remote_os_roles&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean&nbsp;&nbsp;&nbsp;&nbsp; FALSE</DIV>
<DIV><BR>&nbsp;SQL&gt; <FONT color=#0000f0>alter system set remote_listener='LISTENERS_RAC' scope=spfile sid='*';</FONT></DIV>
<DIV>&nbsp;System altered.&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;重启database和listener:<BR>&nbsp;<BR>&nbsp;$ srvctl stop database -d rac<BR>&nbsp;$ srvctl stop listener -n rac2<BR>&nbsp;$ srvctl stop listener -n rac1<BR>&nbsp;$ srvctl start listener -n rac1&nbsp; <BR>&nbsp;$ srvctl start listener -n rac2<BR>&nbsp;$ srvctl start database -d rac</DIV>
<DIV>&nbsp;清空两节点上的listener日志 :<BR>&nbsp;$ cat /dev/null &gt; listener_rac1.log <BR>&nbsp;$ cat /dev/null &gt; listener_rac2.log <BR>&nbsp;<BR>&nbsp;(3)执行测试脚本:<BR>&nbsp;<BR>&nbsp;$ ./test.sh rac 1000 &gt; rac_mix.log<BR>&nbsp;<BR>&nbsp;(4)检查测试结果:</DIV>
<DIV>&nbsp;$ grep RAC1 rac_mix.log |wc -l<BR>&nbsp;735<BR>&nbsp;$ grep RAC2 rac_mix.log |wc -l <BR>&nbsp;265<BR>&nbsp;<BR>&nbsp;(5)提取两节点的Listener日志内容:<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;RAC1节点上的实例1:<BR>&nbsp;<BR>&nbsp;$ grep establish listener_rac1.log |wc -l <BR>&nbsp;937<BR>&nbsp;此处的937,说明节点RAC1一共打接收了937个用户连接。&nbsp;<BR>&nbsp;<BR>&nbsp;$ grep INSTANCE_NAME=RAC listener_rac1.log |wc -l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;448<BR>&nbsp;其中,在937个连接中有448个是从节点RAC2的实例2的Listener路由过来的,计算client-side Load Balance为:937-448=489,<BR>&nbsp;客户端发出了489个到实例1的连接请求。<BR>&nbsp;&nbsp;<BR>&nbsp;<BR>&nbsp;RAC2节点上的实例2:<BR>&nbsp;<BR>&nbsp;$ grep establish listener_rac2.log |wc -l<BR>&nbsp;713<BR>&nbsp;说明一共接收了765个用户连接。&nbsp;<BR>&nbsp;<BR>&nbsp;$&nbsp; grep INSTANCE_NAME=RAC listener_rac2.log |wc -l<BR>&nbsp;202<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;其中,有202个是从节点RAC1的实例1的Listener路由过来的,计算client-side Load Balance为:713-202=511,<BR>&nbsp;客户端发出了511个到实例2的连接请求。<BR>&nbsp;<BR>&nbsp;这个实验混合了client-side和server-side两种Load Balance,结果说明如下:<BR>&nbsp;<BR>&nbsp;&nbsp;(1)client-side Load Balance=489/511;<BR>&nbsp;&nbsp;(2)Listener路由到实例的连接请求数量:实例1=489-202=284,实例2=511-448=63;<BR>&nbsp;&nbsp;(3)远程的Listener路由到本实例连接请求数量:实例1=448,实例2=202;&nbsp;<BR>&nbsp;&nbsp;(4)Server-side load balance的分配=448/202,从数量上看,同样不如client-side LB那么均匀。<BR>&nbsp;&nbsp;<BR>******************************************************************************</DIV>
<DIV>
<P>&nbsp;</P>
<P>&nbsp;</P>
<A href="http://www.51.la/?5549688" target=_blank><IMG style="BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; BORDER-TOP: medium none; BORDER-RIGHT: medium none" alt=我要啦免费统计 src="http://img.users.51.la/5549688.asp"></A>

</DIV>
页: [1]
查看完整版本: ORACLE RAC--LB三种模式的测试