配置iSCSI 服務端
環境準備
主機名稱:
ISCSI服務端
ISCSI客戶端
操作系統:
RHEL 7.3
IP地址:
服務端192.168.0.13
客戶端192.168.0.10
服務端配置過程
第一步:配置好Yum 軟件倉庫後安裝iSCSI 服務端程序以及配置命令工具。通過在yum命令的後面添加-y 參數,在安裝過程中就不需要再進行手動確認了:
[root@linuxprobe ~]# yum -y install targetd targetcli
安裝完成後啟動iSCSI的服務端程序targetd,然後把這個服務程序加入到開機啟動項中,以便下次在服務器中期後依然能夠為用戶提供iSCSI共享存儲資源服務:
[root@linuxprobe ~]# systemctl start targetd
[root@linuxprobe ~]# systemctl enable targetd
第 2 步:配置iSCSI 服務端共享資源。targetcli 是用於管理iSCSI 服務端存儲資源的專用配置命令,它能夠提供類似於fdisk 命令的交互式配置功能,將iSCSI 共享資源的配置內容抽象成“目錄”的形式,我們只需將各類配置信息填入到相應的“目錄”中即可。這裏的難點主要在於認識每個“參數目錄”的作用。當把配置參數正確地填寫到“目錄”中後,iSCSI服務端也可以提供共享資源服務了。
在執行 targetcli 命令後就能看到交互式的配置界面了。在該界面中可以使用很多Linux命令,比如利用ls 查看目錄參數的結構,使用cd 切換到不同的目錄中。/backstores/block 是iSCSI 服務端配置共享設備的位置。我們需要把剛剛創建的RAID 5 磁盤陣列md0 文件加入到配置共享設備的“資源池”中,並將該文件重新命名為disk0,這樣用戶就不會知道是由服務器中的哪塊硬盤來提供共享存儲資源,而只會看到一個名為disk0 的存儲設備。
[root@linuxprobe ~]# targetcli
第 3 步:創建iSCSI target 名稱及配置共享資源。iSCSI target 名稱是由系統自動生成的,這是一串用於描述共享資源的唯一字符串。稍後用戶在掃描iSCSI 服務端時即可看到這個字符串,因此我們不需要記住它。系統在生成這個target 名稱後,還會在/iscsi 參數目錄中創建一個與其字符串同名的新“目錄”用來存放共享資源。我們需要把前面加入到iSCSI 共享資源池中的硬盤設備添加到這個新目錄中,這樣用戶在登錄iSCSI 服務端後,即可默認使用這硬盤設備提供的共享存儲資源了。
/> cd iscsi
/iscsi>
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80.
Created TPG 1.
/iscsi> cd iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80/
/iscsi/iqn.20....d497c356ad80> ls
o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 .... [TPGs: 1]
o- tpg1 ............................................. [no-gen-acls, no-auth]
o- acls ........................................................ [ACLs: 0]
o- luns ........................................................ [LUNs: 0]
o- portals .................................................. [Portals: 0]
/iscsi/iqn.20....d497c356ad80> cd tpg1/luns
/iscsi/iqn.20...d80/tpg1/luns> create /backstores/block/disk0
Created LUN 0.
第 4 步:設置訪問控制列表(ACL)。iSCSI 協議是通過客戶端名稱進行驗證的,也就是說,用戶在訪問存儲共享資源時不需要輸入密碼,只要iSCSI 客戶端的名稱與服務端中設置的訪問控制列表中某一名稱條目一致即可,因此需要在iSCSI 服務端的配置文件中寫入一串能夠驗證用戶信息的名稱。acls 參數目錄用於存放能夠訪問iSCSI 服務端共享存儲資源的客戶端名稱。在系統剛剛生成的iSCSI target 後面追加上類似於:client 的參數,這樣既能保證客戶端的名稱具有唯一性,又非常便於管理和閱讀:
/iscsi/iqn.20...d80/tpg1/luns> cd ..
/iscsi/iqn.20...c356ad80/tpg1> cd acls
/iscsi/iqn.20...d80/tpg1/acls> create iqn.2003-01.org.linux-iscsi.linuxprobe.
x8664:sn.d497c356ad80:client
Created Node ACL for iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:
client
Created mapped LUN 0.
第5 步:設置iSCSI 服務端的監聽IP 地址和端口號。位於生產環境中的服務器上可能有多塊網卡,那麽到底是由哪個網卡或IP 地址對外提供共享存儲資源呢?這就需要我們在配置文件中手動定義iSCSI 服務端的信息,即在portals 參數目錄中寫上服務器的IP 地址。接下來將由系統自動開啟服務器192.168.0.13 的3260 端口將向外提供iSCSI 共享存儲資源服務:
/iscsi/iqn.20...d80/tpg1/acls> cd ..
/iscsi/iqn.20...c356ad80/tpg1> cd portals
/iscsi/iqn.20.../tpg1/portals> create 192.168.0.13
Using default IP port 3260
Created network portal 192.168.10.10:3260.
第 6 步:配置妥當後檢查配置信息,重啟iSCSI 服務端程序並配置防火墻策略。在參數文件配置妥當後,可以瀏覽剛剛配置的信息,確保與下面的信息基本一致。在確認信息無誤後輸入exit 命令來退出配置。註意,千萬不要習慣性地按Ctrl + C 組合鍵結束進程,這樣不會保存配置文件,我們的工作也就白費了。最後重啟iSCSI 服務端程序,再設置firewalld 防火墻策略,使其放行3260/tcp 端口號的流量。
/iscsi/iqn.20.../tpg1/portals> ls /
o- / ........................... [...]
o- backstores................. [...]
| o- block ................... [Storage Objects: 1]
| | o- disk0 ................. [/dev/md0 (40.0GiB) write-thru activated]
| o- fileio .................. [Storage Objects: 0]
| o- pscsi ................... [Storage Objects: 0]
| o- ramdisk ................. [Storage Objects: 0]
o- iscsi ..................... [Targets: 1]
| o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 ... [TPGs: 1]
| o- tpg1 .................. [no-gen-acls, no-auth]
| o- acls ............................................... [ACLs: 1]
| | o- iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client
[Mapped LUNs: 1]
| | o- mapped_lun0 .......................... [lun0 block/disk0 (rw)]
o- luns .................... [LUNs: 1]
| | o- lun0 .............. [block/disk0 (/dev/md0)]
| o- portals ............. [Portals: 1]
| o- 192.168.0.13:3260 [OK]
o- loopback .................. [Targets: 0]
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json
[root@linuxprobe ~]# systemctl restart targetd
[root@linuxprobe ~]# firewall-cmd --permanent --add-port=3260/tcp
success
[root@linuxprobe ~]# firewall-cmd --reload
success
iSCSI 服務端配置完成。
Linux客戶端配置過程
第一步安裝iSCSI 客戶端服務程序initiator
[root@linuxprobe ~]# yum install iscsi-initiator-utils
Loaded plugins: langpacks, product-id, subscription-manager
Package iscsi-initiator-utils-6.2.0.873-21.el7.x86_64 already installed and
latest version
Nothing to do
下面我們編輯iSCSI 客戶端中的initiator 名稱文件,把服務端的訪問控制列表名稱填寫進來,然後重啟客戶端iscsid 服務程序並將其加入到開機啟動項中:
[root@linuxprobe ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80:client
[root@linuxprobe ~]# systemctl restart iscsid
[root@linuxprobe ~]# systemctl enable iscsid
ln -s ‘/usr/lib/systemd/system/iscsid.service‘ ‘/etc/systemd/system/multi-user.
target.wants/iscsid.service‘
iSCSI 客戶端訪問並使用共享存儲資源的步驟很簡單,只需要記住一個小口
訣“先發現,再登錄,最後掛載並使用。iscsiadm 是用於管理、查詢、插入、更新或刪除iSCSI數據庫配置文件的命令行工具,用戶需要先使用這個工具掃描發現遠程iSCSI 服務端,然後查看找到的服務端上有哪些可用的共享存儲資源。其中,-m discovery 參數的目的是掃描並發現可用的存儲資源,-t st 參數為執行掃描操作的類型,-p 192.168.0.13 參數為iSCSI 服務端的IP 地址:
[root@linuxprobe ~]# iscsiadm -m discovery -t st -p 192.168.0.13
192.168.10.10:3260,1 iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80
在使用 iscsiadm 命令發現了遠程服務器上可用的存儲資源後,接下來準備登錄iSCSI 服務端。其中,-m node 參數為將客戶端所在主機作為一臺節點服務器,-T iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.d497c356ad80 參數為要使用的存儲資源(大家可以直接復制前面命令中掃描發現的結果,以免錄入錯誤),-p 192.168.0.13 參數依然為對方iSCSI 服務端的IP 地址。最後使用--login 或-l 參數進行登錄驗證。
[root@linuxprobe ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.
x8664:sn.d497c356ad80 -p 192.168.10.10 --login
Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.linuxprobe.
x8664:sn.d497c356ad80, portal: 192.168.10.10,3260] (multiple)
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:
sn.d497c356ad80, portal: 192.168.10.10,3260] successful.
在 iSCSI 客戶端成功登錄之後,會在客戶端主機上多出一塊名為/dev/sdb 的設備文件.
[root@linuxprobe ~]# file /dev/sdb
/dev/sdb: block special
最後就可以掛載並使用了
[root@linuxprobe ~]# mkfs.xfs /dev/sdb
log stripe unit (524288 bytes) is too large (maximum is 256KiB)
log stripe unit adjusted to 32KiB
meta-data=/dev/sdb isize=256 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@linuxprobe ~]# mkdir /iscsi
[root@linuxprobe ~]# mount /dev/sdb /iscsi
[root@linuxprobe ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.4G 15G 20% /
devtmpfs 734M 0 734M 0% /dev
tmpfs 742M 176K 742M 1% /dev/shm
tmpfs 742M 8.8M 734M 2% /run
tmpfs 742M 0 742M 0% /sys/fs/cgroup
/dev/sr0 3.5G 3.5G 0 100% /media/cdrom
/dev/sda1 497M 119M 379M 24% /boot
/dev/sdb 40G 33M 40G 1% /iscsi
需要提醒大家的是,由於udev 服務是按照系統識別硬盤設備的順序來命名硬盤設備的,當客戶端主機同時使用多個遠程存儲資源時,如果下一次識別遠程設備的順序發生了變化,則客戶端掛載目錄中的文件也將隨之混亂。為了防止發生這樣的問題,我們應該在/etc/fstab 配置文件中使用設備的UUID 唯一標識符進行掛載,這樣,不論遠程設備資源的識別順序再怎麽變化,系統也能正確找到設備所對應的目錄。
blkid 命令用於查看設備的名稱、文件系統及UUID。可以使用管道符進行過濾,只顯示與/dev/sdb 設備相關的信息:
[root@linuxprobe ~]# blkid | grep /dev/sdb
/dev/sdb: UUID="eb9cbf2f-fce8-413a-b770-8b0f243e8ad6" TYPE="xfs"
如果我們不再需要使用iSCSI 共享設備資源了,可以用iscsiadm 命令的-u 參數將其設備卸載:
[root@linuxprobe ~]# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.linuxprobe.
x8664:sn.d497c356ad80 -u
Logging out of session [sid: 7, target : iqn.2003-01.org.linux-iscsi.linuxprobe.
x8664:sn.d497c356ad80, portal: 192.168.10.10,3260]
Logout of [sid: 7, target: iqn.2003-01.org.linux-iscsi.linuxprobe.x8664:sn.
d497c356ad80,portal:192.168.10.10,3260] successful.
本文源自:劉遄老師的<Linux就該這麽學>一書中的部分章節,內容細致因此收入博文中,便於隨時查看
配置iSCSI 服務端