1. 程式人生 > >配置 RAC 負載均衡與故障轉移

配置 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服務中有兩個例項為其提供服務     
[[email protected] ~]$ 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/[email protected]$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/[email protected]                                                                       
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/[email protected]                                                          
                                                                                     
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原則來執行,大部分情況需要回滾事務。   


相關推薦

配置 RAC 負載均衡故障轉移

    Oracle負載均衡主要是指新會話連線到RAC資料庫時,如何判定這個新的連線要連到哪個節點進行工作?通常情況下,負載均衡分為客戶端負載均衡與伺服器端負載均衡。客戶端負載均衡通常是在客戶端的tnsnames.ora中多新增一個連結地址以及LOAD_BALANCE與fai

flume高階配置——資料流的複製、分流、負載均衡故障轉移

一、在前面幾篇文章中介紹過幾種常見的flume pipeline 場景。我們在回顧一下,主要有一下幾種: 1、多個 agent 順序連線: 可以將多個Agent順序連線起來,將最初的資料來源經過收集,儲存到最終的儲存系統中。這是最簡單的情況,一般情況下,應該控制這種順

MySQL 高可用:mysql+Lvs+Keepalived 負載均衡故障轉移

ica 目錄 details software fwm 多個 優先級 sql 服務器 規則 轉自 MySQL 高可用:mysql+Lvs+Keepalived 負載均衡及故障轉移 - KK ——專註數據 - 博客頻道 - CSDN.NETh

spring cloud 學習(2)核心: Eureka: 提供服務註冊和發現 註冊中心,負載均衡故障轉移

官方描述:雲端服務發現,一個基於 REST 的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移 Eureka 一個服務中心,一個註冊中心,將可以提供的服務都註冊到這個元件中, ,其他呼叫者需要的時候去註冊中心去獲取,然後再呼叫,避免了服務間的直接呼叫,實現了服務間的解耦

Apache +Jetty的負載均衡叢集配置(下)

分別訪問http://192.168.55.229:9009/fgw/index.jsp和http://192.168.55.231:9009/fgw/index.jsp   重新整理會出現新的頁面:   (6)此時訪問http://192.16

Apache +Jetty的負載均衡叢集配置(上)

                                         

nginx負載均衡反向代理配置

upstream 193.168.81.128{     server localhost:8080 weight=1 max_fails=2 fail_timeout=30s;     server localhost:8081 weight=1 max

linux下apache負載均衡jboss叢集配置

一、安裝並配置jdk 首先安裝JDK,執行命令./ jdk-6u27-linux-x64.bin,JDK安裝目錄為當前指定目錄或者是./jdk-6u33-linux-x64-rpm.bin,或者(如果是rpm格式)執行 rpm –ivh jdk-6u33-linux-amd

Oracle RAC負載均衡 客戶端配置

RAC的負載均衡主要是指新會話連線到RAC資料庫時,如何判定這個新的連線要連到哪個節點進行工作。在RAC中,負載均衡分為兩種,一種是基於客戶端連線的,另外一種是基於伺服器端的。 客戶端的負載均衡配置相對簡單,只需要在tnsnames.ora中新增LOAD_BALANCE=ON這麼一個選項即可。比如下面的T

Oracle RAC 負載均衡測試(結合伺服器端客戶端)

原文地址:http://blog.csdn.net/leshami/article/details/8072367        Oracle RAC 負載均衡使得從客戶端發起的連線能夠有效地分配到監聽器負載較小的例項上。有兩種方式實現客戶端負載均衡,一是通過配置客戶端的lo

centos7 nginx安裝配置實現負載均衡

nginx是一個web伺服器,類似apache一樣,但是比apache效能更好,更快。還可以實現反向代理,和負載均衡,常用於構建web服務叢集的負載均衡。今天就來記錄一下,nginx的安裝與配置,實現負載均衡的作用。 首先,安裝 $ wget http://dl.Fedor

Nginx 反向代理、負載均衡動靜分離

nginx1、環境:前端Nginx服務器:主機名:server1 IP:172.25.80.1 編譯安裝nginx1..12 後端tomcat: Server2--ip:172.25.80.2 主機名:server2 Server3--ip:172.25.80.3 主機名:server32、Ng

Nginx負載均衡反向代理—《億級流量網站架構核心技術》

小時 維護 額外 nat gzip 網站架構 weight 2.7 熱點 當我們的應用單實例不能支撐用戶請求時,此時就需要擴容,從一臺服務器擴容到兩臺、幾十臺、幾百臺。然而,用戶訪問時是通過如http://www.XX.com的方式訪問,在請求時,瀏覽器首先會查詢DNS服務

通過ldirectord配置lvs負載均衡服務器

linux lvs 負載均衡1.通過ldirectord在主、備Director Server上配置LVS ldirectord是heartbeat的一個插件,在安裝heartbeat時,默認已經安裝了此插件。ldirectord主要用於監控集群系統中每個Real Server節點的運行狀態,某個節點的服務

93.Nginx配置負載均衡和SSL配置

Nginx配置:負載均衡和SSL配置一、負載均衡 負載均衡在服務端開發中算是一個比較重要的特性。因為Nginx除了作為常規的Web服務器外,還會被大規模的用於反向代理前端,因為Nginx的異步框架可以處理很大的並發請求,把這些並發請求hold住之後就可以分發給後臺服務端(backend servers,也叫做

CAS 配置NLB 負載均衡網絡無法連接

服務器 Exchange 在虛擬機與虛擬機、虛擬機與實機之間利用Windows操作系統自帶的網絡負載均衡功能如選擇單播集群模式,網絡就無法通訊,NLB不成功。Scenario #1 在虛擬機與虛擬機之間選擇多播模式NLB可正常工作,而虛擬機與實機之間無法選擇多播模式,必須交換機支持Solution #

BGP-17 配置BGP負載均衡

JUNIPER BGP 負載均衡 首先,在JUNOS裏面,默認負載均衡方式是基於流的負載均衡,同一源IP地址,同一目標IP地址的一組數據被稱為一個流,當網絡中有兩條等價的路徑時,基於流的負載均衡規定,同一條流的流量只會在一條鏈路上被傳輸。因此,我們需要將默認基於流的負載均衡,強制指定為基於

負載均衡web服務集群搭建

linux主機名ip地址角色viplvs01192.168.1.904層負載192.168.1.206lvs02192.168.1.914層負載192.168.1.206lb01192.168.1.57層負載lb02 192.168.1.67層負載web-nginx01 172.16.1.33靜態服務器web

服務器配置負載均衡時需配置MachineKey

href 遇到 eve orm 連接 配置 ashx auto forms 服務器配置,負載均衡時需配置MachineKey https://blog.csdn.net/liuqiao0327/article/details/54018922 Asp.Net應用程序中為什

haproxy負載均衡搭建web群集

版本 網段 nod 修改 其中 lib AD tab 技術分享 前面我搭建了tomcat+nginx負載均衡群集,LVM負載均衡群集,今天百忙之中我來湊一個haproxy負載均衡群集,這三種群集的搭建我是深有體會LVS性能確實好(DR)但是在搭建過程中太過於繁瑣,nginx