本文主要講的是IP SAN的網絡存儲iSCSI(Internet Small Computer System Interface),即小型計算機系統接口的安裝配置使用。iSCSI技術有着低廉的建構成本和優秀的存儲性能,目前逐漸進入了企業應用領域,非常适合中小型企業應用。
iSCSI是一種用來建立和管理IP儲存設備、主機和客戶機等之間的互相連接配接,并建立存儲區域網絡(SAN)。SAN 使得 SCSI 協定應用于高速資料傳輸網絡成為可能,這種傳輸以資料塊級别(block-level)在多個資料存儲網絡間進行。
SCSI 結構基于客戶/伺服器模式,其通常應用環境是:裝置互相靠近,并且這些裝置由 SCSI 總線連接配接。iSCSI 的主要功能是在 TCP/IP 網絡上的主機系統(啟動器 initiator)和儲存設備(目标器target)之間進行大量資料的封裝和可靠傳輸過程。此外,iSCSI提供了在IP網絡封裝SCSI指令,且運作在TCP/IP協定棧上。
與傳統的SCSI技術比較起來,iSCSI技術有如三個特點:
1,把原來隻用于本機的SCSI協同透過TCP/IP網絡傳送,使連接配接距離可作無限的地域延伸
2,連接配接的伺服器數量無限(原來的SCSI-3的上限是15)
3,由于是伺服器架構,是以也可以實作線上擴容以至動态部署
使用iSCSI SAN的目的通常有以下兩個:
1,存儲整合
公司希望将不同的存儲資源從分散在網絡上的伺服器移動到統一的位置(常常是資料中心),這可以讓存儲的配置設定變得更為有效。SAN環境中的伺服器無需任何更改硬體或電纜連接配接就可以得到新配置設定的磁盤卷。
2,災難恢複
公司希望把存儲資源從一個資料中心鏡像到另一個遠端的資料中心上,後者在出現長時間停電的情況下可以用作熱備份。 特别是,iSCSI SAN 使我們隻需要用最小的配置更改就可以在 WAN 上面遷移整個磁盤陣列,實質上就是,把存儲變成了“可路由的”,就像普通的網絡通信一樣。
本文主要來講解iSCSI存儲平台的搭建:
下面是本文的實驗拓撲:
<a target="_blank" href="http://blog.51cto.com/attachment/201204/203253496.jpg"></a>
實驗平台:
redhat enterprise 5.4 + ocfs2 + iSCSI
準備工作:
如果不使用DNS的話,請保證兩個用戶端節點的主機名和hosts檔案中的内容:
主機172.16.30.5:
主機名:node1.jia.com
hosts檔案的内容:
172.16.30.6 node1.jia.com
172.16.30.5 node2.jia.com
主機172.16.30.6:
主機名:node2.jia.com
一,伺服器端172.16.30.4上的配置:
二,172.16.30.6用戶端節點配置操作:
三,172.16.30.5用戶端節點上的配置操作:
四,測試使用:
1、準備要共享的裝置,這裡使用本地磁盤上的新分區:
# fdisk -l
建立所需要的新分區
# fdisk /dev/sda
是kernel識别我們的分區:
# partprobe /dev/sda
2、安裝iscsi服務端:
配置好我們的yum源,可以指向我們的系統安裝CD光牒:
# yum -y install scsi-target-utils
啟動服務:
# service tgtd start
# chkconfig tgtd on
我們的服務工作于3260端口:
# netstat -tnlp | grep 3260
3、使用服務端配置管理工具tgtadm建立我們的iscsi裝置:
指令用法:
tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION]...
添加一個新的 target 且其ID為 [id], 名字為 [name].
--lld [driver] --op new --mode target --tid=[id] --targetname [name]
顯示所有或某個特定的target:
--lld [driver] --op show --mode target [--tid=[id]]
向某ID為[id]的裝置上添加一個新的LUN,其号碼為[lun],且此裝置提供給initiator使用。[path]是某“塊裝置”的路徑,此塊裝置也可以是raid或lvm裝置。lun0已經被系統預留。
--lld [driver] --op new --mode=logicalunit --tid=[id] --lun=[lun] --backing-store [path]
删除ID為[id]的target:
--lld [driver] --op delete --mode target --tid=[id]
删除target [id]中的LUN [lun]:
-lld [driver] --op delete --mode=logicalunit --tid=[id] --lun=[lun]
定義某target的基于主機的通路控制清單,其中,[address]表示允許通路此target的initiator用戶端的清單:
--lld [driver] --op bind --mode=target --tid=[id] --initiator-address=[address]
解除target [id]的通路控制清單中[address]的通路控制權限:
--lld [driver] --op unbind --mode=target --tid=[id] --initiator-address=[address]
(1)建立一個target:
# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2010-08.com.example.ts1:disk1
(2)顯示所有建立的target:
# tgtadm --lld iscsi --op show --mode target
(3)顯示剛建立的target的詳細資訊:
# tgtadm --lld iscsi --op show --mode target --tid 1
(4)用我們剛建立的分區/dev/sda3建立為LUN,号碼為1:
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /dev/sda3
(5)開放給172.16.0.0/16網絡中的主機通路:
# tgtadm --lld iscsi --op bind --mode target --tid 1 -I 172.16.0.0/16
1,安裝用戶端軟體包:
# yum -y install iscsi-initiator-utils
給Initiator用戶端定義一個别名:
# echo "InitiatorAlias=initiator1" >> /etc/iscsi/initiatorname.iscsi
啟動iscis服務:
# service iscsi start
# chkconfig iscsi on
2、使用用戶端工具iscsiadm連接配接伺服器端的iscsi裝置:
指令使用方法:
iscsiadm -m discovery [ -d debug_level ] [ -P printlevel ] [ -t type -p ip:port [ -l ] ]
-d, --debug=debug_level 顯示debug資訊,級别為0-8;
-l, --login 登入
-t, --type=type 這裡可以使用的類型為sendtargets, fw, 和 iSNS
-p, --portal=ip[:port] 指定target服務的IP和端口;
-m, --mode op 可用的mode有discovery, node, fw, host iface 和 session
-T, --targetname=targetname 用于指定要通路的target的名字
-u, --logout
先發現伺服器端的裝置:
# iscsiadm -m discovery -t sendtargets -p 172.16.30.4
登入伺服器端裝置:
# iscsiadm -m node -T iqn.2010-08.com.example.ts1:disk1 -p 172.16.30.4:3260 -l
檢視我們發現的裝置:
# ls /var/lib/iscsi/send_targets/
3,對我們發現的iscsi裝置分區:
先檢視:
# fdisk -l
Disk /dev/sda: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 5235 41945715 8e Linux LVM
Disk /dev/sdb: 10.0 GB, 10010165760 bytes
64 heads, 32 sectors/track, 9546 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Disk /dev/sdb doesn't contain a valid partition table
我們可以向使用本地磁盤一樣來使用iscsi裝置,故我們先對iscsi裝置進行分區:
# fdisk /dev/sdb
讓kernel識别分區:
# partprobe /dev/sdb
3,把分區格式化為叢集檔案系統:
分區建立之後,就可以分區格式化了,由于我們是共享的儲存設備,可能會有多個用戶端來挂載使用同一target的LUN裝置,如果多個用戶端同時向裝置寫入資料,不會實作檔案系統的寫同步,甚至可能導緻檔案系統的崩潰。我們可以使用叢集檔案系統來避免這種情況,這裡使用ocfs2叢集檔案系統:
首先下載下傳軟體包:
我的系統kernel是2.6.18.164的版本,故我要下載下傳相對應的軟體包,ocfs2的版本一定要和kernel的版本嚴格相對應,要不然不能使用:
ocfs2-2.6.18-164.el5-1.4.7-1.el5.i686.rpm
ocfs2-tools-1.4.4-1.el5.i386.rpm
ocfs2console-1.4.4-1.el5.i386.rpm
安裝:
# rpm -ivh \
ocfs2-2.6.18-164.el5-1.4.7-1.el5.i686.rpm \
ocfs2-tools-1.4.4-1.el5.i386.rpm \
編輯主配置檔案:
# mkdir /etc/ocfs2
# vim /etc/ocfs2/cluster.conf
添加如下内容,主機名和ip要對應:
node:
ip_port = 7777
ip_address = 172.16.30.6
number = 0
name = node1.jia.com
cluster = ocfs2
ip_address = 172.16.30.5
number = 1
name = node2.jia.com
cluster:
node_count = 2
name = ocfs2
由于兩個節點上配置檔案要相同,故将此配置檔案同步至另一節點172.16.30.5:
# scp -r /etc/ocfs2 [email protected]:/etc/
啟動ocfs2檔案系統:
# /etc/init.d/o2cb enable
# /etc/init.d/o2cb stop
# /etc/init.d/o2cb start
# /etc/init.d/ocfs2 stop
# /etc/init.d/ocfs2 start
檢視ocfs2叢集的運作狀态
# /etc/init.d/o2cb status
Driver for "configfs": Loaded
Filesystem "configfs": Mounted
Driver for "ocfs2_dlmfs": Loaded
Filesystem "ocfs2_dlmfs": Mounted
Checking O2CB cluster ocfs2: Online
Heartbeat dead threshold = 31
Network idle timeout: 30000
Network keepalive delay: 2000
Network reconnect delay: 2000
Checking O2CB heartbeat: Not active
在格式化和挂載檔案系統之前,應驗證O2CB在兩個節點上均為online狀态;上述資訊最後一行顯示O2CB心跳未激活是因為檔案系統還沒有挂載,其挂載之後就會變成active狀态。
建立ocfs2檔案系統,其中-N選項用于指明最多允許多少個節點同時使用此檔案系統:
# mkfs -t ocfs2 -N 2 /dev/sdb1
挂載分區:
# mount /dev/sdb1 /mnt
我們的用戶端172.16.30.6現在就可以使用這個iscsi裝置了
檢視iscis裝置:
/dev/sda3 5236 5965 5863725 8e Linux LVM
/dev/sdb1 1 955 977904 83 Linux
3,安裝cofs2相關軟體包:
4,啟動ocfs2檔案系統:
我們在172.16.30.5上建立一個檔案:
# cd /mnt
# touch test.txt
然後,我們在172.16.30.6上檢視
# ls /mnt/
lost+found test.txt
ok!現在我們的兩個用戶端就共享使用了iscsi裝置,并且可以同時往挂載的分區中寫入資料了!
本文轉自 leejia1989 51CTO部落格,原文連結:http://blog.51cto.com/leejia/842470,如需轉載請自行聯系原作者