Oracle] RAC 之 - 负载均衡深入解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle] RAC 之 - 负载均衡深入解析相关的知识,希望对你有一定的参考价值。

参考技术A 负载均衡是指把负载平均分配到集群中的各个节点 从而提高整体性能 Oracle RAC提供两种方式实现负载均衡 以下就为大家详细介绍一下 需要的朋友可以参考下  

  Oracle RAC提供两种方式实现负载均衡 第一种是纯技术手段 即在用户连接时 根据系统当前的负载情况决定由哪个节点处理用户请求 第二种是面向业务 人为的把应用切分成很多service 通过某个service过来的连接请求都由某个节点处理 下面来具体看看这两种手段

   纯技术手段 (面向连接的负载均衡)

   客户端负载均衡 配置方法是在客户端tnsnames ora文件中设置LOAD_BALANCE=YES 当客户端发起连接时 会从地址列表中随机选取一个 把连接请求随机分散给各个实例 这个技术的最大缺点在于不能根据各个实例的真实负载情况来分散请求 太过粗糙 因此很少使用

   服务器端负载均衡 服务器端负载均衡依赖于Listener收集的负载信息 在数据库运行过程 中 pmon进程会收集系统的负载信息 定期更新至Listener中 如果你配置了Remote_listener参数 pmon进程不但能把负载信息 注册到本地Listener 也可以注册到其它实例的Listener 这样有了pmon自动注册机制后 集群的每个节点的Listener都掌握了所有 节点的负载信息 当收到客户端请求时 会把连接分配给负载最小的实例

lishixinzhi/Article/program/Oracle/201311/19020

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

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

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

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

 

一、配置需求

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

二、测试Load Balance

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

以上是关于Oracle] RAC 之 - 负载均衡深入解析的主要内容,如果未能解决你的问题,请参考以下文章

text JDBC负载均衡方式连接的Oracle双机RAC

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

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

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

oracle rac vip scanip

客户端负载均衡Ribbon之源码解析