歡迎您光臨本站 註冊首頁

Blade 和外部存儲:設置一個容錯環境

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
要想用 IBM® blade 構建高可用的 Linux® 伺服器環境,首先需要在 blade 和任何外部存儲之間設置一個容錯的環境。這可以提供冗餘並啟用多路徑。在本文中,學習如何集成一個基於 x86 的 IBM BladeCenter® 伺服器和外部 IBM BladeCenter Boot Disk System (DS3200) SAS 存儲,這是實現可靠的 Linux/blade 伺服器環境的重要的前提條件。還討論一些 Linux Volume Manager 的 “hot-add” 特性,幫助滿足不斷增加的存儲系統需求。

本文介紹如何使用 IBM BladeCenter-H 以及基於 x86 的 BladeCenter HS21 和 LS21 從 SAS 存儲(在這裡是 IBM System Storage DS3200)進行引導。(對於 BladeCenter-E,請查閱 參考資料 中的 blade 兼容性表格,了解是否支持您的環境)。本文還講解如何在 Linux 中啟用多路徑。多路徑或多路徑 I/O 是一種容錯和性能改進技術,它在 CPU 和它的大規模存儲設備之間建立多個物理路徑。例如,一個 SCSI 磁碟連接同一計算機上兩個 SCSI 控制器,或者一個磁碟連接兩個 Fibre Channel 埠。

只使用外部存儲的主要優點是提高伺服器的可用性。儘管可以只使用 blade 中的本地磁碟配置不同的 RAID 級,但是必須關閉系統才能替換出故障的驅動器。通過使用外部存儲和熱交換驅動器,無需中斷服務也可以替換出故障的驅動器。最近,IBM 發布了 blade 伺服器 BladeCenter HS12 和 JS12 伺服器,它們支持熱交換 SAS 驅動器,但是它們都是單處理器機器。

下面是六個步驟:

  1. 準備 BladeCenter 伺服器並收集 SAS 模塊和 DS3200 的相關信息。
  2. 準備存儲子系統。
  3. 配置 SAS BIOS。
  4. 安裝操作系統。
  5. 啟用多路徑。
  6. 用更多的 LUN 擴展文件系統。

步驟 1:準備 BladeCenter 伺服器並收集信息

一定要正確地安裝 SAS Switching Modules 並連接到兩個 DS3200 控制器。應該假設控制器 A(從機器背面看,在左邊)連接到 bay 3 中的 SAS 交換機,控制器 B 連接到 bay 4 中的 SAS 交換機。線纜插入哪個埠都沒關係,只要不修改 BladeCenter Management Module 中的默認分區(zoning),每個 blade 都可以訪問所有外部埠。

在默認情況下,所有外部埠都是禁用的。可以以兩種方式啟用它們 —— 通過 Web 或命令行界面。

通過 Web 界面。登錄到 Management Module 的 Web 界面,單擊左邊 I/O Module 部分中的 Admin/Power/Restart。選擇第三個 I/O 模塊,啟用外部埠,單擊右邊的 Save 按鈕。


圖 1. 啟用外部埠

通過命令行界面。通過 telnet 或 SSH 登錄 Management Module。執行以下命令:


清單 1. 啟用外部交換機埠
				  system> ifconfig -ep enabled -T switch[3]  system> ifconfig -ep enabled -T switch[4]  

這會啟用 bay 3 和 4 中兩個 SAS 交換機的外部埠。

為了把存儲分區映射到 blade,需要 SAS 子卡的 WWN (world wide name)。此名稱在 SAS 域中惟一地定義介面。通過 Web 或命令行收集 WWN。

通過 Web 界面。在 Management Module Web 界面中,單擊左邊面板中的 Hardware VPD。


圖 2. 收集 SAS WWN

通過命令行界面。通過 telnet 或 SSH 登錄 Management Module。可以用 list -l 2 列出可用的 blade。執行以下命令可以在列表中包含安裝的子卡:


清單 2. 獲取詳細的設備信息
				  system> list -l 3  

對 blade 插槽(在此示例中是插槽 4)的子卡執行 info 以收集 WWN。


清單 3. 獲取 SAS WWN
				  system> info -T blade[4]:exp[1]    Manufacturer: LSI (Not Available)  Manufacturer ID: 20301  Product ID: 118  Mach type/model: SAS Expansion Option  Mach serial number: Not Available  Manuf date: 02/08  Hardware rev: 3  Part no.: 39Y9187  FRU no.: 39Y9188  FRU serial no.: YK105481E006  CLEI: Not Available  SAS ID 1: 50:00:62:b0:00:0b:26:24  SAS ID 2: 50:00:62:b0:00:0b:26:25  SAS ID 3: Not Available  SAS ID 4: Not Available  SAS ID 5: Not Available  SAS ID 6: Not Available  SAS ID 7: Not Available  SAS ID 8: Not Available  MAC Address 1: Not Available  MAC Address 2: Not Available  MAC Address 3: Not Available  MAC Address 4: Not Available  MAC Address 5: Not Available  MAC Address 6: Not Available  MAC Address 7: Not Available  MAC Address 8: Not Available  

SAS ID 1 和 SAS ID 2 顯示埠 1(映射到交換機 bay 3)和埠 2(映射到交換機 bay 4)的 WWN。





步驟 2:準備存儲子系統

定義存儲單元並作為 LUN 映射到 blade。(邏輯單元號是分配給邏輯單元的數字。邏輯單元是一個 SCSI 協議實體,可以通過實際的 I/O 操作訪問它們)。可以使用 DS3000 Storage Manager 或 DS4000 Storage Manager 軟體。通過 Configure 選項卡進行初始配置;通過 Modify 選項卡進行修改。


圖 3. DS3000 Storage Manager

在 Storage Manager 中,可以通過 Configure Host Access (Manual) 定義 blade 並把兩個 SAS 子卡的 WWN 與 blade 關聯起來。一定要選擇 LNXCLVMWARE 主機類型。這會禁用 AVT (Automatic Volume Transfer),在 Linux 上使用 RDAC 驅動程序時這是必需的。

現在,通過 Create Logical Drives 菜單為 blade 分配一些存儲。然後,通過 Create Host-to-Logical Drive Mappings 菜單把邏輯驅動器映射到 blade。一定要作為 LUN 0 映射(編號應該是連續的,一些環境在找到未使用的編號之後會停止掃描)。





步驟 3:配置 SAS BIOS

為了進行順利的安裝和從外部 SAS 存儲引導,需要確保 blade BIOS 和 SAS 子卡 BIOS 中的設置是正確的。最近發布的 x86 blade(2008 年年中)的默認設置即可正常工作;更早的版本可能需要做一些修改。

通過 LSI 配置實用程序檢查子卡是否已經啟用並包含在引導列表中,子卡最好是第一個引導設備。SAS1064 是子卡,SAS1064E 是這個 blade 的板上控制器。


圖 4. SAS BIOS 設置

另外,確保子卡屬性 Enabled BIOS & OS 的值是 Boot Support 並對所有 LUN 進行 BIOS 掃描。檢查的方法是選擇 Advanced Adapter Properties,然後選擇 Advanced Device Properties。如果不確定的話,就恢復默認設置。

在 blade BIOS 中,確保沒有禁用子卡插槽。


圖 5. Blade BIOS 設置

根據邏輯單元的首選路徑不同(控制器 A 或 B),可以把 hd0 或 hd1 設置為 blade 的第一個引導設備。如果像下面這樣在 Management Module 上設置:


清單 4. 為插槽 X 中的 blade 設置引導列表
				  system> bootseq hd0 hd1 -T blade[X]  

可能會產生一個錯誤 I9990301 Disk failure or disk reset failed,這時必須切換引導次序,讓 hd1 成為第一個引導設備。在我們的設置中,控制器 A 連接到 I/O bay 3,bay 3 映射到 hd0。控制器 B 連接到 I/O bay 4,bay 4 映射到 hd1。





步驟 4:安裝操作系統

關於 Fedora 的說明
在某些情況下,在外部 SAS 存儲上安裝時 Fedora 9 安裝過程會終止。使用文本模式安裝有助於解決這些情況。

Anaconda 使用設備映射器的多路徑特性自動探測冗餘路徑。第一個 LUN 映射到 /dev/mapper/mpath0。

在這種情況下,不需要額外的 RDAC 驅動程序。

在安裝 Red Hat Enterprise Linux 5.2 操作系統時,安裝程序會看到兩個設備 /dev/sda 和 /dev/sdb。儘管它們實際上代表相同的磁碟空間,但是安裝程序不了解路徑的冗餘性質,所以顯示相同的 LUN 兩次。這並不妨礙系統正常工作,因為只在 /dev/sda 上進行安裝。對於 /dev/sdb,會看到錯誤消息,可以按 cancel 忽略這些消息。


圖 6. 操作系統安裝錯誤

完成安裝之後,會出現關於 /dev/sdb 的 I/O 錯誤。檢查 dmesg 或查看 /var/log/messages。消除這些錯誤消息的惟一方法是安裝多路徑驅動程序。


清單 5. 由於缺少多路徑驅動程序導致的 I/O 錯誤
				  Jul  1 19:47:26 localhost kernel: Buffer I/O error on device sdb, logical block 13107184  Jul  1 19:47:26 localhost kernel: end_request: I/O error, dev sdb, sector 104857472  Jul  1 19:47:26 localhost kernel: Buffer I/O error on device sdb, logical block 13107184  Jul  1 19:47:27 localhost kernel: end_request: I/O error, dev sdb, sector 0  Jul  1 19:47:27 localhost kernel: Buffer I/O error on device sdb, logical block 0  Jul  1 19:47:27 localhost kernel: Buffer I/O error on device sdb, logical block 1  Jul  1 19:47:27 localhost kernel: Buffer I/O error on device sdb, logical block 2  Jul  1 19:47:27 localhost kernel: Buffer I/O error on device sdb, logical block 3  Jul  1 19:47:27 localhost kernel: end_request: I/O error, dev sdb, sector 0  Jul  1 19:47:28 localhost kernel: end_request: I/O error, dev sdb, sector 2  





步驟 5:啟用多路徑

在 Linux 上啟用多路徑有兩種方法 —— 使用 IBM/LSI 提供的官方 RDAC 驅動程序和設備映射器的開放源碼多路徑工具。此示例使用 LSI 網站上提供的 RDAC 驅動程序。

一定要安裝下面的包:

  • gcc
  • glibc-devel
  • kernel-headers
  • glibc-headers
  • libgomp
  • kernel-devel 或 kernel-xen-devel(如果使用啟用 Xen 的內核的話)

從 LSI 網站下載 RDAC 源代碼並在 /usr/src 中用 make && make install 命令編譯。

結束時會看到清單 6 所示的消息。


清單 6. LSI RDAC 驅動程序安裝
				  Checking Host Adapter Configuration...  Detected 2 LSI Host Adapter Port(s) on the system  Please wait while we modify the system configuration files.  Your kernel version is 2.6.18-92.el5xen  Preparing to install MPP driver against this kernel version...  Generating module dependencies...  Creating new MPP initrd image...          You must now edit your boot loader configuration file, /boot/grub/menu.lst, to           add a new boot menu, which uses mpp-2.6.18-92.el5xen.img as the initrd image.          Now Reboot the system for MPP to take effect.          The new boot menu entry should look something like this (note that it may           vary with different system configuration):            ...                            title Red Hat Linux (2.6.18-92.el5xen) with MPP support                  root (hd0,5)                  kernel /vmlinuz-2.6.18-92.el5xen ro root=LABEL=RH9                  initrd /mpp-2.6.18-92.el5xen.img          ...  MPP driver package has been successfully installed on your system.  

按照消息的說明,編輯 /boot/grub/grub.conf 以使用新的原始磁碟。對於運行啟用 Xen 的內核的 RHEL5.2 系統,做以下修改:


清單 7. 使用多路徑原始磁碟的 grub.conf
				  default=1  timeout=5  splashimage=(hd0,0)/grub/splash.xpm.gz  hiddenmenu  title Red Hat Enterprise Linux Server (2.6.18-92.el5xen)          root (hd0,0)          kernel /xen.gz-2.6.18-92.el5          module /vmlinuz-2.6.18-92.el5xen ro root=/dev/VolGroup00/LogVol00          module /initrd-2.6.18-92.el5xen.img    title Red Hat Enterprise Linux Server with MPP support (2.6.18-92.el5xen)          root (hd0,0)          kernel /xen.gz-2.6.18-92.el5          module /vmlinuz-2.6.18-92.el5xen ro root=/dev/VolGroup00/LogVol00          module /mpp-2.6.18-92.el5xen.img  

mppUtil -a(清單 8)顯示發現的所有陣列,在這裡只有一個名稱 Infra-sas2。


清單 8. 基本多路徑信息
				  [root@localhost ~]# mppUtil -a  Hostname    = localhost  Domainname  = (none)  Time        = GMT 07/01/2008 19:56:01     ---------------------------------------------------------------  Info of Array Module's seen by this Host.   ---------------------------------------------------------------  ID              WWN                               Name           ---------------------------------------------------------------   0      600a0b80002f746e0000000047d02718        Infra-sas2       ---------------------------------------------------------------  

如果需要基本 LUN 映射信息,可以執行 /opt/mpp/lsvdev:


清單 9. 基本 LUN 映射信息
				  [root@localhost ~]# /opt/mpp/lsvdev           Array Name      Lun    sd device          -------------------------------------          Infra-sas2      0     -> /dev/sda  

mppUtil -a [array name] 顯示此陣列的詳細信息:


清單 10. 詳細的多路徑信息
				  [root@localhost ~]# mppUtil -a Infra-sas2  Hostname    = localhost  Domainname  = (none)  Time        = GMT 07/01/2008 19:56:27     MPP Information:  ----------------        ModuleName: Infra-sas2                               SingleController: N   VirtualTargetID: 0x000                                       ScanTriggered: N       ObjectCount: 0x000                                          AVTEnabled: N               WWN: 600a0b80002f746e0000000047d02718               RestoreCfg: N      ModuleHandle: none                                        Page2CSubPage: Y   FirmwareVersion: 6.30.1.xx                                        ScanTaskState: 0x00000000      Controller 'A' Status:  -----------------------  ControllerHandle: none                                    ControllerPresent: Y      UTMLunExists: N                                                  Failed: N     NumberOfPaths: 1                                          FailoverInProg: N                                                                  ServiceMode: N        Path #1      ---------   DirectoryVertex: present                                           Present: Y         PathState: OPTIMAL                 hostId: 1, targetId: 0, channelId: 0           Controller 'B' Status:  -----------------------  ControllerHandle: none                                    ControllerPresent: Y      UTMLunExists: N                                                  Failed: N     NumberOfPaths: 1                                          FailoverInProg: N                                                                  ServiceMode: N        Path #1      ---------   DirectoryVertex: present                                           Present: Y         PathState: OPTIMAL                 hostId: 1, targetId: 1, channelId: 0           Lun Information  ---------------      Lun #0 - WWN: 600a0b8000369d3f00000775481870af      ----------------         LunObject: present                                 CurrentOwningPath: A    RemoveEligible: N                                          BootOwningPath: A     NotConfigured: N                                           PreferredPath: A          DevState: OPTIMAL                                   ReportedPresent: Y                                                              ReportedMissing: N                                                        NeedsReservationCheck: N                                                                    TASBitSet: Y                                                                     NotReady: N                                                                         Busy: N                                                                    Quiescent: N        Controller 'A' Path      --------------------     NumLunObjects: 1                                         RoundRobinIndex: 1           Path #1: LunPathDevice: present                                     IoCount: 0                         DevState: OPTIMAL                                    RemoveState: 0x0  StartState: 0x1  PowerState: 0x0        Controller 'B' Path      --------------------     NumLunObjects: 1                                         RoundRobinIndex: 0           Path #1: LunPathDevice: present                                     IoCount: 0                         DevState: OPTIMAL                                    RemoveState: 0x0  StartState: 0x1  PowerState: 0x0  

最後兩部分表明,當前控制器 A 正在處理通信流 (RoundRobinIndex: 1)。兩個路徑都存在並處於優化狀態 (LUNPathDevice present, DevState optimal)。

顯示所有可用陣列和 LUN 的多路徑信息的另一種方法是執行 ls -lR /proc/mpp 命令。它列出可用的控制器和每個陣列的所有可用 LUN。通過顯示各個 LUN proc 條目的內容,可以獲得詳細信息。中間目錄 mptsas_h1c0t0 反映 Linux SCSI 地址(主機、通道、目標):


清單 11. 來自 /proc 的多路徑信息
				  [root@localhost ~]# cat /proc/mpp/Infra-sas2/controllerA/mptsas_h1c0t0/LUN0   Linux MPP driver. Version:09.01.C5.19 Build:Tue Apr  1 13:30:42 CDT 2008  Lun WWN:600a0b8000369d3f00000775481870af  Physical HBA driver: mptsas  Device Scsi Address: host_no:1 channel:0 target:0 Lun:0  Queue Depth = 64  I/O Statistics:          Number of IOs:8846          Longest trip of all I/Os:1          Shortest trip of all I/Os:0          Number of occurrences of IO failed events:0  

通過 /etc/mpp.conf 配置 MPP。如果做了任何修改,那麼必須運行 mppUpdate 以便用新的配置文件重新構建原始磁碟。需要重新引導修改才會生效。





步驟 6:用更多的 LUN 擴展文件系統

如果需要給操作系統分配更多磁碟空間,只需給 blade 分配更多存儲單元,把它們添加到 LVM 中,並用新的磁碟空間擴展文件系統。

但是,在定義和使用新的存儲單元之前,需要談談 Logical Volume Manager (LVM)。LVM 提供底層存儲的抽象。它把一個或多個物理卷(磁碟)組合成卷組。卷組作為一個或多個邏輯卷的邏輯容器,它作為一個 SCSI 設備在 Linux 中出現(見圖 7)。


圖 7. Logical Volume Manager

現在開始擴展文件系統。

在 Storage Manager 中定義新單元

用 Storage Manager 工具創建新的存儲單元(見步驟 2)。

通過 LVM 在 Linux 中使用它們

在 Linux 中使用新的存儲單元是一個分兩階段的過程。必須先把它們添加到 LVM 中,然後才能擴展實際的 Linux 文件系統。

用 hot_add 實用程序(它是 mppBusRescan 的鏈接)重新掃描 SAS 匯流排,尋找新映射的存儲單元:


清單 12. 發現新的 LUN
				  [root@localhost ~]# hot_add   Starting new devices re-scan...  scan mptsas HBA host /sys/class/scsi_host/host1...          found 1:0:0:1           found 1:0:1:1   scan mptsas HBA host /sys/class/scsi_host/host0...          no new device found  run /usr/sbin/mppUtil -s busscan...  scan mpp virtual host /sys/class/scsi_host/host3...          found 3:0:0:1->/dev/sdb   /usr/sbin/hot_add is completed.  

Linux 找到了一個新單元並把它映射到 /dev/sdb。注意,新單元由多路徑驅動程序自動地管理。

為了為 LVM 準備此單元,創建一個包含整個磁碟的主 LVM 分區(分區類型 8e):


清單 13. 準備新的邏輯單元
				  [root@localhost ~]# fdisk /dev/sdb  Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel  Building a new DOS disklabel. Changes will remain in memory only,  until you decide to write them. After that, of course, the previous  content won't be recoverable.      The number of cylinders for this disk is set to 51200.  There is nothing wrong with that, but this is larger than 1024,  and could in certain setups cause problems with:  1) software that runs at boot time (e.g., old versions of LILO)  2) booting and partitioning software from other OSs     (e.g., DOS FDISK, OS/2 FDISK)  Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)    Command (m for help): n  Command action     e   extended     p   primary partition (1-4)  p  Partition number (1-4): 1  First cylinder (1-51200, default 1):   Using default value 1  Last cylinder or +size or +sizeM or +sizeK (1-51200, default 51200):   Using default value 51200    Command (m for help): t  Selected partition 1  Hex code (type L to list codes): 8e  Changed system type of partition 1 to 8e (Linux LVM)    Command (m for help): w  The partition table has been altered!    Calling ioctl() to re-read partition table.  Syncing disks.  

現在,把新單元集成到現有的卷組中。清單 14 說明在擴展之前和之後如何用 vgdisplay -s 進行檢查:


清單 14. 擴展 LVM 卷組
				  [root@localhost ~]# vgdisplay -s    "VolGroupBoot" 49.88 GB  [49.88 GB  used / 0    free]    [root@localhost ~]# pvcreate /dev/sdb1    Physical volume "/dev/sdb1" successfully created       [root@localhost ~]# vgextend VolGroupBoot /dev/sdb1    Volume group "VolGroupBoot" successfully extended    [root@localhost ~]# vgdisplay -s    "VolGroupBoot" 49.88 GB  [49.88 GB  used / 49.97    free]  

接下來,增加此卷組中的邏輯卷。可以用 lvdisplay 進行檢查,比較 LV Size 行:


清單 15. 擴展 LVM 邏輯卷
				  [root@localhost ~]# lvdisplay /dev/VolGroupBoot/LogVolSlash    --- Logical volume ---    LV Name                /dev/VolGroupBoot/LogVolSlash    VG Name                VolGroupBoot    LV UUID                dIanEg-J6Mf-60Ec-eUKb-rgoJ-dOM0-QmjQ3Q    LV Write Access        read/write    LV Status              available    # open                 1    LV Size                47.94 GB    Current LE             1534    Segments               1    Allocation             inherit    Read ahead sectors     auto    - currently set to     256    Block device           253:0    [root@localhost ~]# lvextend -l +100%FREE /dev/VolGroupBoot/LogVolSlash /dev/sdb1    Extending logical volume LogVolSlash to 97.91 GB    Logical volume LogVolSlash successfully resized    [root@localhost ~]# lvdisplay /dev/VolGroupBoot/LogVolSlash    --- Logical volume ---    LV Name                /dev/VolGroupBoot/LogVolSlash    VG Name                VolGroupBoot    LV UUID                dIanEg-J6Mf-60Ec-eUKb-rgoJ-dOM0-QmjQ3Q    LV Write Access        read/write    LV Status              available    # open                 1    LV Size                97.91 GB    Current LE             3133    Segments               2    Allocation             inherit    Read ahead sectors     auto    - currently set to     256    Block device           253:0  

現在,可以調整文件系統的大小了(對於 SAS 驅動器上的 50GB 空間,這需要大約兩分鐘)。如果調整根文件系統的大小,那麼只有 ext3 支持聯機調整(這意味著不必安排維護窗口)。


清單 16. 調整 Linux 文件系統的大小
				  [root@localhost ~]# df -h  Filesystem            Size  Used Avail Use% Mounted on  /dev/mapper/VolGroupBoot-LogVolSlash      47G  2.3G   42G   6% /    [root@localhost ~]# resize2fs -p /dev/VolGroupBoot/LogVolSlash  resize2fs 1.39 (29-May-2006)  Filesystem at /dev/VolGroupBoot/LogVolSlash is mounted on /; on-line resizing required  Performing an on-line resize of /dev/VolGroupBoot/LogVolSlash to 25665536 (4k) blocks.  The filesystem on /dev/VolGroupBoot/LogVolSlash is now 25665536 blocks long.    [root@localhost ~]# df -h  Filesystem            Size  Used Avail Use% Mounted on  /dev/mapper/VolGroupBoot-LogVolSlash                         95G  2.3G   88G   3% /  

現在完成了!





結束語

我講解了如何從 SAS 控制的 IBM BladeCenter Boot Disk System (DS3200) 成功地引導 BladeCenter 伺服器。還討論了:

  • 如何啟用多路徑以確保高效的容錯。
  • 如何使用 LVM 的 hot-add 特性擴展文件系統,從而滿足存儲需求的增長。

請記住,只使用外部存儲可以提高 blade 伺服器的可用性;在這種情況下,不必停止伺服器就可以更換或升級驅動器。(責任編輯:A6)



[火星人 ] Blade 和外部存儲:設置一個容錯環境已經有783次圍觀

http://coctec.com/docs/linux/show-post-69006.html