佈建 Linux 的 iSCSI - FSx for OnTAP

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

佈建 Linux 的 iSCSI

FSx for ONTAP 支援 iSCSI 通訊協定。您需要同時在 Linux 用戶端和檔案系統上佈建 iSCSI,才能使用 iSCSI 通訊協定在用戶端和檔案系統之間傳輸資料。iSCSI 通訊協定可用於具有 6 個或更少高可用性 (HA) 對的所有檔案系統。

在 Amazon FSx for NetApp ONTAP 上設定 iSCSI 有三個主要步驟,涵蓋於下列程序:

  1. 在 Linux 主機上安裝和設定 iSCSI 用戶端。

  2. 在檔案系統的 SVM 上設定 iSCSI。

    • 建立 iSCSI 啟動器群組。

    • 將啟動器群組對應至 LUN。

  3. 在 Linux 用戶端上安裝 iSCSI LUN。

開始之前

在開始設定 iSCSI 檔案系統的程序之前,您需要完成下列項目。

  • 建立適用於 ONTAP 檔案系統的 FSx。如需詳細資訊,請參閱建立檔案系統

  • 在檔案系統上建立 iSCSI LUN。如需詳細資訊,請參閱建立 iSCSI LUN

  • 在與檔案系統相同的 VPC 中建立執行 Amazon Linux 2 Amazon Machine Image (AMI) 的 EC2 執行個體。這是您要設定 iSCSI 並存取檔案資料的 Linux 主機。

    除了這些程序的範圍之外,如果主機位於另一個 VPC 中,您可以使用 VPC 對等互連 AWS Transit Gateway ,或授予其他 VPCs存取磁碟區的 iSCSI 端點。如需詳細資訊,請參閱從部署 VPC 外部存取資料

  • 設定 Linux 主機的 VPC 安全群組,以允許傳入和傳出流量,如 中所述使用 Amazon VPC 的檔案系統存取控制

  • 取得具有您將用來存取 CLI ONTAP 之fsxadmin權限ONTAP的使用者登入資料。如需詳細資訊,請參閱ONTAP 角色和使用者

  • 您將為 iSCSI 設定的 Linux 主機,以及用於存取 FSx for ONTAP 檔案系統的 Linux 主機位於相同的 VPC 和 中 AWS 帳戶。

  • 我們建議 EC2 執行個體與您檔案系統偏好的子網路位於相同的可用區域,如下圖所示。

    顯示 Amazon FSx for NetApp ONTAP 檔案系統,其 iSCSI LUN 和 Amazon EC2 執行個體位於與檔案系統偏好子網路相同的可用區域中。

如果您的 EC2 執行個體執行與 Amazon Linux 2 不同的 Linux AMI,則可能已安裝這些程序和範例中使用的一些公用程式,而且您可以使用不同的命令來安裝必要的套件。除了安裝套件之外,本節中使用的命令對其他 EC2 Linux AMIs 有效。

在 Linux 主機上安裝和設定 iSCSI

安裝 iSCSI 用戶端
  1. 確認您的 Linux 裝置已安裝 device-mapper-multipath iscsi-initiator-utils和 。使用 SSH 用戶端連線至 Linux 執行個體。如需詳細資訊,請參閱使用 SSH 連線至 Linux 執行個體

  2. 使用下列命令安裝 multipath和 iSCSI 用戶端。如果您想要在檔案伺服器之間自動容錯移轉,multipath則需要安裝 。

    ~$ sudo yum install -y device-mapper-multipath iscsi-initiator-utils
  3. 若要在使用 時,在檔案伺服器之間自動容錯移轉時加快回應速度multipath,請將/etc/iscsi/iscsid.conf檔案中的替代逾時值設定為 值,5而不是使用 的預設值120

    ~$ sudo sed -i 's/node.session.timeo.replacement_timeout = .*/node.session.timeo.replacement_timeout = 5/' /etc/iscsi/iscsid.conf; sudo cat /etc/iscsi/iscsid.conf | grep node.session.timeo.replacement_timeout
  4. 啟動 iSCSI 服務。

    ~$ sudo service iscsid start

    請注意,根據您的 Linux 版本,您可能需要改用此命令:

    ~$ sudo systemctl start iscsid
  5. 使用以下命令確認服務正在執行。

    ~$ sudo systemctl status iscsid.service

    系統會以下列輸出回應:

    iscsid.service - Open-iSCSI Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2021-09-02 00:00:00 UTC; 1min ago Docs: man:iscsid(8) man:iscsiadm(8) Process: 14658 ExecStart=/usr/sbin/iscsid (code=exited, status=0/SUCCESS) Main PID: 14660 (iscsid) CGroup: /system.slice/iscsid.service ├─14659 /usr/sbin/iscsid └─14660 /usr/sbin/iscsid
在 Linux 用戶端上設定 iSCSI
  1. 若要讓用戶端在您的檔案伺服器之間自動容錯移轉,您必須設定多路徑。使用下列命令:

    ~$ sudo mpathconf --enable --with_multipathd y
  2. 使用以下命令判斷 Linux 主機的啟動者名稱。啟動器名稱的位置取決於您的 iSCSI 公用程式。如果您使用的是 iscsi-initiator-utils,則啟動器名稱位於 檔案 中/etc/iscsi/initiatorname.iscsi

    ~$ sudo cat /etc/iscsi/initiatorname.iscsi

    系統會以啟動者名稱回應。

    InitiatorName=iqn.1994-05.com.redhat:abcdef12345

在 FSx for ONTAP 檔案系統上設定 iSCSI

  1. 使用下列命令,連線到您建立 iSCSI LUN 之 FSx for ONTAP 檔案系統的 NetApp ONTAP CLI。如需詳細資訊,請參閱使用 NetApp ONTAP CLI

    ~$ ssh fsxadmin@your_management_endpoint_ip
  2. 使用 NetApp ONTAP CLI lun igroup create命令建立啟動器群組 (igroup)。啟動器群組會映射至 iSCSI LUNs並控制哪些啟動器 (用戶端) 可存取 LUNs。host_initiator_name 將 取代為您在先前程序中擷取的 Linux 主機的啟動器名稱。

    ::> lun igroup create -vserver svm_name -igroup igroup_name -initiator host_initiator_name -protocol iscsi -ostype linux

    如果您想要將對應至此 igroup LUNs 提供給多個主機,您可以指定多個以逗號分隔的啟動者名稱。如需詳細資訊,請參閱 NetApp ONTAP 文件中心中的 lun igroup 建立

  3. 使用 lun igroup show命令確認 igroup 存在:

    ::> lun igroup show

    系統會以下列輸出回應:

    Vserver Igroup Protocol OS Type Initiators --------- ------------ -------- -------- ------------------------------------ svm_name igroup_name iscsi linux iqn.1994-05.com.redhat:abcdef12345
  4. 此步驟假設您已建立 iSCSI LUN。如果尚未執行,請參閱 建立 iSCSI LUN 以取得執行此作業step-by-step說明。

    使用 從您建立的 LUN 建立對應到您建立的 igrouplun mapping create,並指定下列屬性:

    • svm_name – 提供 iSCSI 目標的儲存虛擬機器名稱。主機使用此值來到達 LUN。

    • vol_name – 託管 LUN 的磁碟區名稱。

    • lun_name – 您指派給 LUN 的名稱。

    • igroup_name – 啟動器群組的名稱。

    • lun_id – LUN ID 整數專屬於映射,而非 LUN 本身。這由 igroup 中的啟動器用作邏輯單位編號,在存取儲存體時,會為啟動器使用此值。

    ::> lun mapping create -vserver svm_name -path /vol/vol_name/lun_name -igroup igroup_name -lun-id lun_id
  5. 使用 lun show -path命令來確認 LUN 已建立、上線和映射。

    ::> lun show -path /vol/vol_name/lun_name -fields state,mapped,serial-hex

    系統會以下列輸出回應:

    Vserver Path serial-hex state mapped --------- ------------------------------- ------------------------ -------- -------- svm_name /vol/vol_name/lun_name 6c5742314e5d52766e796150 online mapped

    儲存serial_hex值 (在此範例中為 6c5742314e5d52766e796150),您將在後續步驟中使用它來為區塊型裝置建立易記的名稱。

  6. 使用 network interface show -vserver命令來擷取您已建立 iSCSI LUN 之 SVM 的 iscsi_1iscsi_2 介面地址。

    ::> network interface show -vserver svm_name

    系統會以下列輸出回應:

    Logical Status Network Current Current Is Vserver Interface Admin/Oper Address/Mask Node Port Home ----------- ---------- ---------- ------------------ ------------- ------- ---- svm_name iscsi_1 up/up 172.31.0.143/20 FSxId0123456789abcdef8-01 e0e true iscsi_2 up/up 172.31.21.81/20 FSxId0123456789abcdef8-02 e0e true nfs_smb_management_1 up/up 198.19.250.177/20 FSxId0123456789abcdef8-01 e0e true 3 entries were displayed.

    在此範例中, 的 IP 地址iscsi_1172.31.0.143,而 iscsi_2172.31.21.81

在 Linux 用戶端上安裝 iSCSI LUN

在 Linux 用戶端上安裝 iSCSI LUN 的程序包含三個步驟:

  1. 探索目標 iSCSI 節點

  2. 分割 iSCSI LUN

  3. 在用戶端上安裝 iSCSI LUN

下列程序涵蓋這些項目。

探索目標 iSCSI 節點
  1. 在 Linux 用戶端上,使用下列命令,使用 iscsi_1的 IP 地址 iscsi_1_IP 探索目標 iSCSI 節點。

    ~$ sudo iscsiadm --mode discovery --op update --type sendtargets --portal iscsi_1_IP
    172.31.0.143:3260,1029 iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3 172.31.21.81:3260,1028 iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3

    在此範例中, iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3會對應至偏好可用區域中 target_initiator iSCSI LUN 的 。

  2. (選用) 若要將高於 Amazon EC2 單一用戶端最高 5 Gbps (~625 MBps) 的輸送量驅動到您的 iSCSI LUN,請遵循適用於 Linux 執行個體的 Amazon Elastic Compute Cloud 使用者指南中所述的 Amazon EC2 執行個體網路頻寬程序,以建立額外的工作階段以提高輸送量。

    下列命令會在每個可用區域中為每個 ONTAP 節點建立每個啟動器 8 個工作階段,讓用戶端能夠驅動高達 40 Gbps (5,000 MBps) 的彙總輸送量至 iSCSI LUN。

    ~$ sudo iscsiadm --mode node -T target_initiator --op update -n node.session.nr_sessions -v 8
  3. 登入目標啟動器。您的 iSCSI LUNs會顯示為可用的磁碟。

    ~$ sudo iscsiadm --mode node -T target_initiator --login
    Logging in to [iface: default, target: iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3, portal: 172.31.14.66,3260] (multiple) Login to [iface: default, target: iqn.1992-08.com.netapp:sn.9cfa2c41207a11ecac390182c38bc256:vs.3, portal: 172.31.14.66,3260] successful.

    上述輸出已截斷;您應該會在每個檔案伺服器上看到每個工作階段Logging in的一個Login successful回應。如果每個節點有 4 個工作階段,將會有 8 個Logging in和 8 個Login successful回應。

  4. 使用下列命令,透過顯示具有多個政策的單一 LUN 來驗證 dm-multipath 是否已識別和合併 iSCSI 工作階段。應該有相同數量的裝置,列出為 active,而列出為 enabled

    ~$ sudo multipath -ll

    在輸出中,磁碟名稱的格式為 dm-xyz,其中 xyz是整數。如果沒有其他多路徑磁碟,則此值為 dm-0

    3600a09806c5742314e5d52766e79614f dm-xyz NETAPP ,LUN C-Mode size=10G features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=50 status=active | |- 0:0:0:1 sda 8:0 active ready running | |- 1:0:0:1 sdc 8:32 active ready running | |- 3:0:0:1 sdg 8:96 active ready running | `- 4:0:0:1 sdh 8:112 active ready running `-+- policy='service-time 0' prio=10 status=enabled |- 2:0:0:1 sdb 8:16 active ready running |- 7:0:0:1 sdf 8:80 active ready running |- 6:0:0:1 sde 8:64 active ready running `- 5:0:0:1 sdd 8:48 active ready running

    您的區塊裝置現在已連線至您的 Linux 用戶端。它位於路徑 下/dev/dm-xyz。您不應將此路徑用於管理用途;而是使用路徑 下的符號連結/dev/mapper/wwid,其中 wwid 是 LUN 的唯一識別符,在各裝置之間保持一致。在下一個步驟中,您將為 提供易記的名稱wwid,以便與其他多路徑磁碟區區別。

為區塊裝置指派易記的名稱
  1. 若要為裝置提供易記的名稱,請在 /etc/multipath.conf 檔案中建立別名。若要執行此作業,請使用您偏好的文字編輯器將下列項目新增至 檔案,取代下列預留位置:

    • serial_hex 將 取代為您在在 FSx for ONTAP 檔案系統上設定 iSCSI程序中儲存的值。

    • 將 字首3600a0980新增至 serial_hex值,如範例所示。這是 Amazon FSx for NetApp ONTAP 使用的 NetApp ONTAP 分佈的唯一前導詞。

    • device_name 將 取代為您想要用於裝置的易記名稱。

    multipaths { multipath { wwid 3600a0980serial_hex alias device_name } }

    或者,您可以將下列指令碼複製並儲存為 bash 檔案,例如 multipath_alias.sh。您可以使用 sudo 權限執行指令碼,將 serial_hex(不含 3600a0980 字首) 和 取代device_name為各自的序號和所需的易記名稱。此指令碼會在 /etc/multipath.conf 檔案中搜尋未註解的multipaths區段。如果存在項目,它會將multipath項目附加到該區段;否則,它會為區塊裝置建立一個具有multipath項目的新multipaths區段。

    #!/bin/bash SN=serial_hex ALIAS=device_name CONF=/etc/multipath.conf grep -q '^multipaths {' $CONF UNCOMMENTED=$? if [ $UNCOMMENTED -eq 0 ] then sed -i '/^multipaths {/a\\tmultipath {\n\t\twwid 3600a0980'"${SN}"'\n\t\talias '"${ALIAS}"'\n\t}\n' $CONF else printf "multipaths {\n\tmultipath {\n\t\twwid 3600a0980$SN\n\t\talias $ALIAS\n\t}\n}" >> $CONF fi
  2. 重新啟動 multipathd服務,以使變更/etc/multipathd.conf生效。

    ~$ systemctl restart multipathd.service
分割 LUN

下一個步驟是使用 格式化和分割 LUNfdisk

  1. 使用以下命令來驗證 的路徑device_name是否存在。

    ~$ ls /dev/mapper/device_name
    /dev/device_name
  2. 使用 分割磁碟fdisk。您將輸入互動式提示。依顯示的順序輸入選項。您可以使用小於最後一個扇區的值來建立多個分割區 (20971519在此範例中為 )。

    注意

    Last sector 值會根據 iSCSI LUN 的大小 (在此範例中為 10GB) 而有所不同。

    ~$ sudo fdisk /dev/mapper/device_name

    fsdisk 互動式提示隨即啟動。

    Welcome to fdisk (util-linux 2.30.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x66595cb0. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-20971519, default 2048): 2048 Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): 20971519 Created a new partition 1 of type 'Linux' and of size 512 B. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.

    進入 後w,您的新分割區/dev/mapper/partition_name就會變成可用。partition_name 的格式為 <device_name><partition_number>1 做為上一個步驟中fdisk命令中使用的分割區編號。

  3. 使用 /dev/mapper/partition_name作為路徑來建立檔案系統。

    ~$ sudo mkfs.ext4 /dev/mapper/partition_name

    系統會以下列輸出回應:

    mke2fs 1.42.9 (28-Dec-2013) Discarding device blocks: done Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=16 blocks 655360 inodes, 2621184 blocks 131059 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2151677952 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
在 Linux 用戶端上掛載 LUN
  1. 建立 directory directory_path 做為檔案系統的掛載點。

    ~$ sudo mkdir /directory_path/mount_point
  2. 使用以下命令掛載檔案系統。

    ~$ sudo mount -t ext4 /dev/mapper/partition_name /directory_path/mount_point
  3. (選用) 如果您想要提供掛載目錄的特定使用者所有權,username請以擁有者的使用者名稱取代 。

    ~$ sudo chown username:username /directory_path/mount_point
  4. (選用) 確認您可以從檔案系統讀取和寫入資料。

    ~$ echo "Hello world!" > /directory_path/mount_point/HelloWorld.txt ~$ cat directory_path/HelloWorld.txt Hello world!

    您已成功在 Linux 用戶端上建立和掛載 iSCSI LUN。