十一、HA和LB
(一)、failover
1、client-side connect time failover
客户端tnsnames中配置多个地址,发起请求时,先从第一个尝试,如果尝试失败,则继续尝试下一个,直接连接成功或遍历所有地址。
缺点:只在建立建立的那个时刻才起作用。一旦连接建立之后,节点出现故障,不做任何处理。对于weblogic、tomcat之类中间件都是启动时就建立若干到数据库的长连接,在生命周期内重用这些连接,因此client-side connect time failover对此没有多大帮助。
客户端tnsnames中添加 failover=on开启这种机制,默认开启,即无需配置。
2、TAF(transparent application failover)
连接建立以后,应用系统运行过程中,如果某个实例发生故障,连接到这个实例上的用户会被自动迁移到其他健康的实例上。
需要客户端在tnsnames中配置failover_mode:主要有4个选项。
method:basic和preconnect
type:select和session(对于未提交事务都会自动回滚)
delay和retires
3、service-side TAF
TAF是在客户端配置,而service-side TAF的配置保存在数据字典中,省去了客户端的配置工作。配置参数上,和TAF相比,service-side TAF多了一个instance role:preferred和availabled。
要想使用service-side TAF,必须配置service。可以使用dbca或srvctl来配置service。推荐使用dbca来配置service
无论是使用dbca还是使用srvct都无法配置TAF的type、delay和retires3个属性,必须使用dbms_service包来修改。
begin
DBMS_SERVICE.MODIFY_SERVICE
(
service_name => 'taf',
failover_method => dbms_service.failover_method_basic,
failover_type => dbms_service.failover_type_select,
failover_retries => 180,
failover_delay => 5
);
end;
4、测试
客户端/etc/hosts中添加
192.168.5.233 zhh1-vip
192.168.5.234 zhh2-vip
tnsnames中添加:
hui_taf =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = zhh1-vip)(PORT = 3173))
(ADDRESS = (PROTOCOL = TCP)(HOST = zhh2-vip)(PORT = 3173))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = hui)
(FAILOVER_MODE =
(TYPE = select)
(METHOD =basic)
(RETRIES = 180)
(DELAY = 5)
)
)
)
hui_cl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = zhh1-vip)(PORT = 3173))
(ADDRESS = (PROTOCOL = TCP)(HOST = zhh2-vip)(PORT = 3173))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = hui)
)
)
第一个窗口,使用hui_taf
(二)、HA框架
clusterware作为一个独立的产品发布,可以作为任何第三方产品提供集群基础服务。除了与RAC的接口之外,CRS还提供了一组高可用性的应用程序接口(API),用来搭建一般应用程序的高可用集群,即一般我们常说的双机热备,比如使用CRS实现MySQL的双机热备。
这种主备模式的双机热备还可以包括许多第三方的应用程序,比如虚拟IP、磁盘组、文件系统、MySQL数据库、Apache,或者单节点的Oracle实例,或者单节点的ASM,等等,都可以作为资源注册到CRS中去,由CRS来启动,关闭,监测应用程序的状态,还可以设置应用程序相互的依赖关系,保证多组资源正确的启动顺序。
(三)、LoadBalance
connection balance纯技术的分散负载
service 面向业务的分散负载
1、connection balance纯技术的分散负载
分为client-side loadbalanceh和server-side loadbalance
(1)、client-side loadbalanceh
客户端tnsnames中配置load_balance=yes
当客户端发起连接时,从地址列表中随机选择一个,再使用随机算法把连接请求分散到各个实例。
缺点:分配连接时没有考虑到每个节点的真实负载,最后分配不一定是平衡的,甚至分配到故障节点上。
(2)、server-side loadbalance
依赖于listener收集的负载信息。在数据库运行过程中,pmon进程会收集系统的负载信息,然后登记到listener中,最少1分钟,最多10分钟,pmon就要做一次信息更新,并且节点的负载越高,更新频率就越高,以保证listener能够掌握每个节点的准确负载情况。
更新情况在listener.log中可以查看到。
pmon进程不仅会向本地的listener注册,还可以向其他节点的listener注册。因此配置server-side loadbalance需要配置remote_listener这个参数。
有了pmon的自动注册机制后,集群每个节点的listener都掌握所有节点的负载状态,当收到客户端的连接请求后,就会把连接转发给负载最小的节点。
dedicate连接:listener首先选择负载最小的节点,如果多个节点负载相同,则从中选择负载最小的实例。
shared连接:除了比较节点和实例的负载之外,还要选择负载最小的dispatcher。
client-side loadbalanceh和server-side loadbalance两种方式不是互斥的,二者可以一起工作。用户的连接请求会先从地址列表中随机选择一个,然后向该地址的listener发出请求,listener接到请求后,根据各节点的负载情况挑选出最合适的节点,然后转发连接请求。
2、service 面向业务的分散负载
分而治之的思想,需要dba和开发人员合作,按照业务功能模块划分成service,进而把每个service固定到某些节点上,提高系统的性能。
十二、参考
1、2 Day + Real Application Clusters Guide
2、Database Oracle Clusterware and Oracle Real Application Clusters Installation Guide for Linux
3、Oracle Database 10g: Real Application Clusters Student Guide
4、Oracle Clusterware and Oracle Real Application Clusters Administration and Deployment Guide
5、大话 Oracle RAC一书
6、google
浙公网安备 33010602011771号