配置 RAC 負載均衡與故障轉移
--轉載於:http://blog.csdn.net/leshami/article/details/6791667
Oracle負載均衡主要是指新會話連線到RAC資料庫時,如何判定這個新的連線要連到哪個節點進行工作?通常情況下,負載均衡分為客戶端負載
均衡與伺服器端負載均衡。客戶端負載均衡通常是在客戶端的tnsnames.ora中多新增一個連結地址以及LOAD_BALANCE與failover引數。而伺服器
端的負載均衡則相對複雜,下面具體描述伺服器端負載均衡。
一、負載均衡
注意這裡的負載均衡指的是連線的負載均衡,即客戶可以隨機從不同的例項中連線到資料庫
1.配置tnsnames.ora使得該檔案中包含如下全部內容:
使用shell指令碼來進行測試負載均衡
負載均衡是用於實現基於連線的負載均衡,但不能解決節點是否可用,一旦一個節點損壞,已成功連線的客戶端並不能轉移到其他正常服務的
例項中。而故障轉移功能則使得該功能得以實現。可以使用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中多出了以下內容,注意是各個節點都會多出以下內容
下面使用帳戶usr1,服務名sales從Windows客戶端來登陸,注意要配置好客戶端tnsnames,可以將伺服器sales項內容全部複製到客戶端tnsnames.ora中
對於首選例項從故障中恢復後,需要手動來重新定位到首選例項
使用Windows客戶端透過sales服務名登陸
再在剛剛執行表建立的會話中查詢記錄,收到提示,事務必須被回滾
Oracle負載均衡主要是指新會話連線到RAC資料庫時,如何判定這個新的連線要連到哪個節點進行工作?通常情況下,負載均衡分為客戶端負載
均衡與伺服器端負載均衡。客戶端負載均衡通常是在客戶端的tnsnames.ora中多新增一個連結地址以及LOAD_BALANCE與failover引數。而伺服器
端的負載均衡則相對複雜,下面具體描述伺服器端負載均衡。
一、負載均衡
注意這裡的負載均衡指的是連線的負載均衡,即客戶可以隨機從不同的例項中連線到資料庫
1.配置tnsnames.ora使得該檔案中包含如下全部內容:
2.配置引數檔案remote_listener
- # 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))
- )
3.需要配置連線描述資訊的兩個IP地址、埠號、以及load_balance子項為yes (主要是load_balance子項)
- SQL> alter system set remote_listener='LISTENERS_DEVDB' scope=both sid='*';
4.檢視偵聽器的狀態,從下面可以看到devdb.robinson.com服務中有兩個例項為其提供服務
- 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)
- )
- )
5.測試負載均衡
- [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...
使用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中多出了以下內容,注意是各個節點都會多出以下內容
同時引數service_names會多出一個服務名,位於在配置資料庫服務時選擇的首選例項中
- 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)
- )
- )
- )
使用srvctl工具也可以看到該服務已經正常開始提供服務
- 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
2.實現故障轉移
- 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...
下面使用帳戶usr1,服務名sales從Windows客戶端來登陸,注意要配置好客戶端tnsnames,可以將伺服器sales項內容全部複製到客戶端tnsnames.ora中
3.重新定位故障轉移服務到首選例項
- 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
對於首選例項從故障中恢復後,需要手動來重新定位到首選例項
4.DML故障轉移(不同於DQL,因此單獨列出)
- 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
使用Windows客戶端透過sales服務名登陸
從另一個會話中使用sysdba關閉devdb1(shutdown abort)
- 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
再在剛剛執行表建立的會話中查詢記錄,收到提示,事務必須被回滾
總結:對於DML 操作在實現故障轉移時,將嚴格按照ACID原則來執行,大部分情況需要回滾事務。
- 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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29119536/viewspace-1084499/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RAC_TNS故障轉移負載均衡、SCAN IP、VIP、PUBLIC IP負載
- 【RAC】RAC中的負載均衡和故障切換--TAF配置負載
- Amoeba實現MySQL的負載均衡、故障轉移MySql負載
- Oracle RAC 客戶端負載均衡配置Oracle客戶端負載
- Linux 系統雙網路卡繫結配置實現負載均衡和故障轉移Linux負載
- 高併發應用場景下的負載均衡與故障轉移實踐,AgileEAS.NET SOA 負載均衡介紹與實踐負載
- [zt] RAC的負載均衡負載
- ORACLE RAC TAF 配置(透明故障轉移)Oracle
- inux 雙網路卡繫結(bonding)實現負載均衡或故障轉移(轉)UX負載
- Flume負載均衡配置負載
- apache 負載均衡配置Apache負載
- DNS負載均衡的配置與特點DNS負載
- 配置IIS的負載均衡負載
- Ribbon負載均衡策略與自定義配置負載
- 淺談RAC中的負載均衡負載
- nginx配置+uwsgi+負載均衡配置Nginx負載
- 使用Nginx配置TCP負載均衡NginxTCP負載
- Nginx負載均衡配置說明Nginx負載
- 兩種負載均衡的配置。負載
- 客戶端負載均衡配置客戶端負載
- Apache +Tomcat的負載均衡與叢集配置ApacheTomcat負載
- LVS負載均衡配置與keepalive服務配置負載
- Nginx/Httpd負載均衡tomcat配置Nginxhttpd負載Tomcat
- IdentityServer4 負載均衡配置IDEServer負載
- 負載均衡之Haproxy配置詳解負載
- 玩轉spring boot——負載均衡與session共享Spring Boot負載Session
- RAC負載均衡的簡單測試(三)負載
- RAC負載均衡的簡單測試(二)負載
- RAC負載均衡的簡單測試(一)負載
- RAC負載均衡的簡單測試(四)負載
- 負載均衡簡介與搭建負載
- 負載均衡負載
- 靈活實現RAC三節點的負載均衡及TAF配置(五)負載
- 靈活實現RAC三節點的負載均衡及TAF配置(二)負載
- 靈活實現RAC三節點的負載均衡及TAF配置(一)負載
- 靈活實現RAC三節點的負載均衡及TAF配置(四)負載
- 靈活實現RAC三節點的負載均衡及TAF配置(三)負載
- gRPC負載均衡(客戶端負載均衡)RPC負載客戶端