Oracle 11G RAC环境的load balance + TAF配置

作者:八神 | 分类: 大话技术 | 标签: | 日期:2008-07-14

一.客户段的load balance + TAF
sword =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hack1-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = hack2-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = hack3-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = hack4-vip)(PORT = 1521))
    (LOAD_BALANCE = yes)
    (FAILOVER = ON)
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = sword.db.alibaba.com)
      (FAILOVER_MODE =
        (TYPE = SESSION)
        (METHOD = BASIC)
      )
    )
  )

LOAD_BALANCE = yes表示程序走sword连接的时候,将在下面4个地址里面随机的选择一个,达到接点间连接均匀
failover表示开启TAF(Transparent Application Failover)特性,其中TYPE = SESSION表示当一个连接好的会话
的实例发生故障,系统会自动将会话切换到其他可用的实例,前台应用无须再度发起连接,但会话正在执行的SQL
需要重新执行,METHOD = BASIC表示初始连接就连接一个接点,他还有个选项是preconnect,表示初始连接所有的
接点,在failover的时候可以很快就切过去,这个基本是资源浪费

二.服务器端的负载平衡
1.listener.ora文件里面配置
LISTENER_SWORD_HACK<n> =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
      (ADDRESS = (PROTOCOL = TCP)(HOST = hack<n>-vip)(PORT = 1521)(IP = FIRST))
      (ADDRESS = (PROTOCOL = TCP)(HOST = hack<n>-priv)(PORT = 1521)(IP = FIRST))
    )
  )
 
2.tnsnames.ora文件里面加入
LISTENERS_SWORD =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hack1-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = hack2-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = hack3-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = hack4-vip)(PORT = 1521))
  )
 
3.各个实例修改remote_listener参数
alter system set REMOTE_LISTENER = ‘LISTENERS_SWORD’ scope=both sid=’sword1′;
alter system set REMOTE_LISTENER = ‘LISTENERS_SWORD’ scope=both sid=’sword2′;
alter system set REMOTE_LISTENER = ‘LISTENERS_SWORD’ scope=both sid=’sword3′;
alter system set REMOTE_LISTENER = ‘LISTENERS_SWORD’ scope=both sid=’sword4′;

服务器段的负载均衡主要是通过REMOTE_LISTENER参数控制的,在连接被定位到某个接点后,系统会根据REMOTE_LISTENER
考虑多个接点的负载(主机load是个很重要的参考标准),把连接再次分发出去,这个和客户段的load balance是可以结合
在一起混合使用的,互不干扰

三.连接RAC数据库
[oracle@hack2 admin]$ sqlplus system/sg6n9ol0ij117@sword
SQL*Plus: Release 11.1.0.6.0 - Production on Mon Jul 14 10:29:33 2008
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
Enter password:
ERROR:
ORA-12520: TNS:listener could not find available handler for requested type of server

如果出现ORA-12520错误,应该是oracle的BUG,解决方法是加入local_listener参数控制各个接点service的注册
1.tnsnames.ora文件添加
LISTENER_HACK1 =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hack1-vip)(PORT =1521))
  )

LISTENER_HACK2 =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hack2-vip)(PORT =1521))
  )

LISTENER_HACK3 =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hack3-vip)(PORT =1521))
  )

LISTENER_HACK4 =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hack4-vip)(PORT =1521))
  )

2.修改各个接点的local_listener参数
alter system set LOCAL_LISTENER = ‘LISTENER_HACK1′ scope=both sid=’sword1′;
alter system set LOCAL_LISTENER = ‘LISTENER_HACK2′ scope=both sid=’sword2′;
alter system set LOCAL_LISTENER = ‘LISTENER_HACK3′ scope=both sid=’sword3′;
alter system set LOCAL_LISTENER = ‘LISTENER_HACK4′ scope=both sid=’sword4′;

3.重新启动listener
lsnrctl start LISTENER_SWORD_HACK<n>

4.连接
[oracle@hack2 admin]$ sqlplus system/sg6n9ol0ij117@sword
SQL*Plus: Release 11.1.0.6.0 - Production on Mon Jul 14 11:50:52 2008
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters and Real Application Testing options
SQL> show user
USER is “SYSTEM”

错误详细信息请参考metalink Note:342419.1

3人发表了评论  ↓发表评论↓
  • 长见识咯,谢过

    zZ @ July 15, 2008 |

  • 很好,谢谢

    liuyan1918 @ November 13, 2010 |

  • listener.ora中,每个节点应该监测自己的public IP和vip吧?
    为什么会设置priv IP呢

    liuyan1918 @ November 13, 2010 |

表情:<( ̄︶ ̄)> | (⊙ˍ⊙) | >﹏< | b( ̄▽ ̄)d | (─.─||) | (^_-)

[ Ctrl+Enter提交 ]

DBA