Chinaunix首页 | 论坛 | 博客
  • 博客访问: 507497
  • 博文数量: 158
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 904
  • 用 户 组: 普通用户
  • 注册时间: 2016-10-10 11:17
文章分类

全部博文(158)

文章存档

2018年(74)

2017年(84)

我的朋友

分类: Oracle

2017-11-23 14:26:40

   service连接介绍

1.1       传统连接方式

 RAC利用vip或者scan ip漂移实现数据库故障转移的高可用性,应用连接到数据库通常是连接vip(10g)或者scan ip(11g)并指定服务名为db_unique_name,连接会根据负载均衡自动分配到RAC集群的任一节点,某节点出现故障时vip漂移,实现应用连接透明切换。

这种连接方式的好处是在节点间实现负载均衡,将数据库压力分摊,不会导致某个节点因为连接过多而出现压力过载的问题。而缺点则是会增大节点间的通信和传输压力。

RAC架构实现数据一致性需要在节点间同步缓存,称为缓存融合。例如在节点1插入的数据,在节点2查询时,数据库会先在本地缓存查找,没找到则会到其他节点的缓存查找,再没找到才会去读取磁盘信息。应用的连接随机在某个节点,当查询时节点间的缓存同步将增多,当业务的操作很频繁时,这样的传输往往很耗性能。

1.2       service连接方式

service连接主要是在不同的节点设置不同的service名,指定不同的应用连接到固定的节点,方便连接管理,资源分配,减少节点间的缓存同步带来的开销。

使用service连接的好处在于,数据库正常情况下可以使应用总是连接到固定节点,可以设置service的首选节点和备用节点,数据库正常情况下,service运行在首选节点,通过该服务连接的应用会话就在该节点,这样就会很大程度的减少节点间的缓存传输。当数据库出现故障时,service可向备用节点进行漂移,服务不中断。

   service配置

2.1       添加service

语法:srvctl add service -d db_unique_name -s service_name -r preferred_list

[-a available_list] [-P TAF_policy]

在集群的各个节点添加不同名称的service,例如在节点1添加testsv1,节点2添加testsv2

$ srvctl add service -d dbname -s testsv1 -r rac1 -a rac2 -P basic

$ srvctl add service -d dbname -s testsv2 -r rac2 -a rac1 -P basic

参数解释:

-d,集群数据库名

-s,需要添加的服务名

-r,首选节点,正常情况下该服务运行在该节点上

-a,备用节点,异常情况服务可漂移到该备用节点

-P,服务切换策略

2.2       配置TAF

集群的Failover(故障转移)功能,分为3种,分别为Client-Side Connect time Failover,TAF,service—side TAF。

2.2.1      Client-Side Connect time Failover

其中Client-Side Connect time Failover为默认配置,在应用发起连接时感知到节点故障,则在tnsname里的地址表中尝试下一个,只在连接发起时才会起作用,当连接建立后如果节点故障,则会话会断开,需要重新进行连接。

2.2.2      TAF(Transparent Application Failover)

在应用运行过程中如果节点故障,则连接到该节点的用户会自动切换到其他节点,对应用而言,这个过程是透明的,仅是未提交事务回滚。

实现该功能,在客户端的tnsnames.ora文件添加FAILOVER_MODE的配置项即可,该选项有的配置有4个参数需定义:

1、METHOD

basic:感知到节点故障时创建到其他实例的连接,切换有时间延迟

preconnect:连接建立时即在其他节点也创建一个不活动的连接,故障时可立即切换到其他实例,但不活动的连接也占用资源。

2、TYPE

定义故障发生时对select语句的处理。

select:故障时正在执行的select语句不中断,继续在其他实例上返回剩余的结果集

session:故障时正在执行的select语句中断,转移后需重新执行select语句

3、DELAY

重试间隔时间

4、RETRIES

重试次数

2.2.3      service-side TAF

与客户端的TAF类似,只是在服务器端配置而已,Service-Side TAF 通过结合Service,在数据库里保存FAIL_MODE的配置,把所有的TAF配置保存在数据字典中,从而省去了客户端的配置工作,现在客户端的TNS文件就不需要任何TAF的配置选项了。

使用srvctl 创建service时,service-side TAF配置选项需要通过dbms_service包来配置。

Begin

Dbms_service.modify_service(

Service_name='>testsv1',

Failover_method=>dbms_service.failover_method_basic,

Failover_type=>dbms_service.failover_type_select,

Failover_retries=>180,

Failover_delay=>5

);

    End;

2.3       启动service

语法:srvctl start service -d db_unique_name -s service_name

在集群任一节点启动服务,service会根据首选节点配置在对应节点启动

$ srvctl start service -d dbname -s testsv1

$ srvctl start -d dbname -s testsv2

 

说明:在数据库启动初期,service会根据节点上实例的启动先后顺序,在先启动的节点上自动启动,无论是不是首选节点,而当首选节点上的实例启动时,service不会自动漂移回首选节点,需手动切换。

例如:testsv1的首选节点是rac1,当集群重启时,节点rac2先启动完成,则testsv1会在rac2上启动,当rac1后启动时,testsv1不会自动切换回到rac1,需手动切换。

2.4       其他service管理命令

通过srvctl 对service的管理十分方便,包括起停增删改等。

srvctl config service:查看service配置

srvctl stop service:停止指定的service

srvctl remove service:删除service,如果删除不掉,可以加上-f参数

srvctl disable service:使service不可用

srvctl enable service:使service可用

srvctl modify service:修改service配置

srvctl relocate service:重新加载service

srvctl status service:查看service状态

   客户端tnsnames配置

客户端使用tnsnames.ora文件配置来解析oracle的连接信息,通过指定service name来连接,其中service_name参数需与添加的service名称相同。

tnsnames.ora配置参数如下:

TESTSV1 =

  (DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = hostname1-vip)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hostname2-vip)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = testsv1)

   总结

使用service管理连接,可以方便对应用进行分类和管理,同时,使用service来配置TAF(Transparent Application Failover),应用客户端的故障转移可以统一配置,在需要对服务端连接信息进行微调时,只需配置服务器端的tnsnames,而不需要对客户端一一进行配置。将应用正常连接时固定在同一节点,也能提高应用连接的性能。

阅读(2279) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~