Chinaunix首页 | 论坛 | 博客
  • 博客访问: 124960
  • 博文数量: 27
  • 博客积分: 1200
  • 博客等级: 中尉
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-22 14:56
文章分类

全部博文(27)

文章存档

2011年(19)

2010年(8)

我的朋友

分类: Oracle

2010-12-31 21:23:21

一、Fail over
-----------------------------------------------------------------
clinet-side connect time fail over的TNS的配置
   
dbkt.world =
  (DESCRIPTION =
   (LOAD_BALANCE=ON)
    (FAILOVER=ON)
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.182.*.9)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.182.*.11)(PORT = 1521))
      (LOAD_BALANCE = yes)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dbkt.world)
     ))
    

------------------------------------------------------------------
TAF_failover
TAF fail over的配置
dbkt.world =
  (DESCRIPTION =
   (LOAD_BALANCE=ON)
    (FAILOVER=ON)
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.182.*.9)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.182.*.11)(PORT = 1521))
      (LOAD_BALANCE = yes)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dbkt.world)
       (FAILOVER_MODE=(TYPE=select)(METHOD=preconnect)(backup= dbkt.bak))
    )
  )
dbkt.bak =
  (DESCRIPTION =
   (LOAD_BALANCE=ON)
    (FAILOVER=ON)
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.182.*.11)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.182.*.9)(PORT = 1521))
      (LOAD_BALANCE = yes)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = dbkt.world)
       (FAILOVER_MODE=(TYPE=select)(METHOD=preconnect)(backup= dbkt.world))
    )
  )
 
 
       client-side connect time fail over和TAF fail over的区别, 在client-side connecnt time fail over
  连接的节点挂了以后,必须重接连接。但是使用TAF fail over连接。用户感觉不到连接的节点的问题。
      
----------------------------------------------------------------------
server-side   TAF
    第3种方式是server-side taf,单从名字上就可以猜测和TAF有一定的联系。可以把server-side TAF看作是TAF的一个变种。
首先SERVER-SIDE TAF也是TAF,SERVIER-SIDE TAF是在服务器端配置,而不像是在客户端配置的。
    server-side taf,从配置参数而言,server-side taf和taf相比多了一个instance role(实例角色)的概念,所谓实例角色
 就是相当于多个instance参与了一个service时,可以优先配置使用哪一个instance为用户服务,用户共有两种可选角色。
     preferred:首选角色:会优先选择拥有这个角色的实例提供服务。
     available: 后备角色,用户连金额会优先选用preferred 的instance,当preferred的instance不可以用,才会转到available的
 instance上。
    
     要想使用server-side taf必须配置service ,service可以创建数据库时创建,也可以数据库创建以后修改,既可以通过配置向导
也可以通过命令行方式配置,下面采用手工配置。
    
     使用srvctl命令配置service
     1、创建service
       
        srvctl add service -d -s -r "preferred-instance-list" -a "available-instance-list" -p ;
       
        srvctl add service -d devdb -s test_devdb -r devdb1 -a devdb2 -P preconnect;
    
    2、 查看配置
      
       srvctl config service -d devdb -s test_devdb  
   
    3、是否自动运行service
    
       srvctl enable/disable service -d devdb -s test_devdb -i devdb1
       srvctl enable/disable service -d devdb -s test_devdb -i devdb2
      
       测试:
      
       srvctl enable service -d devdb -s test_devdb -i devdb1
       srvctl enable service -d devdb -s test_devdb -i devdb2
      
    4、启动service
      
       srvctl start service -d -s -i instance-name -o start-option -c connect-string -q
       如果不指定sevice-name,则所有的service都会被启动,可以使用逗号分隔方式,同时启动多个service,-i 指定在哪个实例上启动service.
       srvctl start service -d devdb -s test_devdb -i devdb1
   
    5、停止 service
       srvctl stop service -d -s -i instance-name -c connect-string -q -f
       其中-f选项可以强制关闭service,并中断了其所有的用户的连接。
      
    6、查看service状态
       srvctl status service -d database-name -s service-name -f -v
       其中-f 选项可以显示被disable的instance信息,而-v选项可以详细输出。
      
    7、 删除service
       
       srvctl remove service -d database -name -s service-name -i instance-name [-f]
       
       在使用srvctl创建service时,需要注意taf策略选项必须通过dbms_service包来配置。
      
       (1)、添加之前,查看系统现有的service:
            SQL>show parameter service;
           
       (2)、使用srvctl命令创建 test_rac服务:
      
            srvctl add service -d devdb -s test_devdb -r devdb1 -a devdb2 -P preconnect;
      
       (3)、启动这个服务
          
           srvctl start service -d devdb -s test_devdb
       
       (4)、确认这个service可用
          
           show parameter service
      
       (5)、修改TAF的service端配置
          
           begin
              dbms_service.modify_service(
                    service_name=>'test_devdb',
                    failover_method=>dbms_service.failover_method_basic,
                    failover_type=>dbms_service.failover_type_select,
                    failover_retries=>180,
                    failover_delay=>5            
              );
           end;
         
       (6)、确认已经生效
          
           select name,failover_method,failover_type,goal,clb_goal from dba_services;  
       
       (7)  测试完成清理测试环境
           srvctl stop service -d devdb -s test_devdb
           srvctl disable service -d devdb -s test_devdb
          
           删除服务
           srvctl remove service -d devdb -s test_devdb
          
           OCR中的内容被删除了,但是数据字典里还是有service的内容,继续清除数据字典里的内容。
           查看数据字典内容:
            select name,failover_method,failover_type,goal,clb_goal from dba_services;
           
           删除数据字典里的内容
           
            begin
              dbms_service.delete_service(service_name=>'test_devdb');
            end;
          
           确认数据字典清除
            select name,failover_method,failover_type,goal,clb_goal from dba_services;
 

ORACLE Clusterware HA框架
          
           Oracle clusterware 10是作为一个单独的产品发布,虽然基于它能够构建ORACLE DATABASE高可用
    负载均衡集群RAC,但是Oracle clusterware功能绝不仅限与此,oracle把这个产品定位于独立的集群产品
   
   
    Load Balance
          load balance就是把负载平均分配到集群中的各个节点,从而提高整体的吞吐能力。oracle 10g rac
    提供了两种手段分散负载,其一就是通过connection balancing,按照某种算法把用户分配到不同的节点,
    其二,通过service在应用层面上进行分散
   
    1、存技术的分散负载
    2、面向业务的分散负载
   
    connection balancing
       connection balancing 这种负载均衡在用户连接这个层次进行的,也就是用户请求建立连接时,根据每个
     节点的负载决定把连接分配给哪个实例上,而一旦连接建立以后,会话的所有的操作都在这个实例上完成,而不
     再分配到其他实例。
       connection balancing有客户端和服务器端的两种方式。
       1、客户端均衡(client-side LB)
          这个是oracle8使用的办法,配置方法是在tnsnames.ora中加入LOAD_BALANCE=YES条目,当客户端发起连接时,会从地址列表中
       随机选取一个,再使用随机算法把请求分散到各个实例
        
         一个客户端负载连接的实例:
             Client-sid LB
            
               devdb =
                   (DESCRIPTION =
                          (LOAD_BALANCE=YES)
                           (FAILOVER=ON)
                           (ADDRESS_LIST =
                             (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.131)(PORT = 1521))
                             (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.132)(PORT = 1521))
                             (LOAD_BALANCE = yes)
                           )
                           (CONNECT_DATA =
                             (SERVER = DEDICATED)
                             (SERVICE_NAME = test_devdb)
                           )
                         )
           
           这种方法缺点很明星,因为在分配连接时没有考虑各个节点的真实负载,最后分配给不一定是平衡的,并且随机算法
      需要时间片,如果在短时间内同时发起多个连接,这些连接都可能都被分配到一个节点上,甚至更坏的情况下,连接可能会
      分配到故障节点上。
     
     
     
     2、服务器端的负载均衡(server-side LB)
        服务器端负载均衡的实现依赖于listener收集的负载信息,在数据库运行过程当中,PMON后台进程会收集系统的负载信息
    然后登记到listener中,最少1分钟,最多10分钟PMON会更新一次信息,如果节点的负载过高,更新频率也越高,保证listener能够掌握
    每个节点的准确的负载情况,如果listener关闭,PMON会每隔一秒检查listener是否重启
   
       PMON进程不仅会向本地的listener注册,还可以向其他节点上的listener注册,但到底向何处注册,是由remote_listeners和local_listener
   两个参数决定。local_listener和remote_listeners需要注册,参数项是一个tnsnames项。
     
         
           在TNSNAMES.ORA中加入:
           LISTENERS_DEVDB =
            (DESCRIPTION =
             (ADDRESS_LIST =
              (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
             (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
                )
             )
           在本地listener.ora中去掉SID_LIST动态注册的条目
          
           alter system set remote_listener='LISTENERS_DEVDB' sid='*';
          
          
   
阅读(2362) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~