Oracle RAC 负载均衡使得从客户端发起的连接能够有效地分配到监听器负载较小的实例上。有两种方式实现客户端负载均衡,一是通过配置客户端的load_balance,一是通过配置服务器端的remote_listener参数。两种方式各有优劣,而且两者并不相互排斥,因此可以结合两种方式来更加有效的实现负载均衡。本文将描述两者结合的使用情况(oralce 10g rac)。

有关客户端与服务端负载均衡的单独测试请参考:
              Oracle RAC 客户端连接负载均衡(Load Balance) 
              Oracle RAC 服务器端连接负载均衡(Load Balance)

本文的测试将结合前篇文章使用的脚本与样例,是前两篇测试的一个总结。

一、配置需求

  1. 1、服务器端各节点监听器正常提供服务,如果使用非缺省的1521端口,请参考 ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)
  2. oracle@bo2dbp:~> more $ORACLE_HOME/network/admin/listener.ora
  3. # listener.ora.bo2dbp Network Configuration File: /u01/oracle/db/network/admin/listener.ora.bo2dbp
  4. # Generated by Oracle configuration tools.
  5. LISTENER_BO2DBP =
  6. (DESCRIPTION_LIST =
  7. (DESCRIPTION =
  8. (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1521)(IP = FIRST))
  9. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.51)(PORT = 1521)(IP = FIRST))
  10. )
  11. )
  12. SID_LIST_LISTENER_BO2DBP =
  13. (SID_LIST =
  14. (SID_DESC =
  15. (SID_NAME = PLSExtProc)
  16. (ORACLE_HOME = /u01/oracle/db)
  17. (PROGRAM = extproc)
  18. )
  19. )
  20. oracle@bo2dbp:~> lsnrctl status
  21. Service "GOBO4" has 2 instance(s).
  22. Instance "GOBO4A", status READY, has 2 handler(s) for this service...
  23. Instance "GOBO4B", status READY, has 1 handler(s) for this service...
  24. 2、服务器端的remote_listener参数设置
  25. 要求remote_listener参数的连接标识符在服务器端的tnsnames.ora中有对应的条目
  26. SQL> show parameter listener
  27. NAME                                 TYPE        VALUE
  28. ------------------------------------ ----------- ------------------------------
  29. local_listener                       string
  30. remote_listener                      string      remote_lsnr_gobo4
  31. oracle@bo2dbp:~> more $ORACLE_HOME/network/admin/tnsnames.ora
  32. # tnsnames.ora Network Configuration File: /u01/oracle/db/network/admin/tnsnames.ora
  33. # Generated by Oracle configuration tools.
  34. remote_lsnr_gobo4 =
  35. (ADDRESS_LIST =
  36. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))
  37. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))
  38. )
  39. 3、客户端tnsnames.ora中启用load_balance
  40. oracle@SZDB:~> tail -11 $ORACLE_HOME/network/admin/tnsnames.ora
  41. GOBO4 =
  42. (DESCRIPTION =
  43. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.61)(PORT = 1521))
  44. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.62)(PORT = 1521))
  45. (LOAD_BALANCE = yes)
  46. (CONNECT_DATA =
  47. (SERVER = DEDICATED)
  48. (SERVICE_NAME = GOBO4)
  49. )
  50. )

二、测试Load Balance

    1. #还是使用之前的脚步来进行测试
    2. #Author : Robinson
    3. #Blog : http://blog.csdn.net/robinson_0612
    4. oracle@SZDB:~> more load_balance.sh
    5. #!/bin/bash
    6. for i in {1..1000}
    7. do
    8. echo $i
    9. sqlplus -S system/oracle@GOBO4 <<EOF
    10. select instance_name from v\$instance;
    11. EOF
    12. sleep 1
    13. done
    14. exit 0
    15. oracle@SZDB:~> ./load_balance.sh >load_bal.log
    16. #查看日志
    17. oracle@SZDB:~> grep GOBO4A load_bal.log |wc -l
    18. 750
    19. oracle@SZDB:~> grep GOBO4B load_bal.log |wc -l
    20. 250
    21. #查看监听器的日志
    22. oracle@bo2dbp:/u01/oracle/db/network/log> grep establish listener_bo2dbp.log |wc -l
    23. 894
    24. oracle@bo2dbp:/u01/oracle/db/network/log> grep INSTANCE_NAME=GOBO4 listener_bo2dbp.log |wc -l
    25. 415
    26. #从上面的查询中可以得知,节点bo2dbp总共接受了894个连接请求,而有415连接请求是由bo2dbs转发过来的
    27. #因此,实际上从客户端发起到bo2dbp的实际连接请求数为894-415=479
    28. #下面来看在节点bo2dbs上的监听日志
    29. oracle@bo2dbs:/u01/oracle/db/network/log> grep establish listener_bo2dbs.log |wc -l
    30. 665
    31. oracle@bo2dbs:/u01/oracle/db/network/log> grep INSTANCE_NAME=GOBO4 listener_bo2dbs.log |wc -l
    32. 144
    33. #从上面的查询中可知,节点bo2dbs总共接受了665个连接请求,而有144个连接请求是由bo2dbp转发过来的
    34. #因此,实际上从客户端发起到bo2dbs的实际连接请求数为655-144=511
    35. #从上面的结果可知,
    36. #基于客户端的连接请求数为节点bo2dbp为479,节点bo2dbs为511
    37. #监听器路由到本地实例数目为,节点bo2dbp,479-144=335,节点bo2dbs,511-415=96
    38. #远程监听器路由道本地实例的数据为,节点bo2dpb为415,节点bo2dbs为144
    39. #监听器路由的概念是指基于服务器端的负载均衡
    40. #即服务器端的监听器根据自身以及远程监听器的负载情况来确定将当前的连接请求转发到本地或远程,此即为路由。
    41. 转:http://blog.csdn.net/leshami/article/details/8072367

Oracle RAC 负载均衡测试(结合服务器端与客户端)的更多相关文章

  1. ORACLE 11G负载均衡测试

    Oracle 11g R2中,引入了SCAN(Single Client Access Name)的特性.该特性的好处在于,在数据库与客户端之间,添加了一层虚拟的服务层,就是所谓的SCAN IP以及S ...

  2. windows使用nginx实现网站负载均衡测试实例

    如果你关注过nginx,必定知道nginx这个软件有什么用的,如果你的网站访问量越来越高,一台服务器已经没有办法承受流量压力,那就增多几台服务器来做负载吧.做网站负载可以买硬件设备来实现,比如F5,不 ...

  3. Haproxy和Nginx负载均衡测试效果对比记录

    为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...

  4. lvs的负载均衡测试

    近来工作闲暇之余,知道自己的知识欠缺,就在网上找来一些学习视频进行学习,在学习的时候,按照讲课老师的讲解步骤进行配置lvs负载均衡,配置环境如下图: 客户端是我本机的虚拟网卡vmnet8 lvs调度器 ...

  5. Spring Cloud负载均衡:使用Feign作客户端负载均衡

    有了一篇服务端负载均衡后,再来一篇客户端负载均衡,客户端负载均衡很简单,无需在zuul中做多余配置(本示例不引入zuul),只需要在客户端进行Feign引入和配置即可. 准备工作很简单,实现客户端负载 ...

  6. nginx apache负载均衡测试

    apache配置 (监听内网ip和端口) Listen 10.163.170.8:8001 Listen 10.163.170.8:8002 Listen 10.163.170.8:8003 < ...

  7. Oracle RAC 环境下的 v$log v$logfile

    通常情况下,在Oracle RAC 环境中,v$视图可查询到你所连接实例的相关信息,而gv$视图则包含所有实例的信息.然而在RAC环境中,当我们查询v$log视图时说按照常理的话,v$log视图应当看 ...

  8. Nginx反向代理与负载均衡应用实践(一)

    Nginx反向代理与负载均衡应用实践(一) 链接:https://pan.baidu.com/s/1xB20bnuanh0Avs4kwRpSXQ 提取码:migq 复制这段内容后打开百度网盘手机App ...

  9. Oracle RAC 服务器端连接负载均衡(Load Balance)

    Oracle RAC服务器端的负载均衡是根据RAC中各节点的连接负荷数情况,将新的连接请求分配到负荷最小的节点上去.当数据库处于运行时,RAC中各节点的PMON进程每3秒会将各自节点的连接负荷数更新到 ...

随机推荐

  1. node操作mysql数据库

    1.建立数据库连接:createConnection(Object)方法       该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database.与php ...

  2. Java集合框架(四)

    Collections    集合框架的工具类    着重讲解以下方法: 1.sort(): 1º根据元素的自然顺序对指定列表按升序进行排序,列表中的所有元素都必须实现comparable接口. pu ...

  3. appserv安装

    Appserv  官网: http://www.appservnetwork.com/ 安装好后,输入http://localhost:8082/验证是否装成功,成功后如下图

  4. Linux基础--文件与目录管理

    1.目录与路径 1)特殊目录 .   代表此层目录 ..  代表上一层目录 -   代表前一个工作目录 ~   代表『目前使用者身份』所在的家目录 ~account   代表account这个使用者的 ...

  5. PHP页面跳转几种实现技巧

    PHP被许多程序员用来开发WEB的首选语言.在实际开发中,网站的各项功能都可以通过PHP语言的编写来满足,比如PHP页面跳转这一方法. 探讨PHP变量解析顺序如何获取提交数据 深入解读PHP运行机制 ...

  6. React 万能的函数表达式

    一.语法简介 表达式可以以下两种方法, (1)(function A(){})(this),(this)参数在函数外面 (2)(function B(){}(this)),(this)参数在函数里面 ...

  7. Java科普之基础知识回顾

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Java语言由C衍生,丢弃C中的指针,使用"发出指令-接收返回值-验证-发出指令-接收返回 ...

  8. Java:进制转换

    进制转换是常常需要的一种数据处理,在java中的一些类中封装了具有转换功能的方法,这个不做介绍.其实,进制之间的转化是通过先位异或&,再位移动>>>的方式实现的. 例如,对于 ...

  9. highcharts联合jquery ajax 后端取数据

    Highcharts是一个制作图表的纯Javascript类库,主要特性如下: 兼容性:兼容当今所有的浏览器,包括iPhone.IE和火狐等等: 对个人用户完全免费: 纯JS,无BS: 支持大部分的图 ...

  10. linux read和write函数

    原文出处:http://blog.chinaunix.net/space.php?uid=20558494&do=blog&id=2803003read函数是Linux下不带缓存的文件 ...