[zt Oracle RAC 负载均衡 --Oracle OpenWorld2007

          RAC环境配置好以后,在server上生成的tnsnames.ora里面, 负载均衡默认是开启的。一直对RAC的负载均衡不大明白。比如,RAC本身的负载均衡的依据是什么,是基于连接数,还是基于server的cpu占有率,如何彻底关闭掉RAC的负载均衡
关闭负载均衡的原因,有可能有下面几个:
1,RAC的最佳实践之一,就是把不同的模块访问不同的node,这样可以减少很多同步方面的工作,减少nodes之间通讯量。
2,有的客户可能是从原有系统升级到RAC的,各个节点机器配置不一定相同,虽然Oracle不建议这样做,但是有些时候客户听到RAC的概念之后,总是希望几台server一起工作,其实经过我们测试,如果机器配置差别较大,在没有把不同业务模块分开访问不同node的情况下,这样的搭配比单独使用高配置机器的性能还差。当然主要原因是同步问题。所以如果Oracle负载均衡机制不理想的话,还不如将其关掉,手动进行负载均衡,某些情况下,可以减少同步需求。
这次在Oracle产品展示区当面请教了一下Oracle工程师这方面的问题,不过好像说法好像也不完全一致。

关于负载均衡的依据:
工程师A说仅仅基于连接数,另外一位工程师B说是连接一瞬间的server cpu占有率。
关于彻底关掉负载均衡
需要把客户端tnsnames.ora中的load_balance设置为off,并且把remote_listener设置为空。

回来之后又google了一下,另外找到了一篇metalink的文档,Note:226880.1
configuration of load balancing and transparent transparent application failover
还有一篇文章: http://www.unixblog.net/mixer/?2005/12/15/1
看了这两篇文章之后,有些明白这个问题了,首先要搞清几个概念:
?
客户端负载均衡:客户端tnsnames.ora的配置(英文是节选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.?
如果打开客户端负载均衡,则在连接的时候会随机的选择配置中的ADDRESS来进行连接,这一步可以理解为完全不考虑server端负载情况的,虽然不是基于连接数的,但是“随机”的结果,应该是连接数相对平均的。这可能就是工程师A所说的,根据连接数。
服务器端负载均衡:初始化参数remote_listener的配置(英文是节选Note:226880.1)
In a shared server configuration, a listener selects a dispatcher in the following order:
1. Least-loaded node
2. Least-loaded instance
3. Least-loaded dispatcher for that instance
In a dedicated server configuration, a listener selects an instance in the following order:
1. Least loaded node
2. Least loaded instance
(这个地方有点疑问,就是没搞清这里面的node和instance啥区别,一个node上不是一般就是跑一个instance吗?汗...)
如果配置了remote_listener,在INSTANCE_ROLE都是PRIMARY_INSTANCE的情况下,listener会把连接route到负载低的节点上。这可能是B所说的,基于系统负载。
?
如果要彻底关掉负载均衡,需要三个工作
1.在客户端的tnsnames.ora,设置load_balance=off。关闭客户端负载均衡,连接会先到第一个address,但是可能被转发。
2.服务器端,设置remote_listener='',如果这里不设置,连接可能被转发。
3.确保不同的应用服务器访问不同的节点,或者不同的模块访问不同的节点。如果不进行修改配置,是按照tnsnames.ora里面的address顺序进行连接,不出错的情况下,始终是第一个列出的节点。
如果仅仅修改tnsnames.ora而不把remote_listener设置为空,那么即便在连接字符串里面指定了SID,仍然不能保证就是连接的那个SID,因为listener可能根据负载,把连接route到另外一个节点。不过这一点我还没有来得及实际做一下确认,只是两位工程师都是这么说。
?
但是设置了remote_listener为空就有个比较大的损失,就是好像不可能再实现TAF,不知道有无两全的办法。
??? 关于两节点RAC,机器配置差别比较大的那个案例,如果以后观察到性能差是因为RAC,如果没有其他手段再优化,那么我想这样做一下:
??? 两个节点的remote_listener都设置为空,关闭掉服务器端负载均衡。一台应用服务器的客户端负载均衡打开,另外一台应用服务器的客户端负载均衡关闭并且连接到配置比较好的那台db server上,这样的效果就是:一台应用的连接全部到好一点的机器,另外一台应用的连接,有接近一半的连接是到好一点的机器上。也算是手工负载均衡了一下。因为我看到至少对9i来说,所谓的服务器端负载均衡好像不怎么有效。
或者用另外的办法:
??? 两个应用服务器的tnsnames.ora中把客户端负载均衡都关掉,remote_listener不变,并且修改两台机器的INSTANCE_ROLE,这样,所有的应用连接都是到PRIMARY_INSTANCE,这样基本上就没什么需要同步的东西了,但是另外一台server实际上也就基本空闲了。这时候的好处就只剩下高可用性了。
?
不过还有个问题没有搞懂:
如果只设置了一个节点为PRIMARY_INSTANCE,那么TAF是否有效,还是只有Connect-Time Failover有效。据我凭空想,因为remote_listener是存在的,所以TAF应该是有效的,但是需要验证一下。?
?
另外, http://www.unixblog.net/mixer/?2005/12/15/1 ?中提到:“但是客户不需要load_balance,问题就一直卡在这里:一旦在DESCRIPTION下,定义了多个地址,即使用(load_balance= off)关闭了client端的负载均衡,但服务器端的负载均衡仍然自动生效;如果不定义多个地址,又无法实现connect-time failover。” 这里有点怀疑,服务器端负载均衡与多个address有无关系?我认为应该只是与remote_listener有关系,只要这个参数存在,服务器端负载均衡都是在作用的。这点也需要验证一下。那篇文章后面说的不定义多个地址实现connect-time failover的方法是正确的,因为根据上文的metalink文档,(failover = on)是可以放在DESCRIPTION_LIST节,也可以放在address节,推荐放在address。
?
10g的RAC比9i有了很大改进,特别是在节点间同步的问题上。据Oracle人讲,11g又有很大提高,期待11g RAC的性能表现。?

 
 
 
kilo 发表:
今天又看到一篇文章: http://yangtingkun.itpub.net/post/468/283474 ?
这里引用一段:
首先,TAF是针对SESSION和SELECT的,它不支持事务的切换。其实想想也是有道理的,当连接的实例发生了故障,客户端的连接发生了切换之后,SESSION信息、INSTANCE信息以及其他很多事务依赖的东西都不存在了,Oracle为了保证事务的完整性和一致性,必要要求用户回滚事务。
第二,SELECT模式的TAF只对不包含任何事务处理的查询有效。一旦用户执行了修改操作,SELECT模式也无法在TAF之后将进行一半的查询完成。
最后,如果启用了TAF功能,那么程序必须要添加处理ORA-25402错误的能力,否则一旦发生TAF切换,程序将一直报错,而无法再进行任何操作。
这里需要注意一下。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-600646/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/35489/viewspace-600646/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值