通過 iSCSI 的 Ceph - 或站在吊床上滑雪

我們當中有不喜歡「職業極端」的人(tsefovodov)嗎?

這不太可能——否則我們就不會在這個極其有趣的產品上翻來覆去。

許多參與 Ceph 營運的人都遇到過一種不太常見(或甚至非常罕見)但有時有需求的情況 - 透過 iSCSI 或 FC 連接 Ceph。 為了什麼? 舉例來說,將 Ceph 中的映像提交到由於某種原因尚未虛擬化的 Windows 或 Solaris 伺服器。 或者是虛擬化的,但使用無法執行 Ceph 的虛擬機器管理程式 - 而且據我們所知,這樣的虛擬機器管理程式有很多。 例如? 嗯,例如,HyperV 或 ESXi,它們都被廣泛使用。 如果任務是從 Ceph 向客戶機器提供鏡像,這將是一項非常令人興奮的任務。

所以,給定:

  1. 已經運行的 Ceph 集群
  2. 必須透過 iSCSI 提供服務的現有映像
  3. 礦池名稱 我的池,圖片名稱 我的形象

開始?

首先,當我們談論 FC 或 iSCSI 時,我們有啟動器和目標這樣的實體。 Target其實是一個伺服器,initiator是一個客戶端。 我們的任務是以最小的努力將 Ceph 鏡像提交給發起者。 這意味著我們必須擴大目標。 但是在哪裡、在什麼計算機上?

幸運的是,在 Ceph 叢集中,我們至少有一個元件的 IP 位址是固定的,並且配置了 Ceph 最重要的元件之一,而元件就是監視器。 因此,我們在監視器上安裝一個 iSCSI 目標(同時安裝一個啟動器,至少用於測試)。 我在 CentOS 上執行此操作,但該解決方案也適用於任何其他發行版 - 您只需以您的發行版可接受的方式安裝軟體包即可。

# yum -y install iscsi-initiator-utils targetcli

安裝的軟體包的用途是什麼?

  • 目標命令列 — Linux 核心中內建的用於管理 SCSI 目標的實用程序
  • iSCSI 發起程序實用程序 — 包含用於管理 Linux 核心中內建 iSCSI 啟動器的實用程式的軟體包

為了透過 iSCSI 向發起者提交映像,有兩種事件開發選項 - 使用目標的使用者空間後端或將映像連接為作業系統可見的區塊裝置並透過 iSCSI 匯出。 我們將採用第二種方式 - 用戶空間後端仍處於「實驗」狀態,尚未準備好用於生產使用。 此外,它還存在一些陷阱,您可以對此進行很多討論並爭論(哦,恐怖!)。

如果我們使用一個稍微穩定且支援週期較長的發行版,那麼我們擁有的核心就是一些古老的版本。 例如,在 CentOS7 中為 3.10.*,在 CentOS8 中為 4.19。 我們對至少 5.3(或更確切地說 5.4)及更新版本的核心感興趣。 為什麼? 因為預設情況下,Ceph 映像啟用了一組與舊核心不相容的選項。 這意味著我們將儲存庫與我們的發行版的新核心連接起來(例如,對於 CentOS,這是 elrepo),安裝新核心並重新啟動系統以使用新核心:

  • 連接到實驗選擇的顯示器
  • 我們根據說明連接 elrepo 存儲庫 - elrepo.org/tiki/tiki-index.php
  • 安裝核心: yum -y --enablerepo=elrepo-kernel install kernel-ml
  • 使用顯示器重新啟動伺服器(我們有三個顯示器,對吧?)

將影像作為區塊設備連接

# rbd map mypool/myimage
/dev/rbd0

剩下的就是配置目標。 在這個例子中,我將在所謂的中配置目標。 演示模式 - 無需身份驗證,每個人都可以看到並訪問。 在生產環境中,您可能需要配置身份驗證 - 但這對於今天的娛樂練習來說有點超出範圍。

建立一個名為 disk1 的後端,與檔案 /dev/rbd/mypool/myimage 關聯。 指定的檔案是 udev 守護程式自動建立的到 /dev/rbd0 的符號連結。 我們使用符號鏈接,因為 rbd 設備的名稱可能會根據 Ceph 映像連接到主機的順序而改變。

創建後端:

# targetcli /backstores/block create disk1 /dev/rbd/mypool/myimage

建立 iSCSI 目標:

# targetcli /iscsi create iqn.2020-01.demo.ceph:mypool

我們將後端作為 LUN 連接到目標:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/luns create /backstores/block/disk1

讓我們配置演示模式的目標:

# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute demo_mode_write_protect=0
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute generate_node_acls=1
# targetcli /iscsi/iqn.2020-01.demo.ceph:mypool/tpg1/ set
> attribute cache_dynamic_acls=1

儲存配置:

# targetcli saveconfig

檢查目標的可用性:

# iscsiadm -m discovery -t st -p 127.0.0.1:3260
127.0.0.1:3260,1 iqn.2020-01.demo.ceph:mypool

我們連結目標:

# iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] (multiple)
Login to [iface: default, target: iqn.2020-01.demo.ceph:mypool, portal: 127.0.0.1,3260] successful.

如果一切正確,伺服器上將出現一個新磁碟,它看起來像 SCSI 設備,但實際上是來自 Ceph 的映像,可透過 iSCSI 目標存取。 為了避免啟動問題,最好從本機啟動器中刪除連接的磁碟和偵測到的目標:

# iscsiadm -m node --logout
# iscsiadm -m discoverydb -o delete -t st -p 127.0.0.1:3260

剩下的就是保留配置,以便影像自動連接,連接後目標分層。 啟動目標包括兩個步驟 - 連接 RBD 和實際啟動目標。

首先,讓我們設定 RBD 映像與主機的自動連線。 這是透過將以下行新增至 /etc/ceph/rbdmap 檔案來完成的:

# cat /etc/ceph/rbdmap
# RbdDevice Parameters
mypool/myimage id=admin
# systemctl enable rbdmap

恢復目標配置有​​點複雜 - 我們需要為 systemd 編寫一個單元來恢復配置:

# cat /usr/lib/systemd/system/scsi-target.service
[Unit] Description=Start iSCSI target

After=network-online.target rbdmap.service
Before=remote-fs-pre.target
Wants=network-online.target remote-fs-pre.target

[Service] Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/targetcli restoreconfig

[Install] WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl enable scsi-target

最後的測試是再次重新啟動我們的顯示器(它現在是 iSCSI 目標)。 需要注意的是,如果我們沒有使用命令清除啟動器的資料庫 iscsiadm -n discoverydb -o 刪除... 您最終可能會得到一個無法加載或需要很長時間才能加載的伺服器。

還剩下什麼?

在我們要傳送目標的伺服器上設定啟動器。

如何保證我們的目標的容錯能力?

您可以類似地在其他監視器上配置目標並設定多路徑(vmware 會理解這一點,甚至可以工作,Hyper-V 不會理解 - 它需要 SCSI 鎖)。 由於核心中的 Ceph 客戶端不使用緩存,因此這是相當可行的。 或者另一個選擇是建立由三個元件組成的叢集資源 - 專用目標 IP 位址以及 rbdmap 和 scsi-target 服務,並透過叢集工具管理此資源(誰說pacemaker?)

而不是後面的

很明顯,這篇文章有點開玩笑 - 但在其中我試圖“快速並通過示例”同時考慮幾個相當流行的主題 - iSCSI 目標,它可能不一定會導出 Ceph 映像 - 但例如,導出LVM 卷、使用iSCSI啟動器的基礎知識(如何掃描目標、如何連接到目標、斷開連接、從資料庫中刪除目標條目)、為systemd 編寫自己的單元以及其他一些內容

我希望即使您沒有完全重複整個實驗,至少本文中的一些內容對您有用。

來源: www.habr.com

添加評論