配置 RAC 负载均衡与故障转移

    Oracle负载均衡主要是指新会话连接到RAC数据库时,如何判定这个新的连接要连到哪个节点进行工作?通常情况下,负载均衡分为客户端负载
均衡与服务器端负载均衡。客户端负载均衡通常是在客户端的tnsnames.ora中多添加一个链接地址以及LOAD_BALANCE与failover参数。而服务器
端的负载均衡则相对复杂,下面具体描述服务器端负载均衡。
    
一、负载均衡
    注意这里的负载均衡指的是连接的负载均衡,即客户可以随机从不同的实例中连接到数据库
    1.配置tnsnames.ora使得该文件中包含如下全部内容:       

# LISTENERS_DEVDB DEVDB是数据库名,可以使用netmgr,netca编辑或直接使用Vim创建
LISTENERS_DEVDB =
  (ADDRESS_LIST =
	(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.robinson.com)(PORT = 1521))
	(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.robinson.com)(PORT = 1521))
  )

    2.配置参数文件remote_listener         

SQL> alter system set remote_listener='LISTENERS_DEVDB' scope=both sid='*'; 

    3.需要配置连接描述信息的两个IP地址、端口号、以及load_balance子项为yes (主要是load_balance子项)      

DEVDB =
  (DESCRIPTION =
	(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.robinson.com)(PORT = 1521))
	(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.robinson.com)(PORT = 1521))
	(LOAD_BALANCE = yes)
	(CONNECT_DATA =
	  (SERVER = DEDICATED)
	  (SERVICE_NAME = devdb.robinson.com)
	)
  )

    4.查看侦听器的状态,从下面可以看到devdb.robinson.com服务中有两个实例为其提供服务     

[oracle@rac2 ~]$ lsnrctl status
	Service "devdb.robinson.com" has 2 instance(s).
	  Instance "devdb1", status READY, has 1 handler(s) for this service...
	  Instance "devdb2", status READY, has 2 handler(s) for this service...

    5.测试负载均衡
    使用shell脚本来进行测试负载均衡     

--编辑TestLoadBalance.sh
	#!/bin/bash
	#Usage: TestLoadBalance devdb 1000
	count=0
	while [ $count -lt $2 ]   # Set up a loop control
	do                        # Begin the loop
		count='expr $count + 1' # Increment the counter
		sqlplus -s usr1/usr1pwd@$1 @TestLoadBalance.sql  # Connect instance and execute sql statement
		sleep 1
	done                                                                                            

--TestLoadBalance.sql 脚本
	col instance_name format a30
	select instance_name from v$instance;                                                           

--实施测试
	./TestLoadBalance.sh devdb 1000                                                                 

--查看结果
	SQL> select inst_id,count(1) from gv$instance group by inst_d;                                                  

	INST_ID       COUNT(1)
	----------    ----------
	devdb1        446
	devdb2        554

二、配置故障转移
    负载均衡是用于实现基于连接的负载均衡,但不能解决节点是否可用,一旦一个节点损坏,已成功连接的客户端并不能转移到其他正常服务的
    实例中。而故障转移功能则使得该功能得以实现。可以使用srvctl 和dbca来创建服务。下面使用dbca来创建一个新的服务,客户端连接到实
    例后,对故障实现透明切换。
    
    1.配置故障转移服务
        在节点rac1使用oracle帐户启动dbca工具,
            a.选择 Oracle Real Application Clusters database
            b.选择 Services Management
            c.集群数据库列表:单击 Next。
            d.数据库服务:单击 Add。
                添加服务:输入sales。
                选择 devdb1 作为首选实例。
                选择 devdb2 作为可用实例。
                TAF 策略:选择 Basic。
                单击 Finish。
            e.数据库配置助手:单击 No 退出。
        配置完毕后,在tnsnames.ora中多出了以下内容,注意是各个节点都会多出以下内容           

SALES =
  (DESCRIPTION =
	(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip.robinson.com)(PORT = 1521))
	(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip.robinson.com)(PORT = 1521))
	(LOAD_BALANCE = yes)
	(CONNECT_DATA =
	  (SERVER = DEDICATED)
	  (SERVICE_NAME = sales.robinson.com)
	  (FAILOVER =      --failover_mode是实现故障转移的关键选项
		(TYPE = SELECT)
		(METHOD = BASIC)   --TAF 策略:此处当前为 Basic
		(RETRIES = 180)
		(DELAY = 5)
	  )
	)
  )

        同时参数service_names会多出一个服务名,位于在配置数据库服务时选择的首选实例中      

SQL> select instance_name from v$instance;                                        

INSTANCE_NAME
----------------
devdb1                                                                            

SQL> show parameter service_names                                                 

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      devdb.robinson.com, sales        

SQL> select instance_name from v$instance;                                        

INSTANCE_NAME
----------------
devdb2                                                                            

SQL> show parameter service                                                       

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      devdb.robinson.com

        使用srvctl工具也可以看到该服务已经正常开始提供服务       

SQL> ho srvctl status service -d devdb -s sales
Service sales is running on instance(s) devdb1                             

SQL> ho lsnrctl status                                                     

Service "sales.robinson.com" has 1 instance(s).   --sales正常提供服务
  Instance "devdb1", status READY, has 2 handler(s) for this service...

    2.实现故障转移
        下面使用帐户usr1,服务名sales从Windows客户端来登陆,注意要配置好客户端tnsnames,可以将服务器sales项内容全部复制到客户端tnsnames.ora中     

C:\>sqlplus usr1/usr1@sales
SQL> col host_name format a20
SQL> select instance_number ins_no,instance_name,host_name,status from v$instance;                

	INS_NO INSTANCE_NAME    HOST_NAME            STATUS
---------- ---------------- -------------------- ------------
		 1 devdb1           rac1.robinson.com    OPEN
SQL> select failover_type,failover_method,failed_over from v$session
  2  where username='USR1';                                                                       

FAILOVER_TYPE FAILOVER_M FAI
------------- ---------- ---
SELECT        BASIC      NO                                                                       

--从其它会话使用sys帐户登陆到crm 并关闭该实例
SQL> show user;
USER is "SYS"
SQL> select instance_name from v$instance;                                                        

INSTANCE_NAME
----------------
devdb1                                                                                            

SQL> shutdown abort
ORACLE instance shut down.                                                                        

--从先前登陆到sales的会话中验证会话故障切换功能
SQL> select instance_number ins_no,instance_name,host_name,status from v$instance;                

	INS_NO INSTANCE_NAME    HOST_NAME            STATUS
---------- ---------------- -------------------- ------------
	 			 2 devdb2           rac2.robinson.com    OPEN                                             

SQL> select failover_type,failover_method,failed_over from v$session
  2  where username='USR1';  --第3列显示的为yes,也表明经过故障切换后提供的服务                   

FAILOVER_TYPE FAILOVER_M FAI
------------- ---------- ---
SELECT        BASIC      YES    		                                                              

--由下面的查询中可以看到服务名sales被添加到可用实例devdb2,节点rac2 的service_names参数中
SQL> select instance_name from v$instance;                                                        

INSTANCE_NAME
----------------
devdb2                                                                                            

SQL> show parameter service                                                                       

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      devdb.robinson.com, sales

    3.重新定位故障转移服务到首选实例
        对于首选实例从故障中恢复后,需要手动来重新定位到首选实例       

SQL> startup  --启动devdb1
SQL> show parameter service_names                                                  

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      devdb.robinson.com                

SQL> ho srvctl relocate service -d devdb -s sales -i devdb2 -t devdb1              

SQL> show parameter service_names                                                  

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
service_names                        string      devdb.robinson.com, sales

    4.DML故障转移(不同于DQL,因此单独列出)
        使用Windows客户端通过sales服务名登陆       

C:\>sqlplus usr1/usr1@sales                                                          

SQL> show user;
USER is "USR1"
SQL> create table tb_temp (id int,ename varchar2(20)) tablespace tbs1;               

Table created.                                                                       

SQL> insert into tb_temp
  2  select 1,'Robinson' from dual
  3  union all
  4  select 2,'Jackson'  from dual;                                                  

2 rows created.                                                                      

SQL> commit;                                                                         

Commit complete.                                                                     

SQL> select * from tb_temp;                                                          

		ID ENAME
---------- --------------------
		 1 Robinson
		 2 Jackson                                                                       

SQL> delete from tb_temp;                                                            

2 rows deleted.                                                                      

SQL> select * from tb_temp;                                                          

no rows selected

        从另一个会话中使用sysdba关闭devdb1(shutdown abort)
        再在刚刚执行表创建的会话中查询记录,收到提示,事务必须被回滚    

SQL> select * from tb_temp;
select * from tb_temp
*
ERROR at line 1:
ORA-25402: transaction must roll back                                      

SQL> rollback;                                                             

Rollback complete.
SQL> select * from tb_temp;                                                

		ID ENAME
---------- --------------------
		 1 Robinson
		 2 Jackson                                                             

SQL> select failover_type,failover_method,failed_over from v$session
  2  where username='USR1';                                                

FAILOVER_TYPE FAILOVER_M FAI
------------- ---------- ---
SELECT        BASIC      YES

        总结:对于DML 操作在实现故障转移时,将严格按照ACID原则来执行,大部分情况需要回滚事务。   

时间: 2024-10-25 19:03:55

配置 RAC 负载均衡与故障转移的相关文章

如何配置Oracle RAC负载均衡和故障转移

Oracle负载均衡主要是指新会话连接到RAC数据库时,如何判定这个新的连接要连到哪个节点进行工作?通常情况下,负载均衡分为客户端负载均衡与服务器端负载均衡.客户端负载均衡通常是在客户端的tnsnames.ora中多添加一个链接地址以及LOAD_BALANCE与failover参数.而服务器端的负载均衡则相对复杂,下面具体描述服务器端负载均衡. 一.负载均衡 注意这里的负载均衡指的是连接的负载均衡,即客户可以随机从不同的实例中连接到数据库 1.配置tnsnames.ora使得该文件中包含如下全部

高并发应用场景下的负载均衡与故障转移实践,AgileEAS.NET SOA 负载均衡介绍与实践

一.前言      AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本.缩短开发时间,快速适应市场变化的目的.      AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC.ORM.SOA.分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的

实现ISA防火墙网络负载均衡的故障转移

 在部署了网络负载均衡(NLB)的网络中,当某个客户针对NLB虚拟地址发起连接请求时,NLB通过某种NLB算法来确定(通常是根据发起请求的客户端源地址来决定)为客户服务的NLB节点.在NLB节点没有变动之前,对于某个客户,将总是由某个对应的NLB节点为它提供服务.ISA防火墙企业版中的集成NLB依赖于Windows服务器系统的NLB服务,对于客户发起的请求,也是采用相同的方式进行处理. 例如,对于一个具有三个NLB节点(ISA1.ISA2.ISA3)的ISA防火墙NLB阵列,当一个客户(10.1

Oracle RAC 负载均衡测试(结合服务器端与客户端)

        Oracle RAC 负载均衡使得从客户端发起的连接能够有效地分配到监听器负载较小的实例上.有两种方式实现客户端负载均衡,一是通过配置客户端的load_balance,一是通过配置服务器端的remote_listener参数.两种方式各有优劣,而且两者并不相互排斥,因此可以结合两种方式来更加有效的实现负载均衡.本文将描述两者结合的使用情况(oralce 10g rac).         有关客户端与服务端负载均衡的单独测试请参考:              Oracle RAC

基于CentOS 7配置Nginx负载均衡

Nginx负载均衡是Nginx的核心功能之一,工作在第七层.它是除了lvs,haproxy之外市面上较为流行的一种负载均衡软件.可以将客户端请求分流到跨多个计算资源(如计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器)的工作负载分布.负载均衡旨在优化资源使用,最大化吞吐量,最小化响应时间,并避免任何单一资源的过载.使用具有负载平衡的多个组件而不是单个组件可以通过冗余来提高可靠性和可用性.本文简要描述Nginx负载均衡的配置,供大家参考. 一.负载均衡upstream模块介绍 upstrea

SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移_mssql2008

上一篇文章已经为配置镜像数据库做好了准备,接下来就要进入真正的配置阶段 一.在镜像数据库服务器上设置安全性并启动数据库镜像会话 1.展开数据库,选择VirtualManagerDB,点击右键选择任务--镜像 2.点击配置安全性,点选是,包括见证服务器 3.去掉见证服务器,以后进行配置 4.设置主体服务器,填入端点名称为site1 5.添加镜像服务器,取端点名为site2 6.指定服务账户为域管理员账户(可以在域内事先配置) 7.创建成功,点击关闭 8.弹出对话框,选择不开始开始镜像 9.点选高性

Apache2.2以上版本与Tomcat整合配置及负载均衡实现_Linux

今天技术总监叫实现Apache和Tomacat整合,在网上找了很多资料,结果发现还是这个最方便! 下面是实现2个tomcat实现负载均衡,如果只有一个则可删除一个 apache2.2以上版本,无需使用jk_mod来集成tomcat,直接使用ajp,很方便. 修改apache配置文件httpd.conf 启用mod_proxy_ajp 复制代码 代码如下: #LoadModule proxy_module modules/mod_proxy.so #LoadModule proxy_ajp_mod

如何配置vSphere HA实现自动故障转移?

部署VMware vSphere的一个原因在于利用高可用性HA功能.   使用vSphere HA,可让虚拟服务器停止,系统自动将其切换到新服务器上的第二个相同的虚拟机上,并且不会丢失心跳. 首先,配置VMware集群节点,并在通用标准下运行起来.你需要对所有节点后执行相同的更新,该案例中是两台服务器,并拥有一个共享的存储空间,你的第三台存储服务器提供给节点使用.所有虚拟机及其配置文件必须驻留并能访问共享存储.如果不能,当一个节点坏掉,另一个新节点起来,新节点上的数据将不会更新. 创建集群后,使

【RAC】RAC中的负载均衡和故障切换--TAF配置

[RAC]RAC中的负载均衡和故障切换--TAF配置 涉及到的内容包括:   Oracle RAC 客户端连接负载均衡(Load Balance)      实现负载均衡(Load Balance)是Oracle RAC最重要的特性之一,主要是把负载平均分配到集群中的各个节点,以提高系统的整体吞吐能力.通常情况下有两种方式来实现负载均衡,一个是基于客户端连接的负载均衡,一个是基于服务器端监听器(Listener)收集到的信息来将新的连接请求分配到连接数较少实例上的实现方式.本文主要讨论的是基于客