基于LINUX的Oracle 10G RAC管理维护学习手记之四--Service.Failover and Load Balance
基于LINUX的Oracle 10G RAC管理维护学习手记之前言目录
基于LINUX的Oracle 10G RAC管理维护学习手记之一―――RAC相关以及基础知识
基于LINUX的Oracle 10G RAC管理维护学习手记之二―――RAC规划安装
基于LINUX的Oracle 10G RAC管理维护学习手记之三(上)―――RAC日常管理维护
基于LINUX的Oracle 10G RAC管理维护学习手记之三(下)―――RAC日常管理维护
基于LINUX的Oracle 10G RAC管理维护学习手记之四―――RAC故障/负载平衡配置
基于LINUX的Oracle 10G RAC管理维护学习手记之五―――RAC下其他维护实施相关/案例
基于LINUX的Oracle 10G RAC管理维护学习手记之六―――RAC性能监控调整
基于LINUX的Oracle 10G RAC管理维护学习手记之七―――其他Troubleshooting
1.Service
服务是rac体系中相当重要的概念,它为应用提供高可用和多样化的解决方案。实际中,我们可以创建不同性质的service来满足我们应用的不同需求。
10gR2下,可以通过以下几个方式创建服务。
(1).使用dbca
(2).使用srvctl
node1->srvctl add service -d demo -s srv_1 -r node1 -a node2
node1-> srvctl start service -d demo -s srv_1
node1-> crs_stat -t
Name Type Target State Host
————————————————————
ora.demo.db application ONLINE ONLINE node1
ora….o1.inst application ONLINE ONLINE node1
ora….o2.inst application ONLINE OFFLINE
ora….rv_1.cs application ONLINE ONLINE node1
ora….mo1.srv application ONLINE ONLINE node1
—————————————
SQL> show parameter service
NAME TYPE VALUE
———————————— ———– ———–
service_names string demo,srv_1
(3).使用dbms_service命令创建
10g提供了dbms_service用于管理服务并进行功能扩展.
SQL>EXEC DBMS_SERVICE.CREATE_SERVICE(SERVICE_NAME=>’srv_2′,NETWORK_NAME=>’ srv_2′);
PL/SQL procedure successfully completed
SQL> exec DBMS_SERVICE.START_SERVICE(service_name => ’srv_2′,instance_name => ‘demo1′);
PL/SQL procedure successfully completed
SQL> show parameter service
NAME TYPE VALUE
———————————— ———– ———–
service_names string demo,srv_2
(4).其他等..
不管采用哪种方式,实质都是通过修改service_names而向lisnter动态注册服务.
2. failover and load banance
RAC为应用提供了高性能和高可用的服务,对用户来讲,核心的功能便是failover与load banance.
(1)Failover
在10gR2版本里,Failover的实现方式有两种,一种是TAF(Transparent Application Failover), 一种是FCF(Fast Connection Failover).
TAF以及实现:
TAF是net层透明故障转移,是一种被动的故障转移方式, 依赖于VIP.可以通过客户端和服务器端配置taf的策略.
<1> client端taf配置
以下是一个简单的具有taf功能的tnsnames.ora 内容
demo =
(DESCRIPTION =
(FAILOVER=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.145)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.146)(PORT=1521))
(CONNECT_DATA =
(SERVICE_NAME = demo)
(SERVER=DEDICATED)
(FAILOVER_MODE=(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=50)
(DELAY=5)
)
)
)
控制TAF策略的参数说明:
|
参数 |
描述 |
|
FAILOVER |
Failover控制开关(on/off),如果为off,不提供故障切换功能,但连接时会对address列表进行依次尝试,直到找到可用为止 |
|
TYPE |
两种类型:session /select Session: 提供session级别的故障切换。 Select:提供select级别的故障切换,切换过程对查询语句透明,但事物类处理需要回滚操作 |
|
METHOD |
两种类型:basic/preconnect Basic:client同时只连接一个节点,故障切换时跳转到另外节点 Preconnect:需要与backup同时使用,client同时连接到主节点和backup节点
|
|
BACKUP |
采用Preconnect模式的备用连接配置 |
|
RETRIES |
故障切换时重试次数 |
|
DELAY |
故障切换时重试间隔时间 |
<2> Server端TAF配置
10gR2提供Server端的TAF配置,需要调用dbms_service包来在实例上进行修改。
SQL> exec dbms_service.modify_service(service_name => ‘DEMO’,failover_method => ‘BASIC’,failover_type => ‘SELECT’,failover_retries => 180,failover_delay => 5);
客户端连接字符串修改成如下即可:
demo =
(DESCRIPTION =
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.145)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.146)(PORT=1521))
(CONNECT_DATA =
(SERVICE_NAME = demo)
(SERVER=DEDICATED)
)
)
FCF及实现
FCF是10g引进的一种新的failover机制,它依靠各节点的ons进程,通过广播FAN事件来获得各节点的运行情况,是一种前摄性的判断,支持JDBC/OCI/ODP.NET
(1).ons配置
onsctl工具配置各节点的local /remote节点以及端口.配置文件路径:$ORACLE_HOME/opmn/ons.config.
使用 onsctl debug 跟踪ons进程是否正常运行。
(2).配置连接池(以jdbc为例)
需要连接池支持Implicit Connection Cache,设置FastConnectionFailoverEnabled=true.
将ojdbc14.jar / ons.jar等加入CLASSPATH.具体代码可以参见联机文档
(2) Load Balance
10g的 load balance同前版本相比有了很大功能上的改进,依据Load Balancing Advisory,提供了Runtime Connection Load Balancing的策略,但个人认为这也是个相对矛盾所在。越是细化的负载均衡机制,越是有加重cache fusion的可能,这对rac的整体性能是个考验。
load balance主要有两种实现方式:一种是Connection Load Balancing(CLB),另外一种是Runtime Connection Load Balancing(RCLB)。
CLB分为客户端client-side和服务器端server-side两种。
client-side需要在tnsname.ora添加LOAD_BALANCE=ON来实现,提供基于平衡连接数的负载方案.
server-side需要修改remote_listener参数,让listener能监听到集群中的所有节点,通过PMON来收集节点上的负载信息。
FCF默认支持RCLB功能,RCLB通过load balancing advisory事件来对连接提供更好的服务。RCLB有两种负载平衡方案可供选择—-基于总体service name和基于总体Throughput。可以通过dbms_service来设置具体的goal方案。
SQL> exec dbms_service.modify_service(service_name => ‘TEST’, goal => DBMS_SERVICE.GOAL_SERVICE_TIME);
至于这两种方式的具体差异,在我的测试中,并没有得到明显的体现。
Load Balanc这部分是我存疑最多的地方,查阅了很多文档,说法不一,且没有翔实的案例证明,在此也希望有过研究的朋友们做指正。

终于等到你的下半部分了。呵呵。关注了很久了。
[...] 基于LINUX的Oracle 10G RAC管理维护学习手记之四―――RAC故障/负载平衡配置 [...]