网络服务名的高级使用

配置运行时连接负载均衡

 运行时连接负载均衡通过平衡在多dispatcher中的活动连接 提高了连接的性能。在rac中,连接池负载均衡也能平衡多实例间的活动连接数量。因为pmon进程能注册远处的监听,一个监听总是能知道所有的实例和dispatcher,依赖与负载的信息,一个监听决定了连接哪个实例,要是配置了共享server,就决定哪个dispatcher要连接。

对专用server的连接池负载均衡

下面显示了rac有2个实例,sales1和sales2,有相同的服务名sales.us.acme.com,实例sales1和sales2分别在sales1-server和sales2-server上。在2个节点上分别有个名为listener的监听。remote_listener参数已经被配置了来允许服务在2个监听上注册

listener_sales2在tnsnames.ora文件中被解析

listener_sales2=
(DESCRIPTION=
   (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))

listener_sales1值在tnsnames.ora文件中被解析

listener_sales1=
(DESCRIPTION=
   (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)))

会有下面的操作发生

1sals1和sales2上的pmon进程注册实例到2个监听上,监听动态的更新实例的负载。下面的负载信息被注册

 sales1-serversales2-server
1 Minute Node Load Average450200


 sales1sales2
Number of Connections to Instance200150
在这个例子中,sales2-server是负载最低的节点,sales2是负载最低的实例
2客户端发送过来一个请求
连接的描述符如下,这个配置是随机的找协议地址,直到一个成功的。
sales.us.acme.com=
(DESCRIPTION=
  (LOAD_BALANCE=on)
  (F AILOVER=on)
  (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521))
  (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521))
  (CONNECT_DATA=(SERVICE_NAME=sales.us.acme.com)))
sales1-server的监听被随机选择来接受客户端的连接请求,该监听比较sales1和sales2上的实例负载,因为sales2-server的负载低,所以监听选择sales2-server
3在sals1-server上的监听重定向客户端的请求道sales2-server上的监听
4客户端连接到sales2-server上的监听,监听开始了一个专用server进程,专用server进程继承了监听的连接请求。

配置透明应用故障转移
taf指导oracle net来将失败的连接转移到一个不同的监听,这使得用户使用新的连接继续工作。taf包含连接描述符中的connect_data部分的failover_mode参数。
关于taf
taf是一个客户端的功能,这个功能让客户在实例失败的时候能重新连接到存活的数据库上。通知被服务器使用来触发在客户端的taf回调。
taf或是使用客户端的tns连接字符串或是使用服务器端的service属性,然而,如果2个方法都用来配置taf,服务器端的属性会覆盖客户端的属性。
taf可以再一个或2个模式下操作,会话failover和select failover。session failover会重建丢失的连接和会话,select failover会返回正在进行的查询。当有失败是,回调功能会在客户端通过oci回调初始化。taf会和rac一起工作。taf和物理备库一起操作来提供自动的failover

failover_mode参数
failover_moe参数必须包含在连接描述符的connect_data部分,failover_mode可以包含下面的参数

Table 13-4 Subparameters of the FAILOVER_MODE Parameter

FAILOVER_MODE SubparameterDescription

BACKUP

Specify a different net service name for backup connections. A backup should be specified when using preconnect to pre-establish connections.

TYPE

Specify the type of failover. Three types of Oracle Net failover functionality are available by default to Oracle Call Interface (OCI) applications:

  • session: Set to failover the session. If a user's connection is lost, a new session is automatically created for the user on the backup. This type of failover does not attempt to recover selects.

  • select: Set to enable users with open cursors to continue fetching on them after failure. However, this mode involves overhead on the client side in normal select operations.

  • none: This is the default. No failover functionality is used. This can also be explicitly specified to prevent failover from happening.

METHOD

Determines how fast failover occurs from the primary node to the backup node:

  • basic: Set to establish connections at failover time. This option requires almost no work on the backup server until failover time.

  • preconnect: Set to pre-established connections. This provides faster failover but requires that the backup instance be able to support all connections from every supported instance.

RETRIES

Specify the number of times to attempt to connect after a failover. If DELAY is specified, RETRIES defaults to five retry attempts.

Note: If a callback function is registered, then this subparameter is ignored.

DELAY

Specify the amount of time in seconds to wait between connect attempts. If RETRIES is specified, DELAY defaults to one second.

Note: If a callback function is registered, then this subparameter is ignored.


taf实施
依赖与failover_mode参数,你可以以下面的几种方法来实施taf。
带连接时故障转移和客户端负载均衡的taf
下面的例子,oracle net 随机连接sales1-server或sales2-server中的一个协议地址,如果在连接后失败了,taf会故障转移到别的节点监听上,保留在处理的select语句。
sales.us.acme.com=
 (DESCRIPTION=
  (LOAD_BALANCE=on) 
  (FAILOVER=on) 
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales1-server)  
       (PORT=1521)) 
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales2-server)  
       (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.acme.com) 
     (FAILOVER_MODE=
       (TYPE=select) 
       (METHOD=basic))))
taf重试一个连接
taf提供当第一个连接尝试失败的自动重试。下面的例子中,oracle net 重试在sales1-serve上的监听。如果故障转移连接失败,等待在重试前等待15秒,尝试20次。
sales.us.acme.com=
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales1-server)  
       (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.acme.com) 
     (FAILOVER_MODE=
       (TYPE=select) 
       (METHOD=basic)
       (RETRIES=20)
       (DELAY=15))))
taf提前建立一个连接
一个备份的连接可以提前创建,初始化和备份连接必须明确指出。在下面的例子中,客户使用sales1.us.ace.com服务名来连接sales1-server上的监听也提前创建sales2-server的连接。如果在连接sales1-server失败后,oracle net转移到sales2-server,保留select语句。
sales1.us.acme.com=
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales1-server)  
       (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.acme.com) 
     (INSTANCE_NAME=sales1) 
     (FAILOVER_MODE=
       (BACKUP=sales2.us.acme.com) 
       (TYPE=select) 
       (METHOD=preconnect))))
sales2.us.acme.com=
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales2-server)  
       (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.acme.com) 
     (INSTANCE_NAME=sales2)
     (FAILOVER_MODE=
       (BACKUP=sales1.us.acme.com) 
       (TYPE=select) 
       (METHOD=preconnect))))
taf验证
可以查看v$session的failover_type,failover_method,和failed_over列来验证taf正确的被配置了。使用v$session视图来看连接的客户端和他们的taf状态。
SELECT MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER, COUNT(*)
FROM V$SESSION
GROUP BY MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER;

为主和次实例指定实例角色
在连接描述符中instance_role是connect_data的可选参数。这个参数可以指定连接到主或次实例上,这个参数在下面的情况下很有用:
1当你想要明确的连接到主或次实例上,默认的是主实例
2你想使用taf来提前连接到次实例
instane_role支持下面的值

primary — Specifies a connection to the primary instance

secondary — Specifies a connection to the secondary instance

any — Specifies a connection to whichever instance has the lowest load, regardless of primary or secondary instance role

在下面的例子中,sales_primary能连接到主实例上,sales_secondry能连接到次实例

sales_primary=
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales1-server)  
       (PORT=1521)) 
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales2-server)  
       (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.acme.com) 
     (INSTANCE_ROLE=primary)))
sales_secondary=
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales1-server)  
       (PORT=1521)) 
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales2-server)  
       (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.acme.com) 
     (INSTANCE_ROLE=secondary)))

连接到一个指定的实例

配置instance_name=instane_name及instance_role=any来连接到指定的实例上,不用管它的角色,下面的例子,sales1能连接到sales1-server的实例,sales2能连接到sales2-server的实例上。

sales1=
(DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp) 
       (HOST=sales1-server) 
       (PORT=1521))
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.acme.com)
     (INSTANCE_ROLE=any)
     (INSTANCE_NAME=sales2)
     (SERVER=dedicated)))
sales2=
(DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp) 
       (HOST=sales2-server) 
       (PORT=1521))
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.acme.com)
     (INSTANCE_ROLE=any)
     (INSTANCE_NAME=sales2)
     (SERVER=dedicated)))

taf提前建立连接

如果taf被配置了,备份的连接可以提前创建到次实例上,初始的备份连接必须要明确的指定,下面的例子中,oracle net连接到sales1-server的监听上,并且提前建立sales2-server的连接。如果sales1-server在连接后失败了,taf转移到sales2-server上,保留select语句

sales1.acme.com=
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales1-server)  
       (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.acme.com) 
     (INSTANCE_ROLE=primary) 
     (FAILOVER_MODE=
       (BACKUP=sales2.acme.com) 
       (TYPE=select) 
       (METHOD=preconnect))))
sales2.acme.com=
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales2-server)  
       (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.acme.com) 
     (INSTANCE_ROLE=secondary)))

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值