Oracle RAC 客户端连接负载均衡(Load Balance)

实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力。通常情况下有两种方式来实现负载均衡,一个是基于客户端连接的负载均衡,一个是基于服务器端监听器(Listener)收集到的信息来将新的连接请求分配到连接数较少实例上的实现方式。本文主要讨论的是基于客户端连接的负载均衡,并给出演示。

与负载均衡配置之前的监听配置请参考
              ORACLE RAC 监听配置 (listener.ora tnsnames.ora) 
              ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)

一、客户端的负载均衡
         客户端的负载均衡主要是通过为tnsnames.ora增加load_balance=yes条目来实现,下面看看oracle(Note:226880.1)的解释

The client load balancing feature enables clients to randomize connection requests among the listeners. Oracle Net progresses through the list of
        protocol addresses in a random sequence, balancing the load on the various listeners. Without client load balancing, Oracle Net progresses through the
        list of protocol addresses sequentially until one succeeds.  This normally is referred to connect-time load balance.

从上面的描述中可以得知,如果未开启load_balance=yes时,Oracle Net会根据地址列表按顺序来选择一个进行连接,直到连接成功为止。   
        如果第一个host主机连接失败,在有多个地址的情形下,接下来选择第二个地址连接,依此类推,直到连接成功为止。
        当开启了load_balance=yes时,则Oracle Net会从多个地址中随机地选择一个地址进行连接,直到连接成功为止。
        注意,此连接方式仅根据地址列表随机选择,并不考虑到各个实例上当前真正连接数量的多少,也即是没有考虑各个节点真实的连接负载情况。

二、服务器与客户端的配置情况

[sql] view plain copy

print?

  1. 1、服务器端监听器配置
  2. [email protected]:~> more $ORACLE_HOME/network/admin/listener.ora  --#节点bo2dbp上的listener
  3. # listener.ora.bo2dbp Network Configuration File: /u01/oracle/db/network/admin/listener.ora.bo2dbp
  4. # Generated by Oracle configuration tools.
  5. LISTENER_NEW_BO2DBP =
  6. (DESCRIPTION_LIST =
  7. (DESCRIPTION =
  8. (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1314)(IP = FIRST))
  9. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.51)(PORT = 1314)(IP = FIRST))
  10. )
  11. )
  12. ...........................--#其余部分省略,注意此处的配置是使用了1314的非缺省监听器端口号
  13. [email protected]:/u01/oracle/db/network/admin> more listener.ora  --#节点bo2dbs上的listener
  14. # listener.ora.bo2dbs Network Configuration File: /u01/oracle/db/network/admin/listener.ora.bo2dbs
  15. # Generated by Oracle configuration tools.
  16. LISTENER_NEW_BO2DBS =
  17. (DESCRIPTION_LIST =
  18. (DESCRIPTION =
  19. (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbs-vip.2gotrade.com)(PORT = 1314)(IP = FIRST))
  20. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.52)(PORT = 1314)(IP = FIRST))
  21. )
  22. )
  23. ...............
  24. 2、参数配置
  25. -->instrance ora10g1上的参数配置
  26. SQL> show parameter instance_na
  27. NAME                                 TYPE        VALUE
  28. ------------------------------------ ----------- ------------------------------
  29. instance_name                        string      ora10g1
  30. SQL> show parameter listener
  31. NAME                                 TYPE        VALUE
  32. ------------------------------------ ----------- ------------------------------
  33. local_listener                       string      local_lsnr_ora10g1
  34. remote_listener                      string      remote_lsnr_ora10g
  35. -->instrance ora10g2上的参数配置
  36. SQL> show parameter instance_name
  37. NAME                                 TYPE        VALUE
  38. ------------------------------------ ----------- ------------------------------
  39. instance_name                        string      ora10g2
  40. SQL> show parameter listener
  41. NAME                                 TYPE        VALUE
  42. ------------------------------------ ----------- ------------------------------
  43. local_listener                       string      local_lsnr_ora10g2
  44. remote_listener                      string      remote_lsnr_ora10g
  45. -->instrance ora10g2上的监听信息
  46. SQL> ho ps -ef | grep lsnr
  47. oracle   17372     1  0 11:00 ?        00:00:00 /u01/oracle/db/bin/tnslsnr LISTENER_NEW_BO2DBS -inherit
  48. oracle   17502 24301  0 12:10 pts/0    00:00:00 /bin/bash -c ps -ef | grep lsnr
  49. oracle   17504 17502  0 12:10 pts/0    00:00:00 grep lsnr
  50. SQL> ho lsnrctl status LISTENER_NEW_BO2DBS
  51. Listening Endpoints Summary...
  52. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.62)(PORT=1314)))
  53. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.52)(PORT=1314)))
  54. Services Summary...
  55. Service "ora10g" has 2 instance(s).
  56. Instance "ora10g1", status READY, has 1 handler(s) for this service...
  57. Instance "ora10g2", status READY, has 2 handler(s) for this service...
  58. ..........
  59. -->由于只是测试基于客户端的load balance,因此移出remote_listener参数
  60. SQL> alter system reset remote_listener scope=both sid=‘*‘;
  61. alter system reset remote_listener scope=both sid=‘*‘
  62. *
  63. ERROR at line 1:
  64. ORA-32009: cannot reset the memory value for instance * from instance ora10g2
  65. SQL> alter system reset remote_listener scope=spfile sid=‘*‘;
  66. System altered.
  67. SQL> ho srvctl stop database -d ora10g  -->关闭数据库ora10g
  68. SQL> ho srvctl start database -d ora10g  -->启动数据库ora10g使得刚刚修改的remote_listener生效
  69. SQL> ho lsnrctl status LISTENER_NEW_BO2DBS  -->此时可以看到只有ora10g2注册到监听器
  70. Listening Endpoints Summary...
  71. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.62)(PORT=1314)))
  72. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.52)(PORT=1314)))
  73. Services Summary...
  74. Service "PLSExtProc" has 1 instance(s).
  75. Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
  76. Service "ora10g" has 1 instance(s).
  77. Instance "ora10g2", status READY, has 1 handler(s) for this service...
  78. ..........
  79. [email protected]:~> lsnrctl status LISTENER_NEW_BO2DBP  #同样在节点bo2dbp也只有ora10g1注册到监听器
  80. Listening Endpoints Summary...
  81. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.61)(PORT=1314)))
  82. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.51)(PORT=1314)))
  83. Services Summary...
  84. Service "ora10g" has 1 instance(s).
  85. Instance "ora10g1", status READY, has 1 handler(s) for this service...
  86. .........
  87. 3、客户端配置
  88. SZDB:~ # ifconfig eth1 | grep "inet addr"|cut -d " " -f12|cut -d : -f2  #客户端主机的ip
  89. 192.168.7.2
  90. SZDB:~ # su - oracle
  91. [email protected]:~> cat /etc/hosts     --#客户端主机添加了RAC上的两个虚拟节点的ip信息
  92. 192.168.7.61   bo2dbp-vip.2gotrade.com    bo2dbp-vip
  93. 192.168.7.62   bo2dbs-vip.2gotrade.com    bo2dbs-vip
  94. [email protected]:~> tail -12 $ORACLE_HOME/network/admin/tnsnames.ora
  95. ORA10G =
  96. (DESCRIPTION =
  97. (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1314))
  98. (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbs-vip.2gotrade.com)(PORT = 1314))
  99. (LOAD_BALANCE = yes)
  100. (CONNECT_DATA =
  101. (SERVER = DEDICATED)
  102. (SERVICE_NAME = ora10g)
  103. )
  104. )

三、测试负载均衡(load balance)

[sql] view plain copy

print?

  1. 1、启用load balance的测试
  2. [email protected]:~> more load_balance.sh
  3. #!/bin/bash
  4. for i in {1..100}
  5. do
  6. echo $i
  7. sqlplus -S system/[email protected] <<EOF
  8. select instance_name from v\$instance;
  9. EOF
  10. sleep 1
  11. done
  12. exit 0
  13. # Author: Robinson Cheng
  14. # Blog :  http://blog.csdn.net/robinson_0612
  15. [email protected]:~> ./load_balance.sh >load_bal.log
  16. [email protected]:~> head -20 load_bal.log
  17. 1
  18. INSTANCE_NAME
  19. ----------------
  20. ora10g2
  21. 2
  22. INSTANCE_NAME
  23. ----------------
  24. ora10g1
  25. 3
  26. INSTANCE_NAME
  27. ----------------
  28. ora10g2
  29. 4
  30. [email protected]:~> grep ora10g1 load_bal.log |wc -l
  31. 47
  32. [email protected]:~> grep ora10g2 load_bal.log |wc -l
  33. 53
  34. 从上面的log日志中可以看出启用客户端的负载均衡基本上使得从客户端发起连接的能够保持均衡。
  35. 2、未启用load balance的测试
  36. 从客户端的tnsnames.ora中移出(LOAD_BALANCE = yes)选项,然后继续使用上面的脚本来测试
  37. [email protected]:~> grep ora10g1 no_load_bal.log |wc -l
  38. 100
  39. [email protected]:~> grep ora10g2 no_load_bal.log |wc -l
  40. 0
  41. 从上面的日志中可以看出当移出LOAD_BALANCE = yes项后,所有的用户连接请求都被定为到ora10g1,这是因为连接请求从tnsnames.ora中选择
  42. 列在ADDRESS项中排在第一行的位置。
  43. 下面我们关闭实例ora10g1,再来测试连接情形
  44. [email protected]:~> srvctl stop instance -d ora10g -i ora10g1
  45. [email protected]:~> ./load_balance.sh >no_load_bal_new.log
  46. [email protected]:~> grep ora10g1 no_load_bal_new.log |wc -l
  47. 0
  48. [email protected]:~> grep ora10g2 no_load_bal_new.log |wc -l
  49. 100
  50. 由于实例ora10g1已经关闭,因此所有的连接请求都被分配到ora10g2。

四、总结  
1、客户端的负载均衡配置较为简单,仅仅是在客户端的tnsnames.ora添加 LOAD_BALANCE = yes |on 
2、其连接分配原则是根据tnsnames.ora中连接标识符下的ADDRESS列表随机选择来进行与服务器之间的连接
3、如果选择列表中的某个节点listener或instance不可用,则再从剩余的ADDRESS列表随机选择,直到成功为止

转:http://blog.csdn.net/leshami/article/details/8060634

时间: 2024-12-26 08:38:36

Oracle RAC 客户端连接负载均衡(Load Balance)的相关文章

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

Oracle RAC服务器端的负载均衡是根据RAC中各节点的连接负荷数情况,将新的连接请求分配到负荷最小的节点上去.当数据库处于运行时,RAC中各节点的PMON进程每3秒会将各自节点的连接负荷数更新到service_register.而对于节点中任意监听器故障或监听器意外失败时,PMON进程会每1秒钟检查当前节点上的监听是否重启,以获得最新的负载信息来及时调整负载均衡.本文主要演示suse 10 + oracle 10g rac下的服务器端的负载均衡. 有关客户端的负载均衡可参考      Or

&quot;高可用方案工具包&quot; high availability toolkit 1.2 发布了。version 1.2 新增了 负载均衡 load balance 的技术实现

"高可用方案工具包"  high availability toolkit 1.2 发布了.version 1.2 新增了 负载均衡 load balance 的技术实现. 项目地址:     https://github.com/yfwangpeng/HighAvailabilityToolkit 实时微博:     http://weibo.com/58wp58       介平

负载均衡Load Balance学习

目录 1. 负载均衡简介 2. 负载均衡算法 3. Nginx负载均衡调度算法源码调研 1. 负载均衡简介 0x1: 负载均衡是什么 负载均衡是一种技术架构方法,它并不是具体指哪一种技术,也正是因为这样,负载均衡被运用在了很多的领域 严格来说,负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群).网络连接.CPU.磁盘驱动器或其他资源中分配负载,以达到最佳化资源使用.最大化吞吐率.最小化响应时间.同时避免过载的目的,使用带有负载平衡的多个服务器组件,取代单

Oracle 11g 客户端连接远程服务器数据库配置

在使用oracle11g Net Manager 连接远程数据库遇到的问题总结. 1 在win7系统上start菜单-->Oracle - OraDb11g_home1-->配置和移植工具-->Net Manager 2 点击服务命名-->打开服务命名向导 在下面的操作中,一定要记得保存网络配置.记着选择使用oracle8发行版8.0兼容标识

oracle 普通客户端连接请求解析过程

Oracle RAC 负载均衡测试(结合服务器端与客户端)

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

oracle的高可用与负载均衡

浏览了一下Oracle官方的网页以及非官方的ppt,简单了解了一下Oracle提供的高可用方案.1. RACRAC,  Real Application Clusters多个Oracle服务器组成一个共享的Cache,而这些Oracle服务器共享一个基于网络的存储.这个系统可以容忍单机/或是多机失败.不过系统内部的多个节点需要高速网络互连,基本上也就是要全部东西放在在一个机房内,或者说一个数据中心内.如果机房出故障,比如网络不通,那就坏了.所以仅仅用RAC还是满足不了一般互联网公司的重要业务的需

【转】集群和负载均衡的概念

集群(Cluster)所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信.应用程序可以通过网络共享内存进行消息传送,实现分布式计算机. 负载均衡(Load Balance)网络的负载均衡是一种动态均衡技术,通过一些工具实时地分析数据包,掌握网络中的数据流量状况,把任务合理均衡地分配出去.这种技术基于现有网络结构,提供了一种扩展服务器带宽和增加服务器吞吐量的廉价有效的方法,加强了网络数据处理能力,提高了网络的灵活性和可用性. 特点: (1)高可靠性(H

为什么基于DNS的全局负载均衡(GSLB)不起作用?

Why DNS Based Global Server Load Balancing (GSLB) Doesn't Work 作者:Pete Tenereillo 3/11/04 Copyright Tenereillo, Inc. 2004 序言 弗雷德:乔,我要去赶一班飞机,从好莱坞到洛杉矶国际机场需要多长时间? 乔:恩...这取决于你走哪条路. 弗雷德:恩...我觉得我应该走高速公路,对吧? 乔:好吧,这是一个技术性问题,我能回答它.如果以60km/h的速度,走高速需要20分钟. 弗雷德: