Multipath on RedHat (NetApp FAS2240)
Multipath 是 CentOS/RedHat 內建套件,可用作兩 port 的 HBA 卡連接 Storage時,有雙路由的備援架構。
系統環境
- RedHat 4.7
- NetApp FAS2240
- SAN Switch x 2
- HBA Card: QLogic, port x 2
#>lspci
Fibre Channel: QLogic Corp. ISP2532-based 8Gb Fibre Channel to PCI Express HBA (rev 02)
RedHat 的 HBA Card 驅動
建議安裝方法為,在安裝 RedHat 前先安裝 HBA 卡,然後安裝 RedHat 時會自動驅動 HBA 卡。
如果無法重新安裝 RedHat 試試修改 /etc/modprobe.conf,加上這一行
alias scsi_hostadapter2 qla2500
scsi_hostadapterX 編號視實際狀況修改
查出 HBA 卡的 WWN
#> cat /proc/scsi/qla2xxx/2
SCSI Device Information:
scsi-qla0-adapter-node=5001438004253c81;
scsi-qla0-adapter-port=5001438004253c80; <---- WWN
scsi-qla0-target-0=50001fe1500e28fd;
scsi-qla0-target-1=50001fe1500e28f9;
scsi-qla0-target-2=500a09829140a66c;
另一個 HBA port 裝置檔為 /proc/scsi/qla2xxx/3,以此類推
每個 port 有獨立的 WWN
NetApp storage 分配 LUN 以此 WWN 作為 Host Mapping 的主要參數
驅動後的模組列表
# lsmod | grep qla
qla2500 209985 0
qla2xxx 203681 13 qla2500
scsi_transport_fc 19521 1 qla2xxx
scsi_mod 153489 7 ib_srp,qla2xxx,scsi_transport_fc,sr_mod,libata,cciss,sd_mo d
SAN Storge 設定與接線
- 將 NetApp storage、SAN switch、RedHat 接上各自的光纖線
- 找出 RedHat 的 HBA 卡 兩 port 各自的 WWN
- 設定 NetApp,將 LUNs 分配至兩個 WWN Hosts
設定 Multipath
更新:RedHat 客戶中心有提供設定 multipath.conf 線上協助導引,網頁必須先登入才能瀏覽
https://access.redhat.com/labs/multipathhelper/
必要的套件安裝
rpm -q device-mapper
rpm -q device-mapper-multipath
yum install device-mapper
yum install device-mapper-multipath
CentOS 5.x)
編輯 /etc/multipath.conf
# Blacklist all devices by default. Remove this to enable multipathing
# on the default devices.
devnode_blacklist {
# devnode "*" << 註解這一行
}
## Use user friendly names, instead of using WWIDs as names.
defaults {
user_friendly_names yes
}
注意:即使啟動了 multipathd 服務,預設是抓不到任何 LUNs 的,必須註解上述的那一行
啟動 multipathd 服務
#> service multipathd start
#> chkconfig multipathd on
CentOS 6/7)
預設沒有設定檔 /etc/multipath.conf,執行這個指令會自動產生,並且將服務 multipathd 設定成自動執行。
#> mpathconf --enable --with_multipathd y
不用修改 multipath.conf
檢視 multupah 的裝置
CentOS 5.x
[root@cdb3-b ~]# multipath -ll
mpath1 (360a98000383035537824474d3936556a) dm-4 NETAPP,LUN
[size=700G][features=3 queue_if_no_path pg_init_retries 50][hwhandler=0][rw]
\_ round-robin 0 [prio=4][active]
\_ 1:0:1:0 sdb 8:16 [active][ready]
\_ 2:0:1:0 sdd 8:48 [active][ready]
\_ round-robin 0 [prio=1][enabled]
\_ 1:0:0:0 sda 8:0 [active][ready]
\_ 2:0:0:0 sdc 8:32 [active][ready]
CentOS 6.x
[root@cdb3 ~]# multipath -ll
mpathb (360a98000383035537824474d39365568) dm-2 NETAPP,LUN
size=700G features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=4 status=active
| |- 1:0:1:0 sdc 8:32 active ready running
| `- 2:0:1:0 sde 8:64 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
|- 1:0:0:0 sdb 8:16 active ready running
`- 2:0:0:0 sdd 8:48 active ready running
安裝 NetApp 管理工具
*建議*安裝 LUN 管理工具 - NetApp Linux Host Utilities
yum install libnl
rpm -ivh QConvergeConsoleCLI-1.0.01-32.x86_64.rpm
rpm -ivh netapp_linux_host_utilities-6-2.x86_64.rpm
- 如果沒有安裝這套件,將無法使用 sanlun 指令
- 適用 CentOS 5.x/6.x
新增 LUN 需系統重新開機)
一旦重新開機後,所有的 LUN disks (在 dual path SAN 架構下會有多個 LUN disks)應該都會被偵測到,並且會有一個 mpathXX 的裝置名稱。
#> multipath -l
mpath1 (360a98000424732615124444150534a35)
[size=100 GB][features="1 queue_if_no_path"][hwhandler="0"]
\_ round-robin 0 [active]
\_ 2:0:2:0 sde 8:64 [active]
\_ 3:0:2:0 sdf 8:80 [active]
mpath0 (3600508b400068e5c00012000001a0000)
[size=100 GB][features="1 queue_if_no_path"][hwhandler="0"]
\_ round-robin 0 [active]
\_ 2:0:0:1 sda 8:0 [active]
\_ 3:0:0:1 sdc 8:32 [active]
\_ round-robin 0 [enabled]
\_ 2:0:1:1 sdb 8:16 [active]
\_ 3:0:1:1 sdd 8:48 [active]
mpathX 這路徑可作為 LVM 的 PV 或直接格式化為 filesystem,完整路徑為 /dev/mapper/mpathX
2:0:0:1 這表示為 host : channel : ID : LUN
Host 2 與 Host 3 表示 HBA 卡有兩個 port 或者單 port 的卡兩張
新增/移除 LUN 系統不需重開機)
參考教學:
- https://library.netapp.com/ecmdocs/ECMP1654943/html/GUID-F88A86D2-F3A9-4440-8C32-539BFEA6BED1.html
- https://access.redhat.com/solutions/3941
CentOS/RedHat 5.x 以後
從 CentOS/RedHat 5 以後或者 SLES 10 以後,可以安裝以下套件:
yum install sg3_utils
不停機下掃描新的 LUN Disk
檢視目前現有的 LUN Disks
#> sanlun lun show all
掃描所有 LUN
#> scsi-rescan
NOTE: 如果偵測不到新 LUN,試試加上 -a
#> scsi-rescan -a
再次檢視目前的 LUN Disks
#> sanlun lun show all
移除 LUN 的程序
要移除現有的 LUN disk 必須依照以下步驟完成:
- 執行 umount 卸載
- 執行 lvremove 移除 LV
- 需要時,執行 vgremove 移除 VG
- 執行 pvremove 移除 PV
- 執行 multipath -f mpathXX 移除 multipathXX
NOTE: 如果沒有執行這步驟,一旦移除 LUN 後系統可能會 Hang。 - 從 Storage 管理介面移除這個 LUN disk
NOTE: 當 LUN 被移除後,執行 sanlun lun show all,那些移除的 LUN 會顯示 unknown。 - 執行 scsi-rescan -r 移除所有未使用的 LUN disk
NOTE: 執行後輸出訊息,應該要顯示類似
4 device(s) removed.
[5:0:1:0]
[5:0:3:0]
[6:0:1:0]
[6:0:3:0]
重新執行 sanlun lun show all,那些 unknown 就會消失。
CentOS/RedHat 4.x:
使用附檔區的兩個 script
- remove-LUNs.sh
- rescan-LUNs.sh
新增 LUN disk 步驟
- 在 NetApp storage 上完成 LUN Mapping 的設定
- 在 RedHat 上執行 rescan-LUNs.sh
- 在 RedHat 上執行 multipath -l
移除現有 LUN disk
- 在 RedHat 上卸載不用的 mpathX
- 在 RedHat 上執行 sanlun lun show all 找出 LUN 的名稱與 NetApp 上路徑
註:要執行 sanlun 指令必須先安裝 NetApp 的套件 netapp_linux_host_utilities-6-2.x86_64.rpm - 在 NetApp 上移除所對應的 LUN
- 在 RedHat 上執行 multipath -l
- 找出要移除 LUN disks 的 host:channel:id:LUN
- 執行 remove-LUNs.sh <host> <channel> <id> <LUN>
LVM 管理
將 LUN 新增為一個 PV
#> pvcreate /dev/mapper/mpath6
PV 新增後,執行 pvdisplay 時的裝置名稱會是 dm-X。
新增 VG
#> vgcreate dbVG /dev/mapper/mpath6
指令更多用法
multipath
/etc/init.d/multipathd start | Manually starts the multipathing service on the Linux host. |
multipath -ll | Displays the multipathing configuration. |
multipath -v2 | Creates the initial multipathing configuration. |
multipath -f device_map | Removes an existing LUN from the multipathing configuration. |
multipath -ll -v2 -d | Displays the multipathing configuration in verbose mode. |
multipath -t 或 multipathd show config | 顯示目前的設定參數 |