现在的位置: 首页 > 综合 > 正文

Oracle RAC LoadBalance

2013年10月12日 ⁄ 综合 ⁄ 共 2107字 ⁄ 字号 评论关闭

LoadBalance 就是把负载平均的分配到集群中的各个节点,从而提高整体的吞吐能力。 Oracle 10g RAC 提供了两种不同的方法来分散负载:

1. 通过Connection Balancing,按照某种算法把用户分配到不同的节点。也可认为是纯技术的分散负载。

2. 通过Service,在应用层上进行分散,也可认为是面象业务的分散负载。

 

一.Connection Balancing

Connection Balancing 这种负载均衡是在用户连接这个层次进行的,也就是在用户请求建立连接时,根据每个节点的负载决定把连接分配给哪个实例,而一旦连接建立之后,会话的所有操作就都在这个实例上完成,而不会再分派给其他节点了。

Connection Balancing 有客户端和服务端两种实现方法。

 

1.1 客户端均衡(Client-Side LB

客户端均衡(Client-Side LB)是Oracle 8 使用的方法,配置方法是在客户端的tnsnames.ora 文件中加入:

LOAD_BALANCE=YES 条目。当客户端发起连接时,会从地址列表中随机的选取一个,在使用随即算法把连接
请求分配到各个实例。

一个Clint-Side LBTNS 配置文件如下:

RAC =

  (DESCRIPTION =

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

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

    (LOAD_BALANCE = YES)

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = RAC)

      )

    )

  )

注: rac1-vip 需要添加到hosts 文件中

 

这种方法缺点很明显,因为在分配连接时没有考虑每个节点的真实负载,最后分配结果不一定是平衡的;并且随即算法需要长时间片,如果在短时间内同时发起多个连接,这些连接有可能都被分配到一个节点上,甚至更坏的情况下,连接可能被分配到故障节点上。因此Oracle 引入了服务端均衡(Sevice-Side LB)方式。

 

 

1.2 服务器端均衡(Server-Side LB

Server-Side LB 是从Oracle 9引入的。 它的实现依赖于Listener收集负载信息。 在数据库运行过程中,PMON后台进程会收集系统的负载信息,然后登记到Listener中。 最少1分钟,最多10分钟PMON就要做一个信息更新,并且如果节点的负载越高,更新频率就越高,以保证Listener能掌握每个节点准确的负载情况。如果Listener关闭了,PMON进程会每隔1秒钟检查Listener是否重启。除了这个自动的,定时的更新任务外,用户也可以使用alter system register 命令来手工进行这个过程。

这个自动更新动作,可以从Listener的日志中看到,比如下面这个Listener日志片段很清楚的记录了这些动作。注意,实例启动时PMON进程进行的第一次登记过程叫作Server-register,而后的更新过程叫作service-update

[root@rac1 log]# pwd

/u01/app/oracle/product/10.2.0/db_1/network/log

[root@rac1 log]# more *.log

.....

27-FEB-2010 02:15:10 * service_register * rac1 * 0

27-FEB-2010 02:15:11 * service_update * rac1 * 0

27-FEB-2010 02:15:11 * service_update * rac1 * 0

27-FEB-2010 02:15:23 * service_update * +ASM1 * 0

27-FEB-2010 02:15:32 * service_update * +ASM1 * 0

.....

 

Listener 日志虽然记录了PMON 进程的注册和更新动作,但是注册的内容却没有体现,要想获得这些内容,可以通过跟踪10257 时间来获得,这个事件就是跟踪PMON活动。 

Event="10257 trace name context forever,levl 16"

 

关于event 的具体使用,参考我的blog

http://blog.csdn.net/xujinyang/article/details/6829880

 

 

PMON 进程不仅会向本地的Listener注册,还可以向其他节点上的Listener注册。但到底要想何处注册,是由Remote_Listeners Local_Listener 两个参数决定。 Local_Listener 不用设置,而Remote_Listener 需要设置,参数值是一个tnsnames

【上篇】
【下篇】

抱歉!评论已关闭.