RAC 攻擊 - Oracle 叢集資料庫實戰/連線故障轉移
外觀
重要說明:此實驗是針對 Oracle 11gR1 編寫的,這裡的資訊在使用此版本和更舊版本時至關重要。它將演示故障轉移是如何工作的以及在 TNSNAMES 中使用正確地址的重要性。但是,從 11gR2 開始,不應該使用節點 VIP 連線到資料庫 - 始終應該使用 SCAN VIP。11gR2 客戶端在單個 DNS 條目上返回多個 SCAN VIP 時內建了相同的故障轉移功能。
- 在本地計算機上編輯例項客戶端使用的 TNSNAMES.ORA 檔案。新增兩個名為 CFTEST 和 CFTEST-NOVIP 的條目,它們連線到 RAC 服務,沒有負載均衡。顯式啟用連線故障轉移,即使它預設情況下已經啟用。不要對第二個條目使用 VIP(這是錯誤的,但我們會測試它以檢視會發生什麼)。C:\instantclient_11_2> notepad c:\instantclient_11_2\tnsnames.ora CFTEST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collabn1-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = collabn2-vip)(PORT = 1521)) (LOAD_BALANCE = no) (FAILOVER = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC.vm.ardentperf.com) ) ) CFTEST-NOVIP = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = collabn1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = collabn2)(PORT = 1521)) (LOAD_BALANCE = no) (FAILOVER = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RAC.vm.ardentperf.com) ) )
- 在 collabn1 上檢查偵聽器到 RAC 服務的已建立連線數。從 Windows 連線到 CFTEST 和 CFTEST-NOVIP 多次,然後再次檢查 lsnrctl 統計資訊。來自 Windows 計算機的所有連線都附加到 collabn1 上的偵聽器,但此偵聽器將連線分散到兩個例項之間。首先檢視節點 1 上的已建立連線數。如果它們不全是零,則沒問題。collabn1:/home/oracle[RAC1]$ lsnrctl services Service "RAC.vm.ardentperf.com" has 2 instance(s). Instance "RAC1", status READY, has 2 handler(s) for this service... Handler(s): "DEDICATED" 'established:0' refused:0 state:ready LOCAL SERVER "DEDICATED" 'established:0' refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=collabn1.vm.ardentperf.com)(PORT=1521)) Instance "RAC2", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=collabn2.vm.ardentperf.com)(PORT=1521)) 其次,依次連線到資料庫,使用兩個服務名稱。您可以在檢查連線所需時間後退出每個會話。所有會話都應該快速連線。計算您連線的次數。C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP 第三,再次檢查節點 1 上的偵聽器連線。確保已建立的連線總數至少增加了與您連線的會話數相同的數量。(也就是說,確認您所有的會話都已連線到此節點。)可能還有更多連線;沒問題。另外,請注意偵聽器是如何將連線分配到兩個例項的 - 即使我們的客戶端只連線到一個節點上的偵聽器。連線到每個例項的數量無關緊要;如果看不到 3 和 3 也沒問題。collabn1:/home/oracle[RAC1]$ lsnrctl services Service "RAC.vm.ardentperf.com" has 2 instance(s). Instance "RAC1", status READY, has 2 handler(s) for this service... Handler(s): "DEDICATED" 'established:3' refused:0 state:ready LOCAL SERVER "DEDICATED" 'established:0' refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=collabn1.vm.ardentperf.com)(PORT=1521)) Instance "RAC2", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:3 refused:0 state:ready REMOTE SERVER (ADDRESS=(PROTOCOL=TCP)(HOST=collabn2.vm.ardentperf.com)(PORT=1521))
- 在 VMware 控制檯中,確保您已開啟從 Windows 連線到的節點 collabn1。從 虛擬機器 選單中選擇 關閉電源,模擬節點完全故障。

- 等待大約一分鐘(以便叢集可以檢測到失敗的節點)。然後,從 Windows 再次連線到 CFTEST 和 CFTEST-VIP 服務。當您使用 NOVIP 連線時會發生什麼?C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP C:\instantclient_11_2> sqlplus sh/sh@CFTEST C:\instantclient_11_2> sqlplus sh/sh@CFTEST-NOVIP
此實驗的目的是演示為什麼您應該始終使用 VIP 連線!
