關(guān)于 Oracle 存儲雙活配置和實戰(zhàn)
1.Oracle 存儲雙活背景介紹
Oracle RAC 在設(shè)計的時候只是考慮應用的高可用,即通過一個共享存儲,搭建2個或者多個 Oracle 實例,對外提供 Oracle 服務,沒有考慮到這個共享存儲的故障問題。而 ADG 只是提供了數(shù)據(jù)級別的異地 HA,最主要功能是容災、數(shù)據(jù)保護、故障恢復等。跨數(shù)據(jù)中心雙活的,它的設(shè)計目的是為一個數(shù)據(jù)中心內(nèi)有著共享存儲的多個主機實現(xiàn)負載均衡和高可用性。但是由于它的架構(gòu)確實有著跨數(shù)據(jù)中心實現(xiàn)負載均衡和高可用性的潛力,所以有幾家存儲設(shè)備供應商對它的使用環(huán)境做了擴展,提出了跨數(shù)據(jù)中心的解決方案。Oracle 對此采取了默認的態(tài)度,但是建議所有的解決方案在投入客戶生產(chǎn)之前進行仔細的測試。
對于 RAC 而言,跨數(shù)據(jù)中心解決方案的***瓶頸是節(jié)點之間的 Interconnect,因為它對時延和帶寬的要求都非常高。一般而言,本地 Interconnect 傳輸時延在 1~2ms 之間,本地 IO 的延時則在 8~15ms 之間。這兩個時延對性能的影響相當大,如果使用雙數(shù)據(jù)中心方案,隨著機房距離的增長,它們都會嚴重影響性能。而且由 Interconnect 的時延基數(shù)低(1~2ms),導致機房距離產(chǎn)生的時延對整個 Interconnect 影響的占比更大,所以在搭建 Oracle 雙活的 RAC 存儲架構(gòu)時需要對各個節(jié)點的 IO 性能做嚴格的測試,標準的 Oracle 雙活方案架構(gòu)如下。
2.Oracle 存儲雙活安裝配置
安裝部署存儲雙活,需要至少6快盤,詳細磁盤規(guī)劃需求如下:
安裝 grid 創(chuàng)建磁盤組時候選擇臨時 tmporc 盤作為臨時的 ocr 磁盤組。
Grid 安裝好之后,需要創(chuàng)建 normal 冗余的 ocr 磁盤組和 data 磁盤組,創(chuàng)建 ocr 磁盤組需要指定兩個 failgroup 和一個 QUORUM FAILGROUP(只做仲裁,不存儲 ocr 數(shù)據(jù)):
- CREATE DISKGROUP OCR NORMAL REDUNDANCY
- FAILGROUP aa DISK '/dev/asm-aaocr'
- FAILGROUP bb DISK '/dev/asm-bbocr'
- QUORUM FAILGROUP zc DISK '/dev/asm-zcocr'
- ATTRIBUTE 'au_size'='1M',
- 'compatible.asm' = '11.2',
- 'compatible.rdbms' = '11.2',
- 'compatible.advm' = '11.2';
創(chuàng)建 Data 磁盤組需要指定兩個 failgroup,命令如下:
- CREATE DISKGROUP DATA NORMAL REDUNDANCY
- FAILGROUP aa DISK '/dev/asm-aadata1'
- FAILGROUP bb DISK '/dev/asm-bbdata1'
- ATTRIBUTE 'au_size'='1M',
- 'compatible.asm' = '11.2',
- 'compatible.rdbms' = '11.2',
- 'compatible.advm' = '11.2';
如果上線后有添加磁盤的需求,Data 磁盤組添加磁盤命令如下:
- alter diskgroup DATA add
- FAILGROUP aa disk '/dev/asm-aadata2'
- FAILGROUP bb disk '/dev/asm-bbdata2'
- rebalance power 111;
雙活的 ocr 磁盤組創(chuàng)建好之后需要將 OCR 和 votedisk 設(shè)備遷移至 OCR 磁盤中,命令如下:
- $ORACLE_HOME/bin/ocrconfig -add +OCR
- $ORACLE_HOME/bin/ocrconfig -delete +TMPOCR
- $ORACLE_HOME/bin/crsctl replace votedisk +OCR
- $ORACLE_HOME/bin/crsctl query css votedisk
- $ORACLE_HOME/bin/ocrcheck
將 ASM 實例的參數(shù)文件遷移到 asmspfile 至 OCR 磁盤組
- sqlplus / as sysasm
- SQL> create pfile='/tmp/pfile.ora' from spfile;
- SQL> create spfile='+OCR' from pfile='/tmp/pfile.ora';
ASM 實例的參數(shù)需要做如下設(shè)置(優(yōu)先讀本地磁盤組):
- alter system set asm_preferred_read_failure_groups='DATA.aa' sid='+ASM1' SCOPE=SPFILE;
- alter system set asm_preferred_read_failure_groups='DATA.bb' sid='+ASM2' SCOPE=SPFILE;
3.Oracle 存儲雙活性能測試
Oracle 雙活存儲安裝完畢之后需要重點做讀寫性能速度測試,在這里我們通過主機層的軟件和數(shù)據(jù)庫及的寫入速度測試:
① 主機層測試
這里我們采用 Orion 軟件分別在2個 RAC 節(jié)點上對兩塊異地測試盤做讀寫速度測試:(同樣塊大小,100%寫)
- /home/oracle/orion-run advanced -testname yt -num_disks 1 -size_small 64 -size_large 64 -typerand -write 100 -duration 20
測試結(jié)果如下:
- [oracle@ytaeplogdb1 test]$ cat yt_20171107_0255_trace.txt|grep bw
- ran (small): my 1 oth 0 iops 2490 size 64 K lat 0.40 ms bw = 155.64 MBps dur 19.91 s WRITE
- ran (small): my 2 oth 0 iops 4489 size 64 K lat 0.45 ms bw = 280.58 MBps dur 20.00 s WRITE
- ran (small): my 3 oth 0 iops 5699 size 64 K lat 0.53 ms bw = 356.19 MBps dur 20.00 s WRITE
- ran (small): my 4 oth 0 iops 4927 size 64 K lat 0.81 ms bw = 308.00 MBps dur 20.00 s WRITE
- ran (small): my 5 oth 0 iops 5099 size 64 K lat 0.98 ms bw = 318.70 MBps dur 19.99 s WRITE
然后再對比2個 RAC 節(jié)點分別測試2塊盤的寫速度
測試結(jié)果描述:因為 RAC1節(jié)點和 aa 的存儲在一個本地機房,RAC2 節(jié)點和 bb 存儲在一個機房,所以 RAC1 節(jié)點寫 aa 存儲的速度和 RAC2 節(jié)點寫 bb 存儲的速度都接近理想值 。但是 RAC1 存儲寫 bb 存儲和 RAC2 存儲寫 aa 存儲需要跨兩個機房之間定的光纖和傳輸網(wǎng)絡,實際速度根據(jù)兩個機房的距離,存儲光纖的信號傳輸速率,進而影響 Orin 寫入速率,通過上表我們可以看出跨光纖距離為理想值的50%左右,而且兩端的寫入速度比較對稱(從 RAC 寫入到 bb 和從 RAC2 寫入到 aa 的速度)。
② 數(shù)據(jù)庫層測試
數(shù)據(jù)庫層的測試主要是在2個 RAC 節(jié)點對兩個異地機房的磁盤模擬插入數(shù)據(jù)測試,詳細測試方案如下:
創(chuàng)建2個磁盤組,分別為兩個異地機房的磁盤
- CREATE DISKGROUP AA external REDUNDANCY DISK '/dev/asm-aatest'
- ATTRIBUTE 'au_size'='1M', 'compatible.asm' = '11.2.0.4.0',
- 'compatible.rdbms' = '11.2', 'compatible.advm' = '11.2';
- CREATE DISKGROUP BB external REDUNDANCY DISK '/dev/asm-bbtest'
- ATTRIBUTE 'au_size'='1M', 'compatible.asm' = '11.2.0.4.0',
- 'compatible.rdbms' = '11.2', 'compatible.advm' = '11.2';
創(chuàng)建2個表空間,datafile 分別為兩個機房的磁盤組
- Create tablespace aa datafile ' +AA' size 30g;
- Create tablespace bb datafile ' +BB' size 30g;
模擬創(chuàng)建一個 10G 的表,分別再 RAC 的兩個節(jié)點上寫兩個磁盤組,并測試速度(因為 Redo 在 Data 磁盤組上,data 磁盤組跨兩個異地存儲節(jié)點,這里我們測試需要繞過 Redo,直接寫在對應磁盤組上,這里我們用 create table as 測試寫入速度,(繞過 Redo 直接測試寫到某個磁盤)
- Rac1 節(jié)點執(zhí)行:
- Create table a1 tablespace aa as select * from test;
- Create table b1 tablespace bb as select * from test;
- Rac2 節(jié)點執(zhí)行:
- Create table a2 tablespace aa as select * from test;
- Create table b2 tablespace bb as select * from test;
測試結(jié)果如下:
通過數(shù)據(jù)庫級的插入速度測試要盡量接近 Oracle 的寫入速度為***,如果上述測試的速度嚴重低于 orion 測試速度,或者某個鏈路的測試速度比預估值低很多,這時候我們就需要聯(lián)系主機存儲或者光纖鏈路負責人員進行原因排查和問題定位,盡量在系統(tǒng)上線之前解決問題,避免出現(xiàn)系統(tǒng)上線之后因?qū)懭胨俣嚷龑е聰?shù)據(jù)庫性能嚴重下降的問題。
4.Oracle 存儲雙活高可用測試及故障處理
如果兩個異地機房的存儲中有個一個存儲出現(xiàn)故障,則會出現(xiàn)如下報錯,這時候 ASM 磁盤組狀態(tài)會變成 UNKNOWN 狀態(tài),這時候需要存儲工程師修復好磁盤,鏈路或者磁盤修復好之后需要對磁盤進行 dd 操作,因為和正常盤數(shù)據(jù)出現(xiàn)不一致,命令如下:
- dd if=/dev/zeroof=/dev/asm-bbdata bs=8k count=2000
刪除 UNKNOWN 狀態(tài)的磁盤
- alter diskgroupDATA drop disk DATA_0001 FORCE;
添加新的磁盤
- alter diskgroup dataadd FAILGROUP bb disk '/dev/asm-bbdata' rebalance power 111;
如果出現(xiàn)問題的是仲裁存儲這時候我們的操作步驟如下:
- alter diskgroupOCR drop QUORUM disk OCR_0004 FORCE;
添加新的磁盤
- alter diskgroupocr add QUORUM FAILGROUP RZ disk'/dev/asm-zcocr' rebalance power 1;
添加好 ocr 磁盤組之后需要檢查 ocr 磁盤的狀態(tài)
- [grid@ytaeplogdb1~]$ crsctl query css votedisk
- ## STATE File Universal Id File Name Disk group
- -- ----- ----------------- --------- ---------
- 1. ONLINE a7af9b05365e4f1ebfe22a8bf6ee06a0 (/dev/asm-bbocr) [OCR]
- 2. ONLINE 65f9bba630ac4f21bf12a84ae761e660 (/dev/asm-zcocr) [OCR]
- 3. ONLINE 140f879fc7524fe0bffc464f9a5730cf (/dev/asm-aaocr) [OCR]
5.總結(jié)
上文中提到仲裁存儲節(jié)點,仲裁存儲節(jié)點***放在第三地的中心機房,如果有些客戶沒有第三地機房,***單獨劃分一個存儲。
Oracle 雙活存儲方案和存儲廠商的雙活方案(如 EMC 的 Vplex)對比有更大的靈活性,透明性,因為底層的存儲磁盤對于 Oracle 來說完全可見,而且通過 Oracle 的 Normal 磁盤組的功能實現(xiàn),大大節(jié)省成本。
如果存在性能問題時重點關(guān)注 AWR 報告中存儲的延時情況。
無論是 Oracle 的雙活存儲還是存儲廠商的雙活解決方案,均適用于兩個存儲機房距離小于 50 公里的情況,而且***的瓶頸在于遠端的存儲節(jié)點寫入速度,因此在部署雙活存儲方案時,提前做好底層的磁盤寫入速度測試,同時在應用上做部署優(yōu)化盡量減小 Oracle 的寫入操作,才能達到數(shù)據(jù)庫的***性能。
任小闖
云和恩墨交付技術(shù)顧問,6年以上數(shù)據(jù)庫開發(fā)維護工作經(jīng)歷,Oracle 10g OCM,Oracle 11g OCP,曾就職于某互聯(lián)網(wǎng)行業(yè)任數(shù)據(jù)庫的設(shè)計和開發(fā)優(yōu)化,現(xiàn)任某省移動運營商負責數(shù)據(jù)庫的維護和交付工作。 擅長數(shù)據(jù)庫的日常維護,設(shè)計開發(fā),故障診斷,數(shù)據(jù)遷移,性能調(diào)優(yōu)等工作。