Linux就該這麼學 | 第17章 部署 iSCSI 網絡存儲

第17章:使用 iSCSI 服務部署網絡存儲

本章學習內容有:介紹計算機硬件存儲設備的不同接口技術的優缺點;學習 iSCSI 技術;如何部署 iSCSI 服務端程序?如何遠程訪問 iSCSI 服務端存儲的資源?

一、iSCSI 技術概述

1、硬盤接口協議

硬盤是計算機硬件設備中重要的組成部分之一,硬盤存儲設備讀寫速度的快慢也會對服務器的整體性能造成影響。前面我們已經學習了硬盤存儲結構、RAID磁盤陣列、LVM技術等,這些技術都旨在解決硬盤存儲設備的讀寫速度以及存儲數據的安全性。

爲了進一步提升硬盤存儲設備的讀寫速度和性能,人們一直在努力改進物理硬盤設備的接口協議。當前的硬盤接口類型主要有 IDE、SCSI 和 SATA 這 3 種。

  • IDE 是一種成熟穩定、價格便宜的並行傳輸接口。
  • SATA 是一種傳輸速度更快、數據校驗更完整的串行傳輸接口。
  • SCSI 是一種用於計算機和硬盤、光驅等設備之間系統級接口的通用標準,具有系統資源佔用率低、轉速高、傳輸速度快等優點。

2、什麼是 iSCSI 協議?它解決了什麼問題?

不論使用什麼類型的硬盤接口,硬盤上的數據總是要通過計算機主板上的總線與 CPU、內存設備進行數據交換,這種物理環境上的限制給硬盤資源的共享帶來了各種不便。

後來,IBM 公司開始動手研發基於 TCP/IP 協議和 SCSI 接口協議的新型存儲技術,這也就是我們目前能看到的互聯網小型計算機系統接口(iSCSI,Internet Small Computer System Interface)。這是一種將 SCSI 接口與以太網技術相結合的新型存儲技術,可以用來在網絡中傳輸 SCSI 接口的命令和數據。這樣,不僅克服了傳統 SCSI 接口設備的物理侷限性,實現了跨區域的存儲資源共享,還可以在不停機的狀態下擴展存儲容量。

3、iSCSI 技術在生產環境中的優勢和劣勢

iSCSI 存儲技術非常便捷,在訪問存儲資源的形式上發生了很大變化,擺脫了物理環境的限制,同時還可以把存儲資源分給多個服務器共同使用,因此是一種非常推薦使用的存儲技術。

但是,iSCSI 存儲技術受到了網速的制約。以往,硬盤設備直接通過主板上的總線進行數據傳輸,現在則需要讓互聯網作爲數據傳輸的載體和通道,因此傳輸速率和穩定性是 iSCSI 技術的瓶頸。隨着網絡技術的持續發展,相信 iSCSI 技術也會隨之得以改善。

4、iSCSI-HBA 卡 與 iSCSI 協議

既然要通過以太網來傳輸硬盤設備上的數據,那麼數據是通過網卡傳入到計算機中的麼?是通過 iSCSI-HBA 卡來傳輸數據的。

iSCSI-HBA 卡 與一般的網卡有所不同,一般的網卡是連接網絡總線和內存的,而 iSCSI-HBA 卡連接的則是 SCSI 接口(或者 FC光纖通道)總線和內存,其專門用於在主機間交換存儲數據,它使用的協議與普通網卡有本質的不同。

運行 Linux系統的服務器會基於 iSCSI 協議把硬盤設備命令與數據打包成標準的 TCP/IP 數據包,然後通過以太網傳輸到目標存儲設備;而當目標存儲設備接收到這些數據包後,還需要基於 iSCSI 協議把 TCP/IP 數據包解壓成硬盤設備命令與數據。

二、創建 RAID磁盤陣列

既然要使用 iSCSI 存儲技術爲遠程用戶提供共享存儲資源,首先要保障用於存放資源的服務器的穩定性與可用性,否則一旦在使用過程中出現故障,則維護的難度相較於本地硬盤設備要更加複雜、困難。

因此推薦部署 RAID 磁盤陣列組,確保數據的安全性。下面以配置 RAID5 磁盤陣列組爲例進行講解。

1)在虛擬機中添加 4 塊新硬盤,用於稍後創建 RAID5 磁盤陣列和備份盤。

2)使用 mdadm 命令創建 RAID5 磁盤陣列。

其中,-Cv 參數爲創建陣列並顯示過程,/dev/md0 爲生成的陣列組名稱,-n 3 參數爲創建 RAID 5 磁盤陣列所需的硬盤個數,-l 5 參數爲 RAID 磁盤陣列的級別,-x 1 參數爲磁盤陣列的備份盤個數。在命令後面要逐一寫上使用的硬盤名稱。

mdadm  -Cv  /dev/md0  -n  3  -l  5  -x  1  /dev/sdb  /dev/sdc  /dev/sdd  /dev/sde

在上述命令成功執行之後,得到一塊名稱爲/dev/md0 的新設備,這是一塊 RAID5 級別的磁盤陣列,並且還有一塊備份盤爲硬盤數據保駕護航。使用 mdadm -D 命令來查看設備的詳細信息。

mdadm  -D  /dev/md0

三、配置 iSCSI 服務端

iSCSI 技術在工作形式上分爲服務端(target)與客戶端(initiator)。

iSCSI 服務端即用於存放硬盤存儲資源的服務器,它作爲上述創建的 RAID 磁盤陣列的存儲端,能夠爲用戶提供可用的存儲資源。
iSCSI 客戶端則是用戶使用的軟件,用於訪問遠程 iSCSI服務端的存儲資源。

1)安裝 iSCSI 服務端程序以及其配置命令工具

yum  install  -y  targetd
yum  install  -y  targetcli

2)iSCSI 服務端程序在 Linux系統中的服務名稱爲 targetd,現在我們啓動該服務,並將其添加到開機啓動項中去。

systemctl  start  targetd
systemctl  enable  targetd

3)使用 targetcli 配置命令

targetcli 是用於管理 iSCSI 服務端存儲資源的專用配置命令,它能夠提供類似於 fdisk 命令的交互式配置功能,將 iSCSI 共享資源的配置內容抽象成“目錄”的形式,我們只需將各類配置信息填入到相應的“目錄”中即可。

這裏的難點主要在於認識每個“參數目錄”的作用。當把配置參數正確地填寫到“目錄”中後,iSCSI 服務端就可以提供共享資源服務了。

4)配置 iSCSI 服務端共享資源

/backstores/block 是 iSCSI服務端配置共享設備的位置。在 targetcli 交互命令環境下,使用 create 命令把上述所創建的 RAID 5 磁盤陣列 /dev/md0 文件加入到配置共享設備的“資源池”中,並將該文件重新命名爲 disk0。

5)創建 iSCSI target 名稱及配置共享資源

iSCSI target 名稱是由系統自動生成的,這是一串用於描述共享資源的唯一字符串。

稍後用戶在掃描 iSCSI 服務端時即可看到這個字符串。系統在生成這個 target 名稱後,還會在/iscsi 參數目錄中創建一個與該字符串同名的新“目錄”用來存放共享資源。

我們需要把前面加入到 iSCSI 共享資源池中的硬盤設備添加到這個新目錄中,這樣用戶在登錄 iSCSI 服務端後,即可默認使用這硬盤設備提供的共享存儲資源了。

6)設置 iSCSI 服務端(targetd 服務)的 ACL 訪問控制列表

iSCSI 協議是通過客戶端名稱進行驗證的,也就是說,用戶在訪問 iSCSI 服務端存儲的共享資源時不需要輸入密碼,只要 iSCSI 客戶端的名稱與服務端中設置的訪問控制列表中某一名稱條目一致即可。

因此我們需要在 iSCSI 服務端的配置文件中寫入一串能夠驗證用戶信息的名稱。/acls 參數目錄用於存放能夠訪問 iSCSI 服務端共享存儲資源的客戶端名稱。

7)設置 iSCSI 服務端的監聽 IP 地址和端口號

位於生產環境中的服務器上可能有多塊網卡,那麼到底是由哪個網卡或 IP 地址對外提供共享存儲資源呢?這就需要我們在配置文件中手動定義 iSCSI 服務端的信息,即在 portals 參數目錄中寫上服務器的 IP 地址,系統將默認使用 3260 端口向外提供 iSCSI 共享存儲資源服務。

8)對 iSCSI 服務端配置完成後,執行 exit 命令退出 targetcli 交互環境。最後重啓 iSCSI 服務端程序,並設置 firewalld 防火牆策略,使其放行 3260/tcp 端口號的流量。

四、傅用 Linux機器作爲 iSCSI 客戶端

在 RHEL 7 系統中,已經默認安裝了 iSCSI 客戶端服務程序 initiator。如果您的系統沒有安裝的話,可以使用如下命令手動安裝:

yum  install  iscsi-initiator-utils

1)配置 iSCSI 客戶端訪問 iSCSI服務端的驗證信息

iSCSI 協議是通過客戶端的名稱來進行驗證,而該名稱也是 iSCSI 客戶端的唯一標識,而且必須與服務端配置文件中訪問控制列表中的信息一致,否則客戶端在嘗試訪問存儲共享設備時,系統會彈出驗證失敗的保存信息。

vim  /etc/iscsi/initiatorname.iscsi
systemctl  restart  iscsid
systemctl  enable  iscsid

2)開始訪問 iSCSI 服務端的共享存儲資源

iSCSI 客戶端訪問 iSCSI服務端的基本步驟是:“先發現,再登錄,最後掛載並使用”。

iscsiadm 是用於管理、查詢、插入、更新或刪除 iSCSI數據庫配置文件的命令行工具,用戶需要先使用這個工具掃描發現遠程 iSCSI 服務端,然後查看找到的服務端上有哪些可用的共享存儲資源。

其中,-m discovery 參數的目的是掃描並發現可用的存儲資源,-t st 參數爲執行掃描操作的類型,-p 參數用於指定 iSCSI 服務端的IP 地址。

[root@localhost ~]# iscsiadm -m discovery -t st -p 192.168.10.10
192.168.10.10:3260,1 iqn.2003-01.org.linux-iscsi.geekxia.x8664:sn.d497c356ad80

在使用 iscsiadm 命令發現了遠程服務器上可用的存儲資源後,接下來準備登錄 iSCSI 服務端。

其中,-m node 參數爲將客戶端所在主機作爲一臺節點服務器,-T 參數指定將要使用的存儲資源,-p 參數指定 iSCSI 服務端的 IP 地址,--login 或-l 參數進行登錄驗證。

iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.geekxia.x8664:sn.d497c356ad80 -p 192.168.10.10 --login

在 iSCSI 客戶端成功登錄之後,會在客戶端主機上多出一塊名爲/dev/sd* 的設備文件(硬盤命名規則由 udev 服務管理着)。使用 file 命令可以查看該設備的信息。

對設備 /dev/sd* 進行格式化,並手動掛載至 iSCSI 客戶端的系統中:

格式化:
mkfs.xfs  /dev/sd*

掛載:
mkdir  /iscsi
mount  /dev/sd*  /iscsi
df  -h

從此以後,這個設備文件/dev/sd* 就如同是iSCSI客戶端本機主機上的硬盤那樣工作。

3)一個需要注意的問題

由於 udev 服務是按照系統識別硬盤設備的順序來命名硬盤設備的,當客戶端主機同時使用多個遠程存儲資源時,如果下一次識別遠程設備的順序發生了變化,則客戶端掛載目錄中的文件也將隨之混亂。

爲了防止發生這樣的問題,我們應該在/etc/fstab 配置文件中使用設備的 UUID 唯一標識符進行掛載,這樣不論遠程設備資源的識別順序再怎麼變化,系統也能正確找到設備所對應的目錄。

blkid 命令可用於查看設備的名稱、文件系統及 UUID

查看指定設備的 UUID:
blkid  |  grep  /dev/sd*

使用 UUID名稱 永久掛載遠程 iSCSI 服務端的存儲資源:由於/dev/sd* 是一塊網絡存儲設備,而 iSCSI 協議是基於TCP/IP 網絡傳輸數據的,因此必須在/etc/fstab 配置文件中添加上_netdev 參數,表示當系統聯網後再進行掛載操作,以免系統開機時間過長或開機失敗。

vim  /etc/fstab

4)卸載 iSCSI 服務端的存儲資源

如果我們不再需要使用 iSCSI 共享設備資源了,可以用 iscsiadm 命令的-u 參數將其設備卸載。

iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.geekxia.x8664:sn.d497c356ad80 -u

五、使用 Windows機器作爲 iSCSI 客戶端

使用 Windows 系統作爲 iSCSI客戶端也可以正常訪問 iSCSI 服務器上的共享存儲資源,而且其操作原理及步驟與 Linux 系統作爲 iSCSI客戶端基本相同。

1)在Windows客戶端運行 iSCSI 程序。

在 Windows 7 操作系統中已經默認安裝了 iSCSI 客戶端程序。在控制面板中找到“系統和安全” -> “管理工具” -> “iSCSI 發起程序”,雙擊該圖標。(在第一次運行 iSCSI發起程序時,系統會提示“Microsoft iSCSI 服務端未運行”,單擊“是”按鈕即可自動啓動並運行 iSCSI 發起程序)

2)掃描指定 iSCSI服務器上可用的存儲資源。

不論是 Windows 系統還是 Linux 系統,要想使用 iSCSI 共享存儲資源都必須先進行掃描發現操作。

運行 iSCSI 發起程序後在“目標”選項卡的“目標”文本框中寫入 iSCSI 服務端的 IP 地址,然後單擊“快速連接”按鈕。在彈出的“快速連接”提示框中可看到共享的硬盤存儲資源,單擊“完成”按鈕即可。

3)連接 iSCSI 服務端的共享存儲資源。

由於在 iSCSI 服務端程序上設置了 ACL訪問控制權限,使得只有客戶端名稱與 ACL 策略中的名稱保持一致時才能使用遠程存儲資源,因此需要在“配置”選項卡中單擊“更改”按鈕,把 iSCSI 發起程序的名稱修改爲服務端 ACL 所定義的名稱。

iSCSI 發起程序的名稱修改完成後,點擊“連接”即可。

4)訪問遠程的 iSCSI共享存儲資源。

在桌面“計算機”圖標上右鍵,打開計算機管理程序。對磁盤進行初始化操作,初始化完成後

本章複習題


本章 END 2019-01-15

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章