VXVM綜述

1. Create VG/LV by vxvm(過程樣例)

a. 在OceanStor上創建LUN,並mapping

b. 用root登錄主機,執行下面命令:

   1) hot_add

vxdisk scandisks

   2) vxdisk -o alldgs list(或者vxdisk list)

   3) 新增的盤處在offline狀態,則執行vxdisksetup –if sdb

4) vxdg init vgscp vgscp_1=sdb  //創建VG

5) vxassist -g vgscp -U fsgen make lvscp 10G vgscp_1 //創建LV

6) mkfs.vxfs /dev/vx/dsk/vgscp/lvscp //創建文件系統

7) mkdir /tellin/tellinapp     //創建掛接點

8) mount.vxfs /dev/vx/dsk/vgscp/lvscp /tellin/tellinapp //掛載文件系統

9) df –h    //檢查文件是否掛接成功

10) umount /dev/vx/dsk/vgscp/lvscp  //去掛載文件系統

11) vxvol -g vgscp stopall    //去激活

12) vxdg deport vgscp  //導出VG

c. 用root登錄備機,執行下面命令

1) vxdg import vgscp    //導入VG

2) vxvol -g vgscp startall     //激活VG

3) mkdir /tellin/tellinapp     //創建掛接點

4) mount.vxfs /dev/vx/dsk/vgscp/lvscp /tellin/tellinapp //掛載文件系統

5) umount /dev/vx/dsk/vgscp/lvscp    //去掛載文件系統

6) vxvol -g vgscp stopall      //去激活

7) vxdg deport vgscp    //導出VG

d. 用root登陸主機,執行下面命令

1) vxdg import vgscp    //導入VG

2) vxvol -g vgscp startall     //激活VG

3) mount.vxfs /dev/vx/dsk/vgscp/lvscp /tellin/tellinapp //掛接文件系統

2. 掛VG(枚舉樣例)

//掛載所有的VG,枚舉全部

a. vxdg import vgora  //導入VG

vxvol -g vgora startall    //激活VG

b. vxdg import vgopt

vxvol -g vgopt startall

c. vxdg import vgphydb

vxvol -g vgphydb startall

d. vxdg import vguoa

vxvol -g vguoa startall

e. vxdg import vgsee

vxdg -g vgsee startall

3. LV is corrupted

mount /dev/vg02/vol2 /mnt/vg02/vol2

UX:vxfs mount: ERROR: V-3-21268: /dev/vg02/vol2 is corrupted. needs checking

fsck -F vxfs -y -o full /dev/vg00/lvol2

 

 

 

 

 

 

命令詳述見下面

步驟

命令

說明

檢查磁盤狀態

vxdisk -e list

 

檢查磁盤組狀態

vxdg

 

 

see01_a:/usr/lib/vxvm/bin # ./vxdiskunsetup sdg

 

 

/etc/vx/bin/vxreattach -c sde

檢查掛接磁盤操作是否可行

啓動vxvm守護進程

/usr/lib/vxvm/bin # vxdctl enable

重新掃描設備列表,重新掛接磁盤vxdg –Cf import dg

 

用vxdisk list命令察看,如果看到上述硬盤爲error,可以用下述命令使其online:

# ./vxdisksetup c2t0d0

如果不是error

如果對磁盤使用vxdiskunsetup和vxdisksetup,並指定與配置備份中不同的屬性,可能會損壞公共區域和其中的所有用戶數據。

運行使硬盤在線的命令

# vxdisk online sdb

磁盤組如果不是online狀態,不能重新建立磁盤組

顯示卷的可訪問性和可用性信息

see01_a:~ # vxinfo -g vgsee

lvcdr          fsgen    Startable

vg_name_srl    fsgen    Startable

 

 

see01_a:~ # vxinfo -p -g vgsee

vol  lvcdr          fsgen    Startable

plex lvcdr-01       CLEAN

vol  vg_name_srl    fsgen    Startable

plex vg_name_srl-01 CLEAN

 

Plex狀態轉換

vxinfo –p –g vgsee

vxmend -o force -g vgsee off lvcdr-01

vxmend -o force -g vgsee on lvcdr-01

vxmend -o force -g vgsee fix active lvcdr-01

 

文件系統不使用

see01_a:~ # mount

see01_a:/dev/vx/rdsk # fuser /dev/vx/rdsk/vgora/*

/dev/vx/rdsk/vgora/lvctl1: 22761 22765 22769 23777

/dev/vx/rdsk/vgora/lvctl2: 22761 22765 22769 23777

/dev/vx/rdsk/vgora/lvctl3: 22761 22765 22769 23777

 

/dev/vx/rdsk/vgora/lvredo1: 22765see01_a:/app # umount /home/oracle/flashback/

# vxvol -g vgrbi stopall

see01_a:/app # vxdg deport vgopt

see01_a:~ # umount /home/see/rbirun

see01_a:~ # umount /home/see/recode

 

 

 

執行mount命令之前需要激活 vxvol  -g vgphydb startall

 

 

激活以後數據庫才能啓動

 

mount.vxfs /dev/vx/dsk/vgopt/lvarchive /home/oracle/archive

 

 

 

 

重建磁盤組

將磁盤陣列所屬的C2T22D0S2作爲HOT-SPARE磁盤

# vxedit set spare=on sybased05

其中sybased05是C2T22D0S2的名字,它是在建立磁盤組時自動取的名字

 

注意:在建立raid5卷時,不能選取hot-spare盤,即不能使用上面的syabsed05,也就是C2T22D0S2這塊盤

 

建卷

see01_a:/etc # vxassist -g vgsee make vgsee 10G

 

 

# vxassist –g sybasedg make datadev00 2g layout=raid5 sybased01 sybased02 syabsed03

sybased04 sybased06

 

vxassist -g datadg make vol1 500g

 

基礎知識

VxVM & 本地磁盤

Veritas Volume Manager(VxVM)提供了一個在線數據存儲管理基礎,給系統盤和數據盤做本地的鏡像和其它RAID功能,並可在線改變Volume的大小。

將物理磁盤置於VxVM控制之下,即在物理對象和VxVM對象之間建立了關係。

Volume Manager的對象:物理對象和虛擬對象(VxVM對象)

物理對象:Physical Disk à VM Disk àsub disk

虛擬對象:Subdisks à Plexes àVolumesàDisk Groups(將VM Disk劃入到Disk Group中///當一個主機系統上安裝了VxVM軟件後,我們必需將VM Disk劃入到Disk Group中,另外再在Disk Group上創建一些邏輯卷,來達到VxVM控制物理磁盤的目的。

(1.VM Disk由VxVM控制並組成磁盤組 2.一個或多個Subdisk組成Plex 3.一個卷由一個或多個Plex組成)

1.    安裝VxVM

2.    物理磁盤置於VxVM管理之下,成爲VM disk(將VM磁盤組成磁盤組)

3.    劃入Disk Group

4.    劃分LV

若要將物理磁盤置於VxVM控制之下,磁盤一定不能受LVM控制。

VVR

Veritas Volume Replicator(VVR)是一款優秀的異地備份軟件,提供數據中心和容災備點的數據庫和應用數據的複製。

VxVM & VVR結合

如果把VxVM和VVR集成在一起,就可通過IP網絡將卷組複製到安全區域。

 

VM Disks

一個VM Disk至少應該包含一個分區

一個VM Disk通常分爲兩個部分

Subdisks

Plex由分佈在一個或多個磁盤上的一個或多個SubDisk組成,通常有三種方法可以將SubDisk組成Plex:串聯、RAID 0、RAID 5。

Disk Groups

一個磁盤組由一個或多個VM disk組成。缺省的磁盤組名叫rootdg。用戶可以增加新的磁盤組。一個卷必須建立在一個磁盤組之內。一個磁盤組內的多個VM disk有相同的配置信息。

Plexes

CLEAN(off,on)->STALE(fix active)->active

OFFLINE(on)->ON

參見前文命令

Volumes

一個卷由一個或多個Plex組成,每一個Plex保存一份相同數據的拷貝。一個卷最多可以有32個Plexes。一個卷內所有的Plexes必須屬於同一個磁盤組。卷通常被命名爲VOL##,而其中的Plex通常被命名爲VOL##-##。

此次遇到一個奇怪的問題是:當1號機正在使用磁盤組,2號機只要重新啓動,並且執行vxdg import sybasedg命令,則兩臺機器上都能看到磁盤組,由於雙方發生了資源爭搶現象,很容易導致磁盤組被破壞,我曾經因爲這個問題將磁盤組建了n次,數據庫安裝n次,由於磁盤組毀壞,所以整個數據庫也被破壞,後來在啓動時增加了一個控制文件,過程如下:

# cd /

#cd /etc/rcS.d

#vi S98vxvm

內容爲:

    echo “stop sybasedg”

    vxvol –g sybasedg stopall

    vxdg deport sybasedg

添加了上述文件後,系統每次啓動時自動將磁盤組deport出去,這裏好像是停止了vxvm的autoimport屬性,磁盤組不再被重新import。

 

dgdisable狀態的dg通常有幾種原因導致:

 

1) dg下的volume還在被使用的時候加-f參數強行deport dg(通常不是手工誤操作,而是發生故障時,數據庫Agent的退出代碼沒有退出乾淨,導致數據庫還在訪問volume裸設備或者應用Agent的退出代碼沒有退出乾淨導致文件系統沒有真正umount成功等情況,而VCS的servicegroup的offline操作執行到dg時就會offline失敗而調用clean操作,這個clean操作就會自動加-f參數強行deport dg,但還是會失敗,並且留下一個dgdisabled狀態),如果是這種情況,就需要通過lsof找到是那些進程還在訪問裸設備並kill之(針對使用裸設備的情況)或者cat /proc/mounts文件找到還在掛載的文件系統通過fuser -k -m mount_point殺掉在該文件系統上打開了文件的進程最後通過/opt/VRTSvcs/bin/vxumount -o force mount_point來強行卸載該文件系統(針對使用文件系統的情況),然後執行vxdg deport dgname和vxdg import dgname來恢復這個故障dg,執行vxvol -g dgname -o bg startall來激活該dg下所有的volume。通常這種情況下還需要執行fsck來檢查和恢復文件系統;

 

1.1) 之前有這麼一個場景,和第1個場景非常相像,不過是由於mount命令的配合問題和代碼上的不完備原因共同自動導致的:單板重啓時應用進程沒有關閉完全,導致重啓時文件系統其實是在活動狀況下而留下了需要執行fsck的標誌位。重啓後VCS自動執行online servicegroup操作,執行dg資源的online(dg import)成功,執行volume資源的online(volume start)也成功,但到了mount資源的online時,由於mount命令和mount.vxfs命令之間傳遞執行結果的缺陷,導致發生了mount命令輸出中顯示該文件系統沒有掛載但/proc/mounts文件裏卻顯示該文件系統已經掛載,而標準版本的mountagent代碼不能處理這種異常,online報失敗執行clean報成功,卻仍然留下了/proc/mounts文件裏的相應條目,這之後volume資源offline失敗,clean成功,繼續保留了/proc/mounts文件裏的條目,後面就和第1個場景一樣了,執行dg資源的offline失敗,clean也會失敗,因爲操作系統判斷該dg下的volume仍然處於打開狀態,clean裏的強行deport dg操作就會讓該dg留下dgdisabled的狀態。這個問題後來通過使用HWMountAgent(裏面增加了對這種異常的處理代碼確保這種需要做fsck的vxfs文件系統可以online成功,也增加了代碼確保由於其他異常導致出現mount命令輸出於/proc/mounts文件內容不一致時可以正常執行volume的offline/clean操作並去除/proc/mounts文件的相應條目)可以很好消除了;

 

2) I/O的訪問異常(通常是磁盤I/O訪問錯誤,比方說磁盤陣列掉電)導致運行期間VxVM直接將dg置爲dgdisable狀態,這種場景在恢復I/O後重啓就可以解決。如果要在線恢復,可以在I/O恢復後,執行和第1種場景一樣的恢復操作;

 

3) 極少見的情況是運行期間由於競爭讀寫導致vxfs文件核心metadata損壞而將文件系統置爲full+readonly+need full fsck狀態,引發servicegroup的故障offline。和第1.1個場景非常類似,標準版本的mountagent代碼對這種異常處理不完備,執行了clean後其實沒有完全成功,留下了/proc/mounts裏面的條目,卻認爲clean已經完成而沒有執行vxumount(這個命令可以對vxfs文件系統消除上述不一致),後面發生的就和第1.1場景完全一樣了。同樣,使用了HWMount後這種情況也可以正確消除;

 

針對你反饋的信息,第9塊單板比較大的可能是第1.1場景。

 

第5塊單板的情況我沒有看懂,第1次執行vxdisk list和vxdg list的輸出和第2次執行間你還執行了什麼操作導致狀態發生了變化?vxdisk list看到的auto error狀態意味着磁盤上的分區表格式完全不被VxVM識別或者是剛剛劃分的LUN,上面還完全沒有分區表等情況,這和auto:none online:invalid是很不同的,後者表明VxVM可以識別到這塊盤,只是在磁盤上沒有發現VxVM的私有區或者有效的私有區(比方說私有區和公有區的數據都完全沒被破壞,但是磁頭的某些標誌位被破壞導致VxVM不認可其實仍然可以恢復的私有區爲有效私有區);

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章