TAF net service LOAD_BALANCE=on random
Enabling Advanced Features of Oracle Net Services
一、高级网络地址和连接数据信息
1.1 监听协议地址列表(ADDRESS_LIST)
erp01=(DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.51)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.52)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=erpdb)))
意思就是说ADDRESS_LIST里面可以写多个ADDRESS,当存在多个address的时候才会存在负载均衡和故障转换。
官方文档说默认开启failover和load_balance,经测试默认开启failover关闭load_balance。建议配置的时候还是手工写好吧。
1.2 参数
- failover:
- on(默认值),当地址列表中第一个连接失败时会自动连接下一个
- off,只尝试连接第一个地址
- load_balance:(文档写默认开启,实测多次连接均处于一节点)
- on,随机连接地址列表中的地址
- off,当failover不为off时,按顺序尝试每个地址
1.3当存在多个地址时的处理方式
failover=on --按顺序连接
load_balance=on failover=on --随机连接
load_balance=on --随机连接(failover默认on)
load_balance=off failover=off --只连接第一个erp01=(DESCRIPTION=
(ADDRESS_LIST= (LOAD_BALANCE=off)(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.51)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.52)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=erpdb))) erp02=(DESCRIPTION=
(ADDRESS_LIST= (LOAD_BALANCE=off) (FAILOVER=on)(ADDRESS=(PROTOCOL=tcp) (HOST=172.16.220.51)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.52)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=erpdb)))
--和什么都不写一个效果
1.3 其它参数
INSTANCE_NAME --指定连接的实例
SDU --表示一个网络IO发送多大数据,建议带宽允许的情况下加大,也可以在tns文件中配置
HS --异构还是同构,默认同构
二、负载平衡(Load_Balance)
2.1 负载均衡开启时的调度顺去调度顺序:
- 负载最少的节点。
- 负载最少的实例。
- 该实例的负载最少的调度程序(共享连接会用到)
具体调度算法不知道
2.2 关于COLOCATION_TAG参数
服务器努力将具有相同COLOCATION_TAG值连接到同一个实例,也可以通过service_name控制。
用途
在同一个实例上调用会话有助于减少实例间的通信(gc等待),从而提高在同一个实例中执行的工作负载的性能
设置这个参数的情况下,会忽略负载均衡。
特殊情况
当在特殊情况下,比如某实例达到最大会话,这个还是会连接到另外一个实例的
模板
erp03=(DESCRIPTION= (ADDRESS_LIST= (LOAD_BALANCE=on)(failover=on)(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.51)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.52)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=erpdb)(COLOCATION_TAG=erp01)))
三、透明应用故障切换(TAF)
可以在服务端配置,也可以在客户端连接串中配置
3.1 FAILOVER_MODE参数
failover=on时的控制参数,也就是当failover=off时无效。
- BACKUP 备份的连接。preconnect建立预连接时应指定备份。
- DELAY 连接尝试之间等待的时间量(以秒为单位)。如果RETRIES指定,则DELAY默认为一秒。
- METHOD 从主节点快速故障转移到备份节点的方式:
- basic:出现故障时再连接新节点
- preconnect:在备连接节点条件建立连接,故障切换时直接连接到备用节点。
- RETRIES 故障转移后尝试连接的次数。如果DELAY指定,则RETRIES默认为五次重试尝试。
- TYPE 故障转移的类型。
- session:设置为会话故障转移。如果用户的连接丢失,则会在备份节点创建一个新会话。
- select:设置为允许打开游标的用户在失败后继续上次的任务。
- none: 默认。不使用故障转移功能。可以明确指定以防止发生故障转移。
3.2 配置
listener.ora文件中的SID_LIST_listener_name不要配置global_name,否则会禁用TAF
案例一:故障后自动切换至另一个节点
erp04=(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=on)(failover=on) (ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.51)(PORT=1521))(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.52)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=erpdb)(FAILOVER_MODE=(TYPE=select)(METHOD=basic))))
案例二:TAF重试连接 等待15秒,尝试20次
erp05=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.51)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=erpdb) (FAILOVER_MODE=( TYPE=select)(METHOD=basic)(RETRIES=20)(DELAY=15))))
案例三:TAF 预建立连接 TAF能够预先建立备份连接。必须明确指定初始连接和备份连接
erp06=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.51)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=erpdb)(INSTANCE_NAME=erpdb1)(FAILOVER_MODE=(BACKUP=erp07)(TYPE=select)(METHOD=preconnect)))) erp07=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST= 172.16.220.52)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=erpdb)(INSTANCE_NAME=erpdb2)(FAILOVER_MODE=(BACKUP=erp06)(TYPE=select)(METHOD=preconnect))))
使用网络服务名称erp06连接到erp06也预连接到erp07. 如果erp06连接失败,则故障转移到erp07,保留SELECT正在进行的任何语句。同样,连接到erp07的连接也会预连接到erp06.
注意:使用预连接,需要保证两个节点的连接数够用。
3.3、验证透明故障转移和预连接
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参数下面。默认连接到主实例。
这个参数不是指dg的database_role
- primary 连接到主实例
- secondary 连接到辅助实例
- any 连接到负载最低的实例
案例一:连接到实例角色类型
erp08=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS= (PROTOCOL=tcp)(HOST=172.16.220.51)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.52)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=erpdb)(INSTANCE_ROLE=primary))) erp09=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.51)(PORT=1521) ) (ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.52)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=erpdb)(INSTANCE_ROLE=secondary)))
案例二:连接到特定实例
erp10=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.51)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=erpdb) (INSTANCE_ROLE=any)(INSTANCE_NAME=erpdb1) (SERVER=dedicated)))
erp11=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.52)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=erpdb) (INSTANCE_ROLE=any)(INSTANCE_NAME=erpdb2) (SERVER=dedicated)))
注意:故障转移与该设置不兼容
案例三:TAF预连接
erp12=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.51)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=erpdb) (INSTANCE_ROLE=primary)(FAILOVER_MODE=(BACKUP=erp13)(TYPE=select)(METHOD=preconnect))))
erp13=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.16.220.52)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=erpdb) (INSTANCE_ROLE=primary)(FAILOVER_MODE=(BACKUP=erp12)(TYPE=select)(METHOD=preconnect)
五、静态连接
- 稳定,动态监听不稳定时使用。
- 当数据库实例没有open时动态监听是注册不上去的,此时使用静态监听依然可以连接
--定义监听器的协议和地址、端口
LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.220.10)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))))
--PROTOCOL --协议参数
--HOST --地址 当有多个IP时,也可以使用0.0.0.0,全部监听
--PORT --端口,不要使用1024以下端口,否则配置很麻烦需要使用如下命令配置
-- tnslsnr listener_name -user user -group group
-- KEY = EXTPROC1521 外部程序调用,不用可删除SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = orcl)(ORACLE_HOME = /u01/app/oracle/product/19.0.0/db_1) --此处使用的是oracle用户的$ORACLE_HOME,不要写成grid用户的$ORACLE_HOME(SID_NAME=orcl)))
--定义adrci监听基路径
ADR_BASE_LISTENER=/u01/app/oracl
六、异构数据库连接(透明网关用)
安装透明网关包是,$ORACLE_HOME下会多一个tg_1的文件夹,里面的的网络配置文件配置
SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = orcl)(PROGRAM = dg4msql) --透明网关外部程序调用(SID_NAME = orcl)(ORACLE_HOME = /u01/app/oracle/product/19.0.0/tg_1)))LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.220.10)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))))
orcl =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST =172.16.220.10)(PORT = 1521))(CONNECT_DATA=(SID=orcl))(HS=OK))
一、什么是TAF
Transparent Application Failover ,透明应用程序故障转移,当客户端和oracle数据库建立连接后,正在执行某个应用,此时客户端连接的某个实例突然宕机,那么客户端的连接就会被转移到其他健康实例上去, 对于客户端的taf,如果执行的是update,insert等事物语句,那么就会回退,如果是select语句,那么会转移到新的实例继续执行,这个过程不需要用户的的介入,是透明的。
TAF 是和下列类型的故障转移
Oracle Real Application Clusters
Replicated systems
Standby databases
Single instance Oracle database
二:net service参数:
Parameter Description
FAILOVER
在连接监听的时候,如果FAILOVER=on,在连接地址列表中的第一个地址,监听连接失败,指示net去连接地址列表中的其他监听,当FAILOVER=on=off 时,只会连接地址列表中的第一地址的监听,
Connect-time failover is turned on by default for multiple address lists (ADDRESS_LIST), connect descriptors (DESCRIPTION), and multiple connect descriptors (DESCRIPTION_LIST).
When using a connect descriptor with a SERVICE_NAME, ensure that the value is not a GLOBAL_DBNAME in any SID_DESCentry, or a SID_NAME in any SID_DESC entry without a GLOBAL_DBNAME set.
LOAD_BALANCE
当LOAD_BALANCE =on 那么指示net progress 以随机的方式连接地址列表中地址,在不同监听之间平衡负载压力。当LOAD_BALANCE =off
是让net progress 安顺序访问地址列表的监听,直到连接成功为止.
Client load balancing is turned on by default for multiple connect descriptors (DESCRIPTION_LIST).
SOURCE_ROUTE
When set to on, instructs Oracle Net to use each address in the order presented until the destination is reached. This parameter is required for reaching the destination using a specific route, that is, by specific computers. This parameter is used to enable connections to Oracle Connection Manager.
Creating a List of Listener Protocol Addresses
sales.us.example.com=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.example.com)))
Table 13-1 Address List Parameters in the tnsnames.ora File
Parameter | Description |
---|---|
FAILOVER |
At connect time, this parameter instructs Oracle Net to fail over to a different listener if the first listener fails when set to Connect-time failover is turned |
LOAD_BALANCE |
When set to Client load balancing is turned |
SOURCE_ROUTE |
When set to |
Note:
You cannot set source routing (SOURCE_ROUTE) at the same level as connect-time failover (FAILOVER) or client load balancing (LOAD_BALANCE). Source routing connects to each address in the list sequentially whereas connect-time failover and client load balancing select a single address from a list.
When a connect descriptor in a tnsnames.ora
file contains at least two protocol addresses for an Oracle Connection Manager hop, then parameters for connect-time failover and load balancing within the hop can be included in the file.
Table 13-2 describes the address list options.
Table 13-2 Address List Options Dialog Box
Option | Parameter Setting |
---|---|
Try each address, in order, until one succeeds. |
FAILOVER=on |
Try each address, randomly, until one succeeds. |
LOAD_BALANCE=on FAILOVER=on |
Try one address, selected at random. |
LOAD_BALANCE=on |
Use each address in order until destination reached. |
SOURCE_ROUTE=on |
Use only the first address. |
LOAD_BALANCE=off FAILOVER=off SOURCE_ROUTE=off |
设置快速转移从 primary node 到 backup node:
basic: 在故障转移的时间间隔建立连接。此选项是故障转移前是不去对backup node做连接的,只有在故障发生时,才开始去连接backup node。
preconnect: 建立预连接。此选项比basic方式提供了更快的故障转移,。用户建立connect,对primary node和backup node 节点都会建立连接
BASIC方式在Failover时会有时间延迟,PRECONNECT方式虽然没有时间延迟,但是建立多个冗余连接会消耗更多资源
RETRIES
故障转移重试的次数,如果指定了DELAY,那么默认重试5次,If a callback function is registered, then this parameter is ignored.
TAF with Connect-Time Failover and Client Load Balancing
在客户端的tnsname.ora里添加如下
1、你想明确指定连接到第一个实例还是第二个实例上去,默认是连接到第一个实例,主实例上。
primary: 指定连接到 primary instance.
secondary: 指定连接到secondary instance.
Connection to Instance Role Type
Connection To a Specific Instance
TAF Pre-Establishing a Connection
SQL> SELECT MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER, COUNT(*) FROM V$SESSION
TAF net service LOAD_BALANCE=on random相关推荐
- Oracle 11gR2 RAC Service-Side TAF 配置示例
Service-Side TAF Service-Side TAF的配置参考: How To Configure Server Side Transparent Application Failove ...
- oracle srvctl命令,用srvctl命令配置service
.用srvctl命令配置service 除了用DBCA图形方式,还可以使用命令方式配置service,这种方法对于维护远程尤其有用.无论是创建还是维护都是用一个命令srvctl,先看一下srvctl命 ...
- 在Linux下编写Daemon
在Linux下编写Daemon 转自:http://blog.163.com/prevBlogPerma.do?host=manyhappy163&srl=164476831201071811 ...
- Kali Linux Web 渗透测试— 第十二课-websploit
Kali Linux Web 渗透测试- 第十二课-websploit 文/玄魂 目录 Kali Linux Web 渗透测试- 第十二课-websploit..................... ...
- 如何用ABAP代码的方式在短时间内批量生成大量订单数据用于性能测试
Package: CRMS4_TEST_DATA_GENERATION - Carsten's original report (1) API: BAPI_MATERIAL_SAVEREPLICA ( ...
- 使用jMeter构造逻辑上有依赖关系的一系列并发请求
相信前端开发工程师对CSRF(Cross-site request forgery)跨站请求伪造这个概念都非常熟悉,有的时候也简写成XSRF,是一种对网站的恶意利用. 尽管听起来像跨站脚本(XSS), ...
- java 比特币私钥生成_如何生成自己的比特币私钥
java 比特币私钥生成 In cryptocurrencies, a private key allows a user to gain access to their wallet. The pe ...
- Java并发编程知识总结
一.线程 1.线程创建: 继承Thread类创建线程类 实现Runnable接口创建线程类 使用Callable和Future创建线程 Runnable是执行工作的独立任务,但是它不返回任何值,如果希 ...
- Redis数据结构Set应用场景--黑名单校验器、京东与支付宝抽奖、微博榜单与QQ群的随机展示、帖子点赞、关注与粉丝、微关系计算、HyperLogLog的入门使用
Set应用场景 set命令使用 淘宝黑名单 一.黑名单过滤器业务场景分析 二 .解决的技术方案 三.SpringBoot+redis模仿实现校验器 京东京豆抽奖 一.京东京豆抽奖的业务场景分析 二.京 ...
最新文章
- pytorch中调整学习率的lr_scheduler机制
- bzoj1036: [ZJOI2008]树的统计Count 树链剖分
- 成功解决TypeError: unsupported operand type(s) for %: 'NoneType' and 'dict'
- Kullback–Leibler divergence(相对熵,KL距离,KL散度)
- 在Linux上安装MySql
- 惭入佳境之HADOOP的NAMENODE不能正常启动的问题解决
- 出现次数最多的整数-蓝桥杯算法训练
- 有了这些接口测试用例+工具,测试效率想不提升都难
- 月薪三万,依然买不起房
- cad批量打印_CAD批量打印PDF软件CAD转PDF自动选纸SmartBatchPlo
- vrep小车寻迹代码
- 使用webots对并联结构进行仿真
- 表单提交时报错:No result defined for action com.ylj.action.BbsAction and result input
- input不为空,且返回焦点
- 前端制作PUBG瞄准镜!
- java接口如何有效防止恶意请求
- jbpm工作流动态会签
- SAP SHDB 录制BDC并程序调用BDC教程
- sql 数据库前两列值乘_SQL注入原理和方法汇总
- css技巧—图片配文字