设为首页 加入收藏

TOP

负载均衡(LB)详解(二)
2015-07-24 11:13:58 来源: 作者: 【 】 浏览:6
Tags:负载 均衡 详解
-------------------------------------------------------------------

/u01/oracle/admin/felix/udump/felix1_ora_27465.trc?

PMON进程不仅回想本地的Listener注册,还可以向其他节点的listener注册。但到底要向何处注册,是由remote_listener和local_listener这两个参数决定。Local_Listener不用设置,而remote需要设置,参数值是一个tnsnames项。?

SQL> show parameter listener?

NAME TYPE VALUE

------------------------------------ -----------------------------------------

local_listener string LISTENER_FELIX1

remote_listener string LISTENERS_FELIX

SQL>?

Tnsnames.ora中对应的LISTENERS_FELIX的内容如下:?

LISTENERS_FELIX =

(ADDRESS_LIST=

(ADDRESS= (PROTOCOL = TCP)(HOST = felix1-vip)(PORT = 1521))

(ADDRESS= (PROTOCOL = TCP)(HOST = felix2-vip)(PORT = 1521))

)?

有了PMON的自动注册机制后,集群的每个节点的Listener都掌握所有节点的负载状态,当收到客户端的连接请求时,就会把连接转给负载最小的节点,这个节点有可能是自己也可能是其他节点,也就是Listener会转发用户连接的请求listener的节点选择方法根据用户所请求的连接方式会有所不同:

a. 如果用户请求的是Dedicate专有连接,Listener首先选择负载最小的节点,如果多个节点负载相同,则从中选择负载最小的实例;

b. 如果用户请求的是shared server共享连接,除了做节点负载比较和实例负载比较之外,还要在所选实例上,选择最小的Dispatcher进行转发。?

两种LB的配置方法:

对于client-Side LB,需要在客户的tnsnames条目中加入LOAD_BALANCE=YES。对于Server-Side LB,需要配置REMOTE_LISTENER这个参数。

在配置LB时有一点需要注意:需要从各个实例的listener文件中却掉缺省的SID_LIST_LISTENER_NAME条目,这样才能保证Listener获得的信息都是动态注册的,而不是从文件中读出的静态信息。

修改前:

[oracle@felix2 admin]$ cat listener.ora

# listener.ora.felix2 Network Configuration File:/u01/oracle/10.2.0/db_1/network/admin/listener.ora.felix2

# Generated by Oracle configuration tools.?

LISTENER_FELIX2 =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = felix2-vip)(PORT = 1521)(IP = FIRST))

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.102)(PORT = 1521)(IP =FIRST))

)

)?

----------------------------------------

SID_LIST_LISTENER_FELIX2 =

(SID_LIST=

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /u01/oracle/10.2.0/db_1)

(PROGRAM = extproc)

)

)?

[oracle@felix2 admin]$?

修改后配置如下:

[oracle@felix2 admin]$ catlistener.ora

# listener.ora.felix2 Network Configuration File:/u01/oracle/10.2.0/db_1/network/admin/listener.ora.felix2

# Generated by Oracle configuration tools.?

LISTENER_FELIX2 =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = felix2-vip)(PORT = 1521)(IP = FIRST))

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.102)(PORT = 1521)(IP =FIRST))

)

)?

[oracle@felix2 admin]$?

利用service分散负载

Connection Balancing方法的不足之处,Oracle的集群时“共享一切“的架构,所有节点都共享一份磁盘数据。实例间通过cachefusion机制进行数据同步,所以RAC的性能在很大程度上受限于cache fusion的性能。因此,要提高RAC的性能可以从两方面入手,一方面提高cache fusion的能力,这可以通过更好的互联设备,比如G级的Private network,或者使用Infiniband等DRA技术;另一方面,可以尽量减少cache fusion的流量,减少实例间的相互依赖。而service就是后一种思路基础上发展出来的。

先看一下与service非常相似的Partition技术。如果一个表中的数据量巨大,Oralce会建议采用了Partition Table,把数据按照一定的规律分散到多个物理段(Segment)中,这样访问数据时就限制在某些个局部的Segment上。

把“分散数据“思想机一部提升,在RAC环境中,如果能够把数据按照应用进行分离,考虑下面这个场景:一个ERP应用包括生产、销售、供应链管理多个模块。假设这个数据库采用了2节点的RAC在没有进行“数据分散”之前,两个用户都使用销售模块,那么这两个用户就可能被分配到两个节点上,在操作过程中,销售数据就要在cache fusion的作用下,不断在两个节点间传递,如果有来了另外两个生产模块的用户,这两个用户又被分配到两个节点上,在操作的过程中,生产部分的数据又要在Cache fusion的协助下在两个实力之间同步。

可见,如果仅有connectionbalance一种机制,表面上看起来用户是被分配到了不同的实例上,似乎负载被分散了。但是这种分散是没有结合每个用户的业务需求进行的,是一种纯技术手段(因此可以把它叫做纯技术手段分散)。

如果换一种解决思想,假如把销售模块的用户都分配到节点1上,生产模块的用户都分配到节点2上,在假设这两个模块之间的数据交叉不多,这是销售模块的数据都集中在节点1上,生产库模块的数据都集中在节点2上,cachefusion的工作量就会急剧减少,

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇【Access2007】将Excel表导入至Ac.. 下一篇MongoDB时区问题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·python数据分析岗的 (2025-12-25 10:02:21)
·python做数据分析需 (2025-12-25 10:02:19)
·成为一个优秀的pytho (2025-12-25 10:02:16)
·Java后端面试实习自 (2025-12-25 09:24:21)
·Java LTS版本有哪些 (2025-12-25 09:24:18)