技术开发 频道

Oracle RAC环境中连接的高可用

    【技术开发 技术文章

    1、工作量分配的类型

    在RAC环境中,在多nodes上可以配置多个listeners来响应client对相同Database Service的连接请求。

    一个multiple-listener设置可影响相应的故障转移和负载均衡:

    *  client端的连接时间负载均衡(connect-time)

    *  client端的连接时间故障转移

    *  server端的连接时间负载均衡

    这些特性可以一个个单独实施,也可进行彼此的结合。

    此外,如果使用连接池,可以获得相应的运行时间的平衡(run-time balance):首先,client的工作请求自动的通过连接池获得一定的均衡;此外,从oracle JDBC隐式的连接缓冲特性也可获得相应的收效。

    2、client 端的连接时间负载均衡

    client端的connect-time负载均衡特性使client可以随机的连接请求列表中的可用listeners。Oracle Net进程通过类表中的协议地址,以随机序列来均衡各个listeners上的负载。否则,Oracle Net将总是尝试对第一个协议地址建立连接。

    可以在相应的client端的TNS实体设置参数LOAD_BALANCE=ON。

    具体例子:

    ERP =
    (DESCRIPTION =
    (LOAD_BALANCE=ON)
    (ADDRESS_LIST =
    (ADDRESS=(PROTOCOL=TCP)(HOST=node1vip)(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=node2vip)(PORT=1521))
    )
    (CONNECT_DATA=(SERVICE_NAME=ERP)))

    3、client 端的connect-time failover

    此特性可以使client,在初始的向第一个listener建立连接失败后,向其他listener建立连接。在连接描述符中,listener协议地址的数量决定了将会尝试连接listener的数量。如果没有此特性,Oracle Net将只尝试对一个listener的连接。具体上一个实例:

    ERP =
    (DESCRIPTION =
    (LOAD_BALANCE=ON)
    (FAILOVER=ON)
    (ADDRESS_LIST =
    (ADDRESS=(PROTOCOL=TCP)(HOST=node1vip)(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=node2vip)(PORT=1521))
     )
    (CONNECT_DATA=(SERVICE_NAME=ERP)))

    通过设置语句FAILOVER=ON,client端TNS实体实现了connect-time failover 。

    这里强烈推荐使用虚拟IP地址(VIP)具体原因在之前已经解释过了。

    note:如果使用connect-time failover(故障转移)。不要在listener.ora文件中设置GLOBAL_DBNAME属性。

    4、server 端的connect-time负载均衡

    上图显示了在RAC cluster中,listener分配Service连接请求的过程。client应用程序连接ERP Service。在server端,Database使用的是动态Service注册特性。这使得每个Instance中的PMON进程可以在cluster中的listeners之间彼此登记交互相应的工作量信息①。随后每个listener就可以获知哪个Instance的哪个Service被started,以及得知每个Instance的绝对session数量和每个node上的运行队列长度。

    该特性的具体设置主要是通过在每个Instance的SPFILE中设置初始化参数REMOTE_LISTENER来实现的。该参数的值应该为listener.ora文件中设置的一个TNS名。

    根据第①步中获得的负载信息,默认情况下一个listener会重定向相应的连接请求②到负载量最小的node中的Instance对应的listener③。如果想要确保listener重定向连接请求到负载最小的Instance,需要在listener.ora文件中设置PREFER_LEAST_LOADED_NODE_[listener_name]为OFF。如果使用连接池,这种方法效果更好。

    图中,首先尝试建立连接的是node2上的listener。基于由PMON进程动态更新的工作量信息,listener确定当前最好的Instance应该是在node1上。所以listener将连接请求重新定向到node1上的listener④。随后,node1上的listener建立一个专用的server进程⑤,连接建立到该进程上⑥。
 

0
相关文章