`
dawuafang
  • 浏览: 1125863 次
文章分类
社区版块
存档分类
最新评论

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会从多个地址中随机地选择一个地址进行连接,直到连接成功为止。
注意,此连接方式仅根据地址列表随机选择,并不考虑到各个实例上当前真正连接数量的多少,也即是没有考虑各个节点真实的连接负载情况。

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

  1. 1、服务器端监听器配置
  2. oracle@bo2dbp:~> 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. oracle@bo2dbs:/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. oracle@bo2dbp:~> 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. oracle@SZDB:~> 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. oracle@SZDB:~> 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)

  1. 1、启用load balance的测试
  2. oracle@SZDB:~> more load_balance.sh
  3. #!/bin/bash
  4. for i in {1..100}
  5. do
  6. echo $i
  7. sqlplus -S system/oracle@ORA10G <<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. oracle@SZDB:~> ./load_balance.sh >load_bal.log
  16. oracle@SZDB:~> 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. oracle@SZDB:~> grep ora10g1 load_bal.log |wc -l
  31. 47
  32. oracle@SZDB:~> grep ora10g2 load_bal.log |wc -l
  33. 53
  34. 从上面的log日志中可以看出启用客户端的负载均衡基本上使得从客户端发起连接的能够保持均衡。
  35. 2、未启用load balance的测试
  36. 从客户端的tnsnames.ora中移出(LOAD_BALANCE = yes)选项,然后继续使用上面的脚本来测试
  37. oracle@SZDB:~> grep ora10g1 no_load_bal.log |wc -l
  38. 100
  39. oracle@SZDB:~> grep ora10g2 no_load_bal.log |wc -l
  40. 0
  41. 从上面的日志中可以看出当移出LOAD_BALANCE = yes项后,所有的用户连接请求都被定为到ora10g1,这是因为连接请求从tnsnames.ora中选择
  42. 列在ADDRESS项中排在第一行的位置。
  43. 下面我们关闭实例ora10g1,再来测试连接情形
  44. oracle@bo2dbp:~> srvctl stop instance -d ora10g -i ora10g1
  45. oracle@SZDB:~> ./load_balance.sh >no_load_bal_new.log
  46. oracle@SZDB:~> grep ora10g1 no_load_bal_new.log |wc -l
  47. 0
  48. oracle@SZDB:~> 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列表随机选择,直到成功为止

五、更多参考

基于用管理的备份备份请参

Oracle 冷备份

Oracle 热备份

Oracle 备份恢复概念

Oracle 实例恢复

Oracle 基于用户管理恢复的处理(详细描述了介及其)

SYSTEM 表空间管理及备份恢复

SYSAUX表空间管理及恢复

Oracle 基于备份控制文件的恢复(unsing backup controlfile)

RMAN的备份复与管理请参

RMAN 概述及其体系结构

RMAN 配置、监控与管理

RMAN 备份详解

RMAN 还原与恢复

RMAN catalog 的创建和使用

基于catalog 创建RMAN存储脚本

基于catalog 的RMAN 备份与恢复

RMAN 备份困惑

ORACLE体系结构请参

Oracle 表空间与数据文件

Oracle 密码文件

Oracle 参数文件

Oracle 联机重做日志文件(ONLINE LOG FILE)

Oracle 控制文件(CONTROLFILE)

Oracle 归档日志

Oracle 回滚(ROLLBACK)和撤销(UNDO)

Oracle 数据库实例启动关闭过程

Oracle 10g SGA 的自动化管理

Oracle 实例和Oracle数据库(Oracle体系结构)

分享到:
评论

相关推荐

    Oracle RAC数据库连接负载均衡配置研究.pdf

    4. 客户端连接负载均衡:客户端连接负载均衡主要通过在客户端的 tnsnames.ora 配置文件中设置参数 load_balance=yes 来实现。 5. 服务器端连接负载均衡:服务器端连接负载均衡主要由服务器监听器(Listener)来实现...

    ORACLE RAC 数据库负载均衡方案

    ORACLE RAC 数据库负载均衡方案.doc

    ORACLE RAC服务器端负载均衡的配置.pdf

    ORACLE RAC服务器端负载均衡的配置.pdf

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

    1. 客户端负载均衡配置方法是在客户端tnsnames.ora文件中设置LOAD_BALANCE=YES,当客户端发起连接时,会从地址列表中随机选取一个,把连接请求随机分散给各个实例。这个技术的最大缺点在于不能根据各个实例的真实...

    Oracle 10g RAC的负载均衡配置

    Oracle 10g RAC的负载均衡配置,负载均衡是指连接的负载均衡。RAC的负载均衡主要是指新会话连接到RAC数据库时,如何判定这个新的连接要连到哪个节点进行工作。在RAC中,负载均衡分为两种,一种是基于客户端连接的,...

    ORACLE RAC 数据库负载均衡方案.doc

    ORACLE RAC 数据库负载均衡方案.doc

    Oracle RAC 10g高可用系统负载均衡测试与分析.pdf

    Oracle RAC 10g高可用系统负载均衡测试与分析 本文主要介绍了Oracle RAC 10g高可用系统负载均衡测试与分析的相关知识点。Oracle RAC(Real Application Clusters)是一种高可用性的数据库解决方案,能够提供高效的...

    Oracle-11G-RAC及负载均衡搭建手册.docx

    本文详细的介绍了oracle 11g rac的搭建过程,并讲解了负载均衡的方法,是word文档,可以照着做一遍,图文并茂,容易理解!

    Oracle 11g R2 RAC及负载均衡搭建手册.pdf

    Oracle 11g R2 RAC及负载均衡搭建手册.pdf

    Oracle-11G-R2-RAC及负载均衡搭建手册 高清完整PDF版

    RAC,全称 real application clusters,译为“实时应用集群”,是 Oracle 新版数据库中采用的一项新技术,是高可用性的一种,也是 Oracle 数据库支持网格计算环境的核心技术。

    Load Balancing & Failover (RAC)RAC负载均衡和失效接管

    Load Balancing & Failover (RAC)RAC负载均衡和失效接管

    ORACLE_10g_RAC_负载均衡配置

    ORACLE_10g_RAC_负载均衡配置,负载均衡是指连接的负载均衡。RAC的负载均衡主要是指新会话连接到RAC数据库时,如何判定这个新的连接要连到哪个节点进行工作。在RAC中,负载均衡分为两种,一种是基于客户端连接的,...

    Oracle RAC增加ASM盘,创建表空间

    Oracle RAC 增加 ASM 盘, 创建表空间 Oracle RAC 是一种高可用、高性能的数据库解决方案,通过将多个服务器节点组成一个集群,提供了高可用性和高性能的数据库服务。在 Oracle RAC 中,ASM(Automated Storage ...

    oracle rac防火墙配置学习

    Linux 常用命令 oracle rac 中文手册 官网翻译 oracle rac

    记录一次在Vmware ESXi6虚拟机环境下搭建oracle的RAC的过程

    在测试Oracle RAC之前,我们需要检查数据库的连接性和可用性。 1. 检查数据库连接性:我们需要检查数据库连接性,以便确保数据库的可用性。 2. 测试数据库可用性:我们需要测试数据库可用性,以便确保数据库的高...

    Oracle rac功能测试方案

    此文档是Oracle 11g rac安装完成后的IOPS、负载均衡、TAF等的测试,内容详尽。

    Oracle RAC 12c运维最佳实践指南.pdf

    Oracle RAC 12c 运维最佳实践指南 Oracle RAC 12c 是一种高可用、高性能的集群解决方案,旨在实现数据库的高可用性和可扩展性。本文将对 Oracle RAC 12c 运维最佳实践指南进行解读,总结出相关的知识点。 一、 ...

    Oracle RAC重启操作手册

    这个文档详细的记录了重启Oracle rac的每一个步骤,重启的方法很多,这个可能不是最适合你的,但这个是有效的,这个文档是我给外行看的

    配置Oracle RAC集群数据源

    配置 Oracle RAC 集群数据源需要考虑多个方面,包括数据源 URL 的配置、连接池的配置、负载均衡和故障转移等。 在配置 Oracle RAC 集群数据源时,需要关注以下几个方面: (1)数据源 URL 的配置:数据源 URL 的...

    oracle rac 安装部署文档.pdf

    Oracle RAC 安装部署文档 本文档详细介绍了 Oracle RAC 的安装部署过程,涵盖了物理硬件配置需求、虚拟机需求、操作系统安装、数据库安装、 Oracle RAC 图形界面搭建方法、创建磁盘组、安装 Oracle 数据库、性能...

Global site tag (gtag.js) - Google Analytics