9 部署附加服務 #
9.1 安裝 iSCSI 閘道 #
iSCSI 是一種儲存區域網路 (SAN) 通訊協定,可讓用戶端 (稱為啟動器) 將 SCSI 指令傳送至遠端伺服器上的 SCSI 儲存裝置 (目標)。SUSE Enterprise Storage 7.1 包含一個可透過 iSCSI 通訊協定向異質用戶端 (例如 Microsoft Windows* 和 VMware* vSphere) 開放 Ceph 儲存管理的工具。多重路徑 iSCSI 存取可讓這些用戶端實現可用性與延展性,此外,該標準化 iSCSI 通訊協定在用戶端與 SUSE Enterprise Storage 7.1 叢集之間提供了一層額外的安全性隔離。該組態工具名為 ceph-iscsi
。使用 ceph-iscsi
,Ceph 儲存管理員可以定義精簡佈建的高可用性複製磁碟區,其支援唯讀快照、讀取寫入克隆,以及 Ceph RADOS 區塊裝置 (RBD) 的自動大小調整。然後,管理員可以透過單個 ceph-iscsi
閘道主機輸出磁碟區,或透過支援多重路徑容錯移轉的多個閘道主機來輸出。Linux、Microsoft Windows 和 VMware 主機可以使用 iSCSI 通訊協定連接到磁碟區,因此可如任何其他 SCSI 區塊裝置一般供您使用。這表示,SUSE Enterprise Storage 7.1 客戶實際上可在 Ceph 上執行具有傳統 SAN 所有功能和優勢的完整區塊儲存基礎架構子系統,從而在未來實現蓬勃發展。
本章詳細介紹如何設定 Ceph 叢集基礎架構和 iSCSI 閘道,以便用戶端主機能夠透過 iSCSI 通訊協定,如同在本機儲存裝置上一般使用遠端儲存的資料。
9.1.1 iSCSI 區塊儲存 #
iSCSI 是 RFC 3720 中指定的、使用網際網路通訊協定 (IP) 的小型電腦系統介面 (SCSI) 指令集的一種實作。iSCSI 以服務形式實作,其中,用戶端 (啟動器) 在 TCP 連接埠 3260 上透過工作階段來與伺服器 (目標) 通訊。iSCSI 目標的 IP 位址和連接埠稱為 iSCSI 入口網站,其中,一個目標可透過一個或多個入口網站公開。一個目標與一個或多個入口網站的組合稱為目標入口網站群組 (TPG)。
iSCSI 的基礎資料連結層通訊協定通常為乙太網路。更具體地說,現代 iSCSI 基礎架構使用 10 GigE 乙太網路或更快的網路實現最佳輸送量。強烈建議您在 iSCSI 閘道與後端 Ceph 叢集之間建立 10 Gb 乙太網路連接。
9.1.1.1 Linux 核心 iSCSI 目標 #
Linux 核心 iSCSI 目標最初稱作 linux-iscsi.or
的 LIO,它是專案的原始網域和網站。在過去一段時間,適用於 Linux 平台的 iSCSI 目標實作競爭產品不少於四個,但 LIO 做為單一 iSCSI 參考目標最終獲得了壓倒性優勢。LIO 的主流核心代碼使用簡單但有些含糊的名稱「目標」,來區別「目標核心」與各種前端和後端目標模組。
可以說,最常用的前端模組就是 iSCSI。但是,LIO 也支援光纖通道 (FC)、透過乙太網路的光纖通道 (FCoE) 與其他多種前端通訊協定。目前,SUSE Enterprise Storage 僅支援 iSCSI 通訊協定。
最常用的目標後端模組是能夠方便地在目標主機上重新輸出任何可用區塊裝置的模組。此模組名為 iblock。但是,LIO 還有一個 RBD 特定的後端模組,該模組支援對 RBD 影像進行平行多重路徑 I/O 存取。
9.1.1.2 iSCSI 啟動器 #
本節簡要介紹 Linux、Microsoft Windows 和 VMware 平台上使用的 iSCSI 啟動器。
9.1.1.2.1 Linux #
Linux 平台的標準啟動器是 open-iscsi
。open-iscsi
會啟動精靈 iscsid
,然後,使用者可以使用該精靈來探查任何給定入口網站上的 iSCSI 目標、登入到目標,以及對應 iSCSI 磁碟區。iscsid
會與 SCSI 中間層通訊以建立核心中區塊裝置,然後,核心便可如處理系統上的任何其他 SCSI 區塊裝置一般處理這些裝置。您可以搭配裝置對應程式多重路徑 (open-iscsi
) 工具一起部署 dm-multipath
啟動器,以提供高可用性 iSCSI 區塊裝置。
9.1.1.2.2 Microsoft Windows 和 Hyper-V #
Microsoft Windows 作業系統的預設 iSCSI 啟動器是 Microsoft iSCSI 啟動器。iSCSI 服務可透過圖形使用者介面 (GUI) 進行設定,並支援使用多重路徑 I/O 以提供高可用性。
9.1.1.2.3 VMware #
VMware vSphere 和 ESX 的預設 iSCSI 啟動器是 VMware ESX 軟體 iSCSI 啟動器 vmkiscsi
。啟用該啟動器後,可透過 vSphere 用戶端或使用 vmkiscsi-tool
指令對其進行設定。然後,您可以使用 VMFS 來格式化透過 vSphere iSCSI 儲存介面卡連接的儲存磁碟區,並如同使用任何其他虛擬機器儲存裝置一般使用它們。VMware 啟動器還支援使用多重路徑 I/O 以提供高可用性。
9.1.2 關於 ceph-iscsi
的一般資訊 #
ceph-iscsi
兼具 RADOS 區塊裝置的優勢與 iSCSI 無所不在的通用性。透過在 iSCSI 目標主機 (稱為 iSCSI 閘道) 上使用 ceph-iscsi
,任何需要利用區塊儲存的應用程式都可受益於 Ceph,即使不支援任何 Ceph 用戶端通訊協定的應用程式也不例外。而使用者可以使用 iSCSI 或任何其他目標前端通訊協定連接至 LIO 目標,從而可以轉換針對 RBD 儲存的所有目標 I/O。
ceph-iscsi
先天就具有高可用性,並支援多重路徑操作。因此,下游啟動器主機可以使用多個 iSCSI 閘道實現高可用性和延展性。與包含多個閘道的 iSCSI 組態通訊時,啟動器可在多個閘道之間實現 iSCSI 申請的負載平衡。如果某個閘道發生故障 (暫時不可連接,或因為維護而停用),則將透過另一個閘道以透明方式繼續處理 I/O。
9.1.3 部署考量 #
包含 ceph-iscsi
的最低 SUSE Enterprise Storage 7.1 組態由以下元件組成:
一個 Ceph 儲存叢集。該 Ceph 叢集至少包含四部實體伺服器,其中每部伺服器至少代管八個物件儲存精靈 (OSD)。在此類組態中,有三個 OSD 節點額外充當監控程式 (MON) 主機。
一部透過
ceph-iscsi
設定且執行 LIO iSCSI 目標的 iSCSI 目標伺服器。一部 iSCSI 啟動器主機,執行
open-iscsi
(Linux)、Microsoft iSCSI 啟動器 (Microsoft Windows) 或任何其他相容的 iSCSI 啟動器實作。
包含 ceph-iscsi
的 SUSE Enterprise Storage 7.1 建議生產組態由以下元件組成:
一個 Ceph 儲存叢集。一個 Ceph 生產叢集由任意數量 (一般是 10 個以上) 的 OSD 節點 (每個節點一般執行 10-12 個物件儲存精靈 (OSD)) 以及至少三個專屬 MON 主機組成。
多部透過
ceph-iscsi
設定且執行 LIO iSCSI 目標的 iSCSI 目標伺服器。為實現 iSCSI 容錯移轉和負載平衡,這些伺服器必須執行支援target_core_rbd
模組的核心。您可透過 SUSE Linux Enterprise Server 維護通道取得更新套件。任意數量的 iSCSI 啟動器主機,這些主機執行
open-iscsi
(Linux)、Microsoft iSCSI 啟動器 (Microsoft Windows) 或任何其他相容的 iSCSI 啟動器實作。
9.1.4 安裝與組態 #
本節介紹在 SUSE Enterprise Storage 之上安裝和設定 iSCSI 閘道的步驟。
9.1.4.1 將 iSCSI 閘道部署到 Ceph 叢集 #
Ceph iSCSI 閘道採用與其他 Ceph 服務相同的程序進行部署,即使用 cephadm。如需詳細資訊,請參閱第 8.3.5 節 「部署 iSCSI 閘道」。
9.1.4.2 建立 RBD 影像 #
RBD 影像建立於 Ceph 儲存中,並在隨後輸出至 iSCSI。建議您為此使用專屬的 RADOS 池。您可以在能夠使用 Ceph rbd
指令行公用程式連接到儲存叢集的任何主機上建立磁碟區。這需要用戶端至少有一個精簡的 ceph.conf
組態檔案,以及相應的 CephX 驗證身分證明。
若要透過 iSCSI 建立一個隨後可供輸出的新磁碟區,請使用 rbd create
指令並指定磁碟區大小 (以 MB 為單位)。例如,若要在名為 iscsi-images
的池中建立名為 testvol
的 100 GB 磁碟區,請執行以下指令:
cephuser@adm >
rbd --pool iscsi-images create --size=102400 testvol
9.1.4.3 透過 iSCSI 輸出 RBD 影像 #
若要透過 iSCSI 輸出 RBD 影像,您可以使用 Ceph Dashboard Web 介面或 ceph-iscsi
gwcli 公用程式。在本節中,我們僅重點介紹 gwcli,並演示如何使用指令行建立輸出 RBD 影像的 iSCSI 目標。
無法透過 iSCSI 輸出具有以下內容的 RBD 影像:
啟用
journaling
功能的影像stripe unit
小於 4096 位元組的影像
以 root
身分進入 iSCSI 閘道容器:
#
cephadm enter --name CONTAINER_NAME
以 root
身分啟動 iSCSI 閘道指令行介面:
#
gwcli
移至 iscsi-targets
,然後建立名為 iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol
的目標:
gwcli >
/> cd /iscsi-targetsgwcli >
/iscsi-targets> create iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol
透過指定閘道名稱
和 IP
位址建立 iSCSI 閘道:
gwcli >
/iscsi-targets> cd iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol/gatewaysgwcli >
/iscsi-target...tvol/gateways> create iscsi1 192.168.124.104gwcli >
/iscsi-target...tvol/gateways> create iscsi2 192.168.124.105
使用 help
指令可顯示目前組態節點中的可用指令清單。
在池 iscsi-images
中新增名為 testvol
的 RBD 影像:
gwcli >
/iscsi-target...tvol/gateways> cd /disksgwcli >
/disks> attach iscsi-images/testvol
將 RBD 影像對應至目標:
gwcli >
/disks> cd /iscsi-targets/iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol/disksgwcli >
/iscsi-target...testvol/disks> add iscsi-images/testvol
您可以使用較低層級的工具 (例如 targetcli
) 來查詢本地組態,但無法修改組態。
您可以使用 ls
指令查看組態。有些組態節點還支援 info
指令,該指令可用於顯示更多詳細資訊。
請注意,系統預設會啟用 ACL 驗證,因此目前尚不可存取此目標。如需驗證和存取控制的詳細資訊,請參閱第 9.1.4.4 節 「驗證和存取控制」。
9.1.4.4 驗證和存取控制 #
iSCSI 驗證十分靈活,涵蓋了許多驗證可能性。
9.1.4.4.1 停用 ACL 驗證 #
無驗證表示任何啟動器均能存取對應目標上的任何 LUN。您可以透過停用 ACL 驗證來啟用無驗證:
gwcli >
/> cd /iscsi-targets/iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol/hostsgwcli >
/iscsi-target...testvol/hosts> auth disable_acl
9.1.4.4.2 使用 ACL 驗證 #
使用基於啟動器名稱的 ACL 驗證時,僅允許定義的啟動器進行連接。您可以透過執行以下指令來定義啟動器:
gwcli >
/> cd /iscsi-targets/iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol/hostsgwcli >
/iscsi-target...testvol/hosts> create iqn.1996-04.de.suse:01:e6ca28cc9f20
定義的啟動器雖然能夠連接,但只能存取已明確新增至該啟動器的 RBD 影像:
gwcli >
/iscsi-target...:e6ca28cc9f20> disk add rbd/testvol
9.1.4.4.3 啟用 CHAP 驗證 #
除了 ACL 以外,您還可以透過為每個啟動器指定使用者名稱和密碼來啟用 CHAP 驗證:
gwcli >
/> cd /iscsi-targets/iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvol/hosts/iqn.1996-04.de.suse:01:e6ca28cc9f20gwcli >
/iscsi-target...:e6ca28cc9f20> auth username=common12 password=pass12345678
使用者名稱長度必須為 8 至 64 個字元,可以包含英數字元、.
、@
、-
、_
或 :
。
密碼長度必須為 12 至 16 個字元,可以包含英數字元、@
、-
、_
或 /
。
(選擇性) 您也可以在 auth
指令中指定 mutual_username
和 mutual_password
參數,以啟用 CHAP 雙向驗證。
9.1.4.4.4 設定探查和雙向驗證 #
探查驗證獨立於之前的驗證方法。該驗證需要身分證明才能進行瀏覽,它是選擇性設定,可透過執行以下指令來設定:
gwcli >
/> cd /iscsi-targetsgwcli >
/iscsi-targets> discovery_auth username=du123456 password=dp1234567890
使用者名稱長度必須為 8 至 64 個字元,只能包含字母、.
、@
、-
、_
或 :
。
密碼長度必須為 12 至 16 個字元,並且只能包含字母、@
、-
、_
或 /
。
(選擇性) 您也可以在 discovery_auth
指令中指定 mutual_username
和 mutual_password
參數。
可以使用以下指令來停用探查驗證:
gwcli >
/iscsi-targets> discovery_auth nochap
9.1.4.5 設定進階設定 #
可以為 ceph-iscsi
設定隨後將傳遞給 LIO I/O 目標的進階參數。參數分為 target
和 disk
參數。
除非另有說明,否則不建議將這些參數變更為使用非預設設定。
9.1.4.5.1 檢視目標設定 #
您可以使用 info
指令檢視這些設定的值:
gwcli >
/> cd /iscsi-targets/iqn.2003-01.org.linux-iscsi.iscsi.SYSTEM-ARCH:testvolgwcli >
/iscsi-target...i.SYSTEM-ARCH:testvol> info
還可以使用 reconfigure
指令變更設定:
gwcli >
/iscsi-target...i.SYSTEM-ARCH:testvol> reconfigure login_timeout 20
可用的 target
設定包括:
- default_cmdsn_depth
預設的 CmdSN (指令順序編號) 深度。限制 iSCSI 啟動器可在任何時候具有的未處理申請數量。
- default_erl
預設的錯誤復原層級。
- login_timeout
登入逾時值 (以秒為單位)。
- netif_timeout
NIC 故障逾時 (以秒為單位)。
- prod_mode_write_protect
如果設定為
1
,則阻止寫入 LUN。
9.1.4.5.2 檢視磁碟設定 #
您可以使用 info
指令檢視這些設定的值:
gwcli >
/> cd /disks/rbd/testvolgwcli >
/disks/rbd/testvol> info
還可以使用 reconfigure
指令變更設定:
gwcli >
/disks/rbd/testvol> reconfigure rbd/testvol emulate_pr 0
可用的 disk
設定包括:
- block_size
基礎裝置的區塊大小。
- emulate_3pc
如果設定為
1
,則啟用「協力廠商複製」。- emulate_caw
如果設定為
1
,則啟用「比較並寫入」。- emulate_dpo
如果設定為 1,則開啟「停用頁面輸出」。
- emulate_fua_read
如果設定為
1
,則啟用「強制單元讀取存取」。- emulate_fua_write
如果設定為
1
,則啟用「強制單元寫入存取」。- emulate_model_alias
如果設定為
1
,則使用後端裝置名稱做為模型別名。- emulate_pr
如果設定為 0,將停用 SCSI 保留 (包括永久群組保留) 支援。停用該支援後,SES iSCSI 閘道可能會忽略保留狀態,導致要求延遲情況得到改進。
提示如果 iSCSI 啟動器不需要 SCSI 保留支援,建議將
backstore_emulate_pr
設定為0
。- emulate_rest_reord
如果設定為
0
,則佇列演算法修飾詞的重新排序受限。- emulate_tas
如果設定為
1
,則啟用「任務已中止狀態」。- emulate_tpu
如果設定為
1
,則啟用「精簡佈建 - 取消對應」。- emulate_tpws
如果設定為
1
,則啟用「精簡佈建 - 寫入相同內容」。- emulate_ua_intlck_ctrl
如果設定為
1
,則啟用「單元警告連鎖」。- emulate_write_cache
如果設定為
1
,則開啟「啟用寫入快取」。- enforce_pr_isids
如果設定為
1
,則強制永久保留 ISID。- is_nonrot
如果設定為
1
,則後備儲存為非旋轉裝置。- max_unmap_block_desc_count
UNMAP 的最大區塊描述子數量。
- max_unmap_lba_count:
UNMAP 的最大 LBA 數。
- max_write_same_len
WRITE_SAME 的最大長度。
- optimal_sectors
磁區中的最佳申請大小。
- pi_prot_type
DIF 保護類型。
- queue_depth
佇列深度。
- unmap_granularity
UNMAP 細粒度。
- unmap_granularity_alignment
UNMAP 細粒度對齊。
- force_pr_aptpl
如果啟用該設定,無論用戶端是否透過 aptpl=1 發出了相應要求,LIO 都一律會將
永久保留
狀態寫出至永久儲存區。這對 LIO 的核心 RBD 後端不會產生任何影響,該後端永遠會保留 PR 狀態。理論上,如果有人嘗試透過組態停用該設定,target_core_rbd
選項應該會強制將其設定為「1」並拋出錯誤。- unmap_zeroes_data
影響 LIO 是否會向 SCSI 啟動器通告 LBPRZ,表示將在執行包含取消對應位元的 UNMAP 或 WRITE SAME 指令後從某個區域讀回零。
9.1.5 使用 tcmu-runner
輸出 RADOS 區塊裝置影像 #
ceph-iscsi
支援 rbd
(基於核心) 和 user:rbd
(tcmu-runner) 後備儲存,這使整個管理過程變得透明並且獨立於後備儲存。
基於 tcmu-runner
的 iSCSI 閘道部署目前以技術預覽的方式提供。
與基於核心的 iSCSI 閘道部署不同,基於 tcmu-runner
的 iSCSI 閘道不支援多重路徑 I/O 或 SCSI 持續保留。
若要使用 tcmu-runner
輸出 RADOS 區塊裝置影像,您只需在連接磁碟時指定 user:rbd
後備儲存即可:
gwcli >
/disks> attach rbd/testvol backstore=user:rbd
使用 tcmu-runner
時,輸出的 RBD 影像必須啟用 exclusive-lock
功能。