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
这里没搞懂~~~~(>_<)~~~~