• Transparent Application Failover 透明应用切换


    官方文档地址 http://docs.oracle.com/cd/E11882_01/network.112/e41945/advcfg.htm#NETAG455

    About Transparent Application Failover

    • TAF 是 client-side 特性,在一个数据库实例发生失败的情况下,允许客户端重新连接到存活的节点。服务器使用通知(Notifications)来触发客户端的 TAF callbacks
    • TAF 的配置方式:
      • 使用客户端(client-side )指定的 TNS 连接符
      • 使用服务器端(server-side)的 service 属性
    • 如果同时使用这两种方式,那么服务器端的 service 属性将取代客户端的设置。配置 TAF 时优先服务端的service 属性
    • TAF 有两种模式:Session Failover 和 Select Failover。Session Failover 可以重建丢失的连接和会话;Select Failover 可以继续执行一个未完成的查询
    • TAF 工作在以下的数据库配置中,以掩饰数据库故障:
      • Oracle RAC
      • Replicated systems
      • Standby databases
      • Single instance Oracle database

    About FAILOVER_MODE Parameters

    • FAILOVER_MODE 参数包含在连接描述符的 CONNET_DATA 部分
    • FAILOVER_MODE 可以包含以下参数:
    参数 描述
    BACKUP 指定备份连接的网络服务名,当使用 preconnect 预建连接时指定该参数
    DELAY 等待多久后,重新尝试连接,单位是秒;如果指定了 RETRIES,DELAY 默认是 1秒
    如果注册了 callback 函数,该参数被忽略
    METHOD 从主节点到备节点的失败切换:
    basic:在发生 failover 时才建立连接
    preconnect:预先建立连接。它提供了快速 failover,但是需要备份实例可以支持来自每个被支持实例的所有连接
    RETRIES 在 failover 后尝试连接的次数。如果指定了 DELAY,RETRIES 默认值是 5
    TYPE failover 的类型:
    session:如果用户连接丢失,新的会话会被自动创建在;它不会尝试恢复 SELECT 操作
    select:可以继续执行 SELECT 操作
    none:默认值,不具备 failover 功能;它可以用来显式地阻止发生 failover

    Implementing Transparent Application Failover

    • 注意:不要在 listener.ora 文件中的 SID_LIST_listener_name 部分设置 GLOBAL_DBNAME。静态配置的全局数据库名会禁用 TAF
    • 通过设置不同的 FAILOVER_MODE 参数可以配置不同方式的 TAF
    • Oracle 推荐以下三种方法:

    TAF with Connect-Time Failover and Client Load Balancing

    • 使用 Connect-Time Failover 和 Client Load Balancing 配置 TAF
    • 在下面的例子中,Oracle Net 随机地连接到 sales1-server 或 sales2-server 上的一个协议地址。如果连接之后实例失败,TAF 会切换到另一个节点的监听,保留任何未完成的 SELECT 操作
    sales.us.example.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.example.com) 
         (FAILOVER_MODE=
           (TYPE=select) 
           (METHOD=basic))))
    

    TAF Retrying a Connection

    • 在设置 RETRIES 和 DELAY 参数的情况下,如果第一次尝试连接失败,TAF 也提供了自动重试连接的能力
    • 在下面的例子中,Oracle Net 尝试重新连接 sales1-server 的监听。如果 failover 连接失败,Oracle Net 会在尝试重连前等待 15 秒,总共尝试重连 20 次
    sales.us.example.com=
     (DESCRIPTION=
      (ADDRESS=
           (PROTOCOL=tcp)  
           (HOST=sales1-server)  
           (PORT=1521)) 
      (CONNECT_DATA=
         (SERVICE_NAME=sales.us.example.com) 
         (FAILOVER_MODE=
           (TYPE=select) 
           (METHOD=basic)
           (RETRIES=20)
           (DELAY=15))))
    

    TAF Pre-establishing a Connection

    • 一个备份连接可以被预先建立。最初的和备份的连接可以被显式地指定
    • 在下面的示例中,客户端使用网络服务名 sales1.us.example.com 连接 sales1-server 的监听时,同时会预先连接到 sales2-server。如果连接之后 sales1-server 失败,Oracle Net 会切换到 sales2-server,保留任何未完成的 SELECT 操作。同样地, 使用网络服务名 sales2.us.example.com 连接 sales2-server 的监听时,同时会预先连接到 sales2-server
    sales1.us.example.com=
     (DESCRIPTION=
      (ADDRESS=
           (PROTOCOL=tcp)  
           (HOST=sales1-server)  
           (PORT=1521)) 
      (CONNECT_DATA=
         (SERVICE_NAME=sales.us.example.com) 
         (INSTANCE_NAME=sales1) 
         (FAILOVER_MODE=
           (BACKUP=sales2.us.example.com) 
           (TYPE=select) 
           (METHOD=preconnect))))
    sales2.us.example.com=
     (DESCRIPTION=
      (ADDRESS=
           (PROTOCOL=tcp)  
           (HOST=sales2-server)  
           (PORT=1521)) 
      (CONNECT_DATA=
         (SERVICE_NAME=sales.us.example.com) 
         (INSTANCE_NAME=sales2)
         (FAILOVER_MODE=
           (BACKUP=sales1.us.example.com) 
           (TYPE=select) 
           (METHOD=preconnect))))
    

    Verifying Transparent Application Failover

    • 可以通过查询 V$session 视图中的 FAILOVER_TYPE、FAILOVER_METHOD 和 FAILED_OVER 列,来验证 TAF 是否正确配置
    • 可以使用类似于下面的查询
    SELECT MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER, COUNT(*)
    FROM V$SESSION
    GROUP BY MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER;
    
    • 在 failover 前的输出可能是下面这样
    MACHINE              FAILOVER_TYPE FAILOVER_M FAI   COUNT(*)
    -------------------- ------------- ---------- --- ----------
    sales1               NONE          NONE       NO          11
    sales2               SELECT        PRECONNECT NO           1
    
    • 在 failover 后的输出可能是下面这样
    MACHINE              FAILOVER_TYPE FAILOVER_M FAI   COUNT(*)
    -------------------- ------------- ---------- --- ----------
    sales2               NONE          NONE       NO          10
    sales2               SELECT        PRECONNECT YES          1
    
  • 相关阅读:
    Go 数组与切片
    Go 常用函数
    Go 函数,包(二)
    函数,包及错误处理
    Go 循环控制
    Go 流程控制
    Go 获取键盘输入,进制转换
    Go 指针,标识符命名规范及关键字
    Go 变量及基本数据类型3
    一文详解微服务架构
  • 原文地址:https://www.cnblogs.com/tinazzz/p/7073485.html
Copyright © 2020-2023  润新知