技术开发 频道

Oracle RAC环境中连接的高可用

    11)JDBC的fast connection failover

    ①overview

    Oracle Application Server10g 将JDBC Implicit Connection Cache(ICC)与ONC整合,从而使应用程序开发者能获得fast connection failover(FCF)。FCF与JDBC ICC联合工作,快速并自动的恢复丢失或是损坏的连接。这类自动的连接管理是通过FAN时间通过本地ONS被接收到、并由特定的event处理脚本处理来实现的。JDBC thin和JDBC OCI驱动程序都被支持。

    因此,如果使用JDBC ICC和FCF,则Java 程序将自动的成为ONC的用户,而无需对FAN事件进程直接的管理。

    当任何时候,一个service发起的event被中间层ONS接收到,event处理程序会重用一些未被使用的连接,并使用event service name重新建立连接。重用的连接数量是由连接缓冲自动决定的。因为listeners执行connect-time 负载均衡,所以它将通过service的preferred Instances进行自动的连接在平衡,无需等待应用连接请求或是重试。

    ②benefits

    *  所有的database 连接的均衡是贯穿于RAC中所有支持相应service name的 Instances,而不是仅通过路由建立在类表中的第一个RAC Instance上。连接池在service、Instance或是node up events的基础上进行了再均衡。

    *  当新的service在Instance上被enable,连接缓冲立即开始分配连接到特定的RAC Instance上

    *  当某个Instance上的service被停止或是node宕机,连接缓冲会立即关闭过时的相应RAC Instance连接。

    *  Java程序自动的变为一个ONS的用户,而无需直接管理FAN event。数据源需要将setFastConnectionFAiloverEnabled属性设置为true。

    4、transparent Application failover

    1)overview

    TAF是OCI驱动程序的运行特性。当初始连接失败,它使得应用程序可自动的重新连接service。在重建连接的过程中,尽管先前的活动的事务被回滚了,TAF可随意的重新开始执行刚才正在执行的SELECT语句。TAF支持两类故障转移方法:

    *  使用BASIC方法,在故障转移期间,重新的连接被建立。如图,初始的连接②在通讯service被start到nodes①后被建立。listener建立连接③,应用程序访问database④直到连接失败⑤。应用程序接到错误信息后再次尝试访问database⑥。OCI驱动程序重建连接到相同的service⑦,则下次改应用程序访问database,它会直接使用新建的连接⑧。

    *  PRECONNECT方法,类似与BASIC方法,只是在初始连接时一个shadow 连接也同时被创建,用于预防故障转移。TAF确保shadow连接总是创建在service的available Instance上。这主要是通过在available Instances上自动的建立并维护shadow service来实现的。

    2)配置实例(BASIC方法)

    在使用TAF之前,推荐先创建并start一个service用于连接。这么做可以将TAF和service做有效的结合。当想要使用BASIC TAF时,应该用-P BASIC选项。具体如下:

    $ srvctl add service -d RACDB -s AP -r I1,I2  -P BASIC
    $ srvctl start service -d RACDB -s AP

    随后,应用程序需要使用下面的描述符与service建立连接。参数FAILOVER_MODE必须被包含在CONNECT_DATA段中:

    AP =
    (DESCRIPTION =(FAILOVER=ON)(LOAD_BALANCE=ON)
    (ADDRESS=(PROTOCOL=TCP)(HOST=N1VIP)(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=N2VIP)(PORT=1521))
    (CONNECT_DATA =
    (SERVICE_NAME = AP)
    (FAILOVER_MODE =
    (TYPE=SESSION)
    (METHOD=BASIC)
    (RETRIES=180)
    (DELAY=5))))

    其中:

    ①TYPE,显示了故障转移的类型。SESSION表示只有user session将被在server-side重新鉴别,但在OCI应用程序中打开的cursors需要被重新执行。SELECT值表示不仅user session在server-side上被重新鉴别,而且在OCI上打开的cursors可继续获取数据。这表明client-side逻辑上为每个打开的cursor维护者fetch-state。一个select语句将使用相同的snapshot重新执行,抛弃那些已经获得的rows,取出那些之前尚未获取的rows。TAF会校验那些被抛弃的rows是已经返回过的rows,否则会返回error信息。

    ②METHOD=BASIC,用于在故障转移时重新建立连接

    ③RETRIES,指明在故障转移后,尝试连接的次数

    ④DELAY,指明两次连接尝试间隔的时间,单位为秒。

    note:如果使用TAF,不要在listener.ora文件中设置GLOBAL_DBNAME参数。

    3)TAF Preconnect配置实例

    在使用PRECONNECT TAF之前,也推荐先创建一个service,包含preferred和available Instances,并start这个service。为了通过CRS自动的创建和管理shadow service,必须定义service是使用-P PRECONNECT选项。相应的shadow service总是被命名为<service_name>_PRECONNECT。具体如下:

    $ srvctl add service -d RACDB -s ERP -r I1 –a I2  -P PRECONNECT
    $ srvctl start service -d RACDB -s ERP

    随后,应用程序需要使用下面的描述符与service建立连接。

    ERP =
    (DESCRIPTION =(FAILOVER=ON)(LOAD_BALANCE=ON)
    (ADDRESS=(PROTOCOL=TCP)(HOST=N1VIP)(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=N2VIP)(PORT=1521))
    (CONNECT_DATA = (SERVICE_NAME = ERP)
    (FAILOVER_MODE = (BACKUP=ERP_PRECONNECT)
    (TYPE=SESSION)(METHOD=PRECONNECT))))
    ERP_PRECONNECT =
    (DESCRIPTION =(FAILOVER=ON)(LOAD_BALANCE=ON)
    (ADDRESS=(PROTOCOL=TCP)(HOST=N1VIP)(PORT=1521))
    (ADDRESS=(PROTOCOL=TCP)(HOST=N2VIP)(PORT=1521))
    (CONNECT_DATA = (SERVICE_NAME = ERP_PRECONNECT)))

    note:当TAF不能使用PRECONNECT方法时,TAF会自动的使用BASIC方法。

    4)TAF的查证

    为了确定TAF是否正确的配置、连接已经与故障转移选项相关联,可以查看V$SESSION视图。为了获得连接client的信息和TAF状态,可查看FAILOVER_TYPE、FAILOVER_METHOD、FAILED_OVER和SERVICE_NAME字段。

    SELECT machine, failover_method, failover_type, failed_over, service_name, COUNT(*)

    FROM v$session

    GROUP BY machine, failover_method, failover_type, failed_over, service_name;

    5、FAN连接池和TAF的思考

    *  两种技术都是与services相结合的,并且提供了service连接的负载均衡
    *  如果使用了FAN,就无需使用TAF。两者是不能结合使用的

    *  使用FAN的连接池技术总是preconnected的

    *  TAF主要是通过OS的timeout来检测失败的,但FAN不是

    6、限制session和services

    这里没搞懂~~~~(>_<)~~~~
 

0
相关文章