歡迎光臨
每天分享高質量文章

19C新特性:Voting Disk管理

點擊▲關註 “資料和雲”   給公眾號標星置頂

更多精彩 第一時間直達

為了及時共享行業案例,通告共性問題,達成知識共享和提前預防,我們整理和編輯了《雲和恩墨技術通訊》(3月刊),通過對過去一段時間的知識回顧和故障歸納,以期提供有價值的信息供大家參考。

同時,我們也希望能夠將熱點事件、新的產品特性及其他有價值的信息聚集起來,為您提供具有前瞻性的支持信息,保持對於當前最新的資料庫新聞和事件的瞭解,其中包括重要資料庫產品發佈、警報、更新、新版本、補丁等。 

本期目錄: 

新聞:2019年3月份資料庫流行度排行榜 

警示:ORA-600 16703註入攻擊分析 

預警:關於SCN問題需要在2019年6月前採取行動 

問題:多租戶ORA-600 krvrdccs60影響OGG複製 

經驗:ORACLE GC等待事件的發現、處理和預防 

頻發:Linux內核引數導致IP包重組失敗引起實體驅趕 

警示:Oracle 12.2因為BUG可能生成海量跟蹤檔案 

公告:雲和恩墨雲服務平臺【墨天輪】上線運行 

下載鏈接:https://cs.enmotech.com/docDownload/2762 

複製以上鏈接或者點擊“閱讀原文”搶先下載。

作者:李敏,雲和恩墨交付工程師

 

眾所周知,Oracle在一個機房內實現真正雙活的唯一方式是RAC,而如果這個機房出現整個機房的故障(比如機房斷電,油機忘了加油了,或者機房地震了,機房著火了,機房進水了等等),那麼,雙活也將不復存在。

 

為瞭解決這個問題,Oracle將RAC的範圍進行了擴大,原意是將RAC的節點們分佈在物理位置不同的機房,這樣一旦某個機房整個下線,其他機房的節點可以承擔起原來RAC該承擔的責任。願景很美好,原理也說得通。

 

但是,實現這個目的,有兩個關鍵的點,其中最需要考量的是多個機房之間的鏈路質量(儲存鏈路和大二層問題),這個超出本文討論的範圍。其次是,第三地表決。雙活裡面,除了兩個業務機房,還需要有第三個仲裁機構不屬於這兩個機房,來維持在極端情況下的正確選舉存活節點(站點)。

 

在雙活專案的實施里,大體有兩種方案,早前為此寫過一個片子,現在找不到了。大體是,一種是儲存來做,一種是主機層來做。儲存層來做的話,方案有很多,如EMC的vplex

metro,HDS的GAD等等。這些方案對DBA來說是非常友好的,因為雙活和第三地表決不由DBA來規劃和控制。第二種,主機層做的雙活(基於ASM),這部分除了鏈路DBA不能主導之外,剩下的,如faillure
group,3rd voting都是需要DBA來介入的。

 

本文只取其中一個部分,就是3rd voting,來闡述在19C extended rac下,第三地表決的管理。

 

環境說明,4節點RAC

 

對於第三地表決盤的選用,土豪家庭可以選擇在第三個機房單獨弄個儲存。一般家庭會在第三個機房放置一個NFS服務器,把NFS掛給所有的RAC節點,dd出一個檔案,當做第三地quorum盤。除了NFS的方案,也可以在第三地使用ISCSI服務器,從ISCSI服務器上map一個盤到所有RAC節點上,此方式跟NFS相比,我個人覺得ISCSI的方式更好,因為NFS中是一個檔案,考慮到NFS掛載,誤刪等等情況下,ISCSI更好。目前使用較多的是NFS。

 

根據Oracle官方白皮書《Oracle Clusterware 11g Release 2 (11.2) –Using standard
NFS to support a third voting file for extended cluster
configurations》中的方式,配置好NFS服務器,把檔案系統掛載到各個RAC節點之後。使用如下方式dd創建一個檔案當做第三地表決盤,註意,這裡dd出來的檔案,會被ASM當做一個member磁盤來使用。區分這裡的voting
disk 和voting file的區別。

 

在我的環境的初始安裝中,我並沒有配置NFS,使用Normal的冗餘方式,從Site 1和Site 2中選了3塊盤,做一個OCRC1的磁盤組來放置OCR和Voting file。做好了之後效果是下麵這樣的:

[[email protected] ~]$ ocrcheck
Status of Oracle Cluster Registry is as follows :
         Version                  :          4
         Total space (kbytes)     :     491684
         Used space (kbytes)      :      84756
         Available space (kbytes) :     406928
         ID                       : 1234425375
         Device/File Name         :     +OCRC1
                                    Device/File integrity check succeeded

                                    Device/File not configured

                                    Device/File not configured

                                    Device/File not configured

                                    Device/File not configured

         Cluster registry integrity check succeeded

         Logical corruption check bypassed due to non-privileged user

[[email protected] ~]$ 

 

[[email protected] vote3nd]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   0f6da8ca07774f84bf4f3b118a754d52 (/dev/mapper/s1ocr01) [OCRC1]
 2. ONLINE   3af408a91eb74fcbbf83a4a38b77d064 (/dev/mapper/s2ocr07) [OCRC1]
 3. ONLINE   3921fae437694f05bf27f01e5adbce99 (/dev/mapper/s1ocr04) [OCRC1]

 

註意,這三個Voting
disk都是來自儲存上的LUN。s1和s2是兩個站點,可以看到有兩個盤來自s1,這樣有違雙活的設計目的,因為一旦s1站點的兩個voting
disk都掉了,那整個RAC集群都會失效。所以,只能在s1,s2,以及第三個站點上,各放置一個voting disk。下麵就來做這個事情。

 

首先,我們先在NFS上,dd創建一個500M的檔案當做voting disk:

dd if=/dev/zero of=/vote3nd/vote_nfs_3 bs=1M count=500

 

然後,嘗試向集群中添加,我以為會成功,事實上是不行的。

 

[[email protected] ~]# /u01/app/19.2.0.1/grid/bin/crsctl add css votedisk /vote3nd/vote_nfs_3

CRS-4258: Addition and deletion of voting files are not allowed because the voting files are on ASM

 

這裡提示的是如果voting file在ASM上的話,是不允許用add的方式添加的。Oracle的引文中的意思是當前冗餘度已經交由ASM來管理。同樣,刪除也是不行。

[[email protected] ~]$ crsctl delete css votedisk 0f6da8ca07774f84bf4f3b118a754d52
CRS-4258: Addition and deletion of voting files are not allowed because the voting files are on ASM

 

此後,準備用replace的方式來嘗試將ASM上的voting全部替換到共享檔案系統上,顯然,也是不行的。

[[email protected] vote3nd]$ /u01/app/19.2.0.1/grid/bin/crsctl replace votedisk  /vote3nd/vote_nfs_3

Now formatting voting disk: /vote3nd/vote_nfs_3.
CRS-4601Failed to initialize voting file /vote3nd/vote_nfs_3.
CRS-4628Change to configuration failed, but was successfully rolled back.
CRS-4000: Command Replace failedor completed with errors.

 

所以,對於要把dd出來的檔案當做一個磁盤的時候,必須把這個檔案添加進ASM磁盤組才行。註意,這裡需要修改asm的disk string,不然添加會報錯。

 

這裡我有一個誤區,我以為像在cfs上放置ocr一樣,需要事先把這個檔案dd或者touch出來,事實上,voting放到cfs上是不需要創建這個檔案的。

 

下麵是修改string之前的報錯,修改之後,這個檔案可以被加進ASM磁盤組。

SQL> alter diskgroup OCRC1 add quorum failgroup FGQ DISK '/vote3nd/vote_nfs_3';
alter diskgroup OCRC1 add quorum failgroup FGQ DISK '/vote3nd/vote_nfs_3'
*
ERROR at line 1:
ORA-15032not all alterations performed
ORA-15031: disk specification '/vote3nd/vote_nfs_3' matches no disks
ORA-15014: path '/vote3nd/vote_nfs_3' is not in the discovery set

 

在完成這個盤的添加操作和簡單梳理之後,新的voting disk構成如下:

[[email protected] ~]$ crsctl query css votedisk
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   0f6da8ca07774f84bf4f3b118a754d52 (/dev/mapper/s1ocr01) [OCRC1]
 2. ONLINE   ded2df4f62df4f91bf9a5028ecaa4c5b (/vote3nd/vote_nfs_3) [OCRC1]
 3. ONLINE   8917739853ce4fa3bf30d120235d0131 (/dev/mapper/s2ocr05) [OCRC1]
Located 3 voting disk(s).

 

滿足三地的基本需求。

在RAC的設計中,3塊voting disk是允許壞一塊的,壞一個的情況下,不影響集群穩定性。這裡測試將NFS服務器關閉,來觀察GI在這種情況下的動作。

[[email protected] ~]service nfs stop 
Shutting down NFS daemon:                                  [  OK  ]
Shutting down NFS mountd:                                  [  OK  ]
Shutting down NFS quotas:                                  [  OK  ]
Shutting down NFS services:                                [  OK  ]
[[email protected] ~]# 

 

我個人不喜歡NFS的另一個主要原因是,這個時候,NFS關閉了,其他主機執行df -h等命令是會hang住的。並且umount /vote3rd也是hang住的(需要強制卸載這個掛載點,主機才能響應重啟命令,不然會一直掛起)。

 

命令列hang住

 

此時查詢voting disk的情況如下,可以看到有個voting disk下線了,集群狀態正常。

[[email protected] ~]$ crsctl query css votedisk  
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   0f6da8ca07774f84bf4f3b118a754d52 (/dev/mapper/s1ocr01) [OCRC1]
 2. OFFLINE  ded2df4f62df4f91bf9a5028ecaa4c5b (/vote3nd/vote_nfs_3) [OCRC1]
 3. ONLINE   8917739853ce4fa3bf30d120235d0131 (/dev/mapper/s2ocr05) [OCRC1]
Located 3 voting disk(s).

在集群的日誌中,有如下信息:

2019-03-18 12:02:37.032 [OCSSD(6654)]CRS-1615: No I/O has completed after 50of the maximum interval. If this persists, voting file /vote3nd/vote_nfs_3 will be considered not functional in 99940 milliseconds.

2019-03-18 12:03:27.038 [OCSSD(6654)]CRS-1614: No I/O has completed after 75of the maximum interval. If this persists, voting file /vote3nd/vote_nfs_3 will be considered not functional in 49930 milliseconds.

2019-03-18 12:03:57.051 [OCSSD(6654)]CRS-1613: No I/O has completed after 90of the maximum interval. If this persists, voting file /vote3nd/vote_nfs_3 will be considered not functional in 19920 milliseconds.

2019-03-18 12:04:17.079 [OCSSD(6654)]CRS-1604: CSSD voting file is offline: /vote3nd/vote_nfs_3; details at (:CSSNM00058:) in /u01/app/grid/diag/crs/extended01/crs/trace/ocssd.trc.
2019-03-18 12:04:17.080 [OCSSD(6654)]CRS-1672: The number of voting files currently available 2 has fallen to the minimum number of voting files required 2. Further reduction in voting files will result in eviction and loss of functionality

日誌也顯示,目前只有2塊voting disk,並且這是維持集群狀態最少數量就是2。這個時候再減少voting disk,整個集群就會整個癱瘓。

 

在NFS服務器啟動之後,事實上,有些時候,3rd voting disk是不會重新上線的。必須要在節點上,umount -l 再重新mount這個NFS目錄才可以讓第三個表決盤重新上線。

2019-03-18 12:13:00.052 [OCSSD(6654)]CRS-1605: CSSD voting file is online: /vote3nd/vote_nfs_3; details in /u01/app/grid/diag/crs/extended01/crs/trace/ocssd.trc.
[[email protected] ~]$  crsctl query css votedisk 
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   0f6da8ca07774f84bf4f3b118a754d52 (/dev/mapper/s1ocr01) [OCRC1]
 2. ONLINE   ded2df4f62df4f91bf9a5028ecaa4c5b (/vote3nd/vote_nfs_3) [OCRC1]
 3. ONLINE   8917739853ce4fa3bf30d120235d0131 (/dev/mapper/s2ocr05) [OCRC1]
Located 3 voting disk(s).

到這裡,基本上常規的操作就差不多了。但是,如果有這樣的需求,比如將所有的voting disk全部從ASM移動到cluster
filesystem或者從cluster filesystem移動到ASM該怎麼做呢?事實上,如開始測試的那樣,對於已經在ASM上有voting
disk,是不可以通過add 方式來添加voting file到檔案系統上的。

 

如前文所說我這裡有個誤區,我以為要事先dd準備好檔案。事實是不需要的。直接指定名字,replace即可。那個檔案是replace的時候,css自己去格式化和創建的。

[[email protected] vote3nd]$ ls -lrt
total 512020
drwx------ 2 grid oinstall     16384 Mar 16 12:33 lost+found
-rw-rw---- 1 grid oinstall 524288000 Mar 18 13:14 vote_nfs_3
[[email protected] vote3nd]$ crsctl query css votedisk 
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   719a3e0d02cc4f9ebf15b3fb93eefae6 (/dev/mapper/s1ocr01) [OCRC1]
 2. ONLINE   6eb9cd75dd3f4fb0bf10bc5b1a0622bc (/dev/mapper/s2ocr05) [OCRC1]
 3. ONLINE   d313f9f412954f0dbf10b867f99004a9 (/vote3nd/vote_nfs_3) [OCRC1]
Located 3 voting disk(s).
[[email protected] vote3nd]$ crsctl replace votedisk /vote3nd/vote_nfs_1
Now formatting voting disk: /vote3nd/vote_nfs_1.
CRS-4256: Updating the profile
Successful addition of voting disk 43d23d3dccd44f96bfc9bf1af3e11491.
Successful deletion of voting disk 719a3e0d02cc4f9ebf15b3fb93eefae6.
Successful deletion of voting disk 6eb9cd75dd3f4fb0bf10bc5b1a0622bc.
Successful deletion of voting disk d313f9f412954f0dbf10b867f99004a9.
CRS-4256: Updating the profile
CRS-4266: Voting file(s) successfully replaced
[[email protected] vote3nd]$ ls -lrt 
total 532500
drwx------ 2 grid oinstall     16384 Mar 16 12:33 lost+found
-rw-rw---- 1 grid oinstall 524288000 Mar 18 13:15 vote_nfs_3
-rw-r----- 1 grid oinstall  20972032 Mar 18 13:15 vote_nfs_1
[[email protected] vote3nd]$ crsctl query css votedisk 
##  STATE    File Universal Id                File Name Disk group
--  -----    -----------------                --------- ---------
 1. ONLINE   43d23d3dccd44f96bfc9bf1af3e11491 (/vote3nd/vote_nfs_1) []
Located 1 voting disk(s).
[[email protected] vote3nd]$ crsctl replace votedisk +OCRC1
CRS-4256: Updating the profile
Successful addition of voting disk 82cf4c6cbf354fd5bf07327a6744ec04.
Successful addition of voting disk a50370fa387d4fcabf6e89e2b1e652e4.
Successful addition of voting disk f9ee438278394f7bbf7e504943990bd5.
Successful deletion of voting disk 43d23d3dccd44f96bfc9bf1af3e11491.
Successfully replaced voting disk group with +OCRC1.
CRS-4256: Updating the profile
CRS-4266: Voting file(s) successfully replaced

 

這裡的vote_nfs_3是一個asm disk是一個voting disk,vote_nfs_1是一個voting file。可通過kfed看出。

vote_nfs_3:

[[email protected] vote3nd]$ kfed read /vote3nd/vote_nfs_3 
kfbh.endian:                          1 ; 0x000: 0x01
kfbh.hard:                          130 ; 0x001: 0x82
kfbh.type:                            1 ; 0x002: KFBTYP_DISKHEAD
kfbh.datfmt:                          1 ; 0x003: 0x01
kfbh.block.blk:                       0 ; 0x004: blk=0
kfbh.block.obj:              2147483657 ; 0x008: disk=9
kfbh.check:                  1521144041 ; 0x00c: 0x5aaad0e9
kfbh.fcn.base:                    20771 ; 0x010: 0x00005123
kfbh.fcn.wrap:                        0 ; 0x014: 0x00000000
kfbh.spare1:                          0 ; 0x018: 0x00000000
kfbh.spare2:                          0 ; 0x01c: 0x00000000
kfdhdb.driver.provstr:         ORCLDISK ; 0x000: length=8
kfdhdb.driver.reserved[0]:            0 ; 0x008: 0x00000000
kfdhdb.driver.reserved[1]:            0 ; 0x00c: 0x00000000
kfdhdb.driver.reserved[2]:            0 ; 0x010: 0x00000000
kfdhdb.driver.reserved[3]:            0 ; 0x014: 0x00000000
kfdhdb.driver.reserved[4]:            0 ; 0x018: 0x00000000
kfdhdb.driver.reserved[5]:            0 ; 0x01c: 0x00000000
kfdhdb.compat:                318767104 ; 0x020: 0x13000000
kfdhdb.dsknum:                        9 ; 0x024: 0x0009
kfdhdb.grptyp:                        2 ; 0x026: KFDGTP_NORMAL
kfdhdb.hdrsts:                        3 ; 0x027: KFDHDR_MEMBER

vote_nfs_1:

[[email protected]ded04 vote3nd]$ kfed read /vote3nd/vote_nfs_1
kfbh.endian:                          0 ; 0x000: 0x00
kfbh.hard:                           34 ; 0x001: 0x22
kfbh.type:                            0 ; 0x002: KFBTYP_INVALID
kfbh.datfmt:                          0 ; 0x003: 0x00
kfbh.block.blk:              4290772992 ; 0x004: blk=2143289344 (indirect)
kfbh.block.obj:                       0 ; 0x008: file=0
kfbh.check:                           0 ; 0x00c: 0x00000000
kfbh.fcn.base:                        0 ; 0x010: 0x00000000
kfbh.fcn.wrap:                      512 ; 0x014: 0x00000200
kfbh.spare1:                      40960 ; 0x018: 0x0000a000
kfbh.spare2:                 2054913149 ; 0x01c: 0x7a7b7c7d

原創:李敏

赞(0)

分享創造快樂