openfiler 搭建虛擬存儲 並 配置服務端 (轉載)

 

免費的存儲服務器軟件有FreeNAS 和 Openfiler。 其中Freenas的網站上只有i386及amd64的版本,也就是說Freenas不能支持64位版本的Intel CPU,而Openfiler則提供更全面的版本支持,在其網站上可以看到支持多網卡、多CPU,以及硬件Raid的支持,還有10Gb網卡的支持。
 
Freenas 官網地址:http://freenas.org/doku.php
       Openfiler 官網:http://www.openfiler.com/
 
 
Openfiler是在rPath Linux基礎上開發的,它能夠作爲一個獨立的Linux操作系統發行。Openfiler是一款非常好的存儲管理操作系統,開源免費,通過web界面對存儲磁盤的管理,支持現在流行的網絡存儲技術IP-SAN和NAS,支持iSCSI(Internet Small Computer System Interface, 學名ISCSI HBA)、NFS、SMB/CIFS及FTP等協議。
 
 
一. 安裝openfiler
       先下載一個Openfiler 軟件,然後安裝到我們的虛擬機上。 Openfiler是基於Linux的存儲平臺,安裝過程和安裝一般的Linux系統一樣。
 
安裝的第一個界面:
   
 
這裏有一個磁盤的配置。 我選擇了手動配置。 我給openfiler 是40g 的磁盤空間。 系統佔2G,交換區1G。 剩下的空間沒有分配。
 
 
安裝完成之後的界面如下:
 
  
 
在這裏有提示我們通過web進行訪問。 並且提示了訪問的地址:
 
 
 
 
 
 
二. 存儲端(target)配置
 
 
Openfiler 的配置,可以參考Oracle 的這遍文檔:
 
 
2.1 啓動iscsi target 服務
       在Service 裏面啓動iscsi target。 啓動之後,下次重啓會自動啓該服務。
 
   
 
 
2.2 配置iscsi initiator 訪問IP
       只有配置了IP 纔有權限訪問openfiler 存儲。在system 選項的最下面有配置選項,把IP 寫上即可。 注意這裏的子網掩碼,寫的是255.255.255.255
 
  
 
2.3  創建卷設備
 
現在我們來配置共享設備。 先對我們沒有格式的分區格式化成擴展分區,一定要擴展分區:
 
[root@san ~]# fdisk /dev/sda
The number of cylinders for this disk is set to 5221.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
 
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 3
First cylinder (383-5221, default 383):
Using default value 383
Last cylinder or +size or +sizeM or +sizeK (383-5221, default 5221):
Using default value 5221
 
Command (m for help): w
The partition table has been altered!
 
Calling ioctl() to re-read partition table.
 
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@san ~]# fdisk -l
 
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
 
  Device Boot      Start         End      Blocks   Id System
/dev/sda1   *           1         255     2048256   83 Linux
/dev/sda2             256         382     1020127+ 82 Linux swap / Solaris
/dev/sda3             383        5221    38869267+   5 Extended
 
 
格式化之後,我們在openfiler的網頁中就能看到這個磁盤信息,如果不格式化,或者格式化錯誤,是無法編輯的。
 
   
頁面網下拉,我們能看到創建分區:
 
 
    
把所有空間全部創建成一個分區,這個就是一個卷。 之後窗口會顯示:
 
   
創建完成後, 選擇volume Groups。
 
 
  
 
然後輸入vg名稱和對應的設備,確定即可。
 
  
至此,我們已經創建完成了一個叫san的卷組。 但是我們在環境中使用的是卷。 所以我們還需要在這個卷組裏創建它的卷。
 
點擊旁邊的add volume選項:
 
   
在這個頁面往下拉,我們可以看到創建卷的選項:
 
 
   
 
這裏我把所有的空間都創建到一個邏輯卷裏。
 
 
  
 
邏輯卷創建完成以後,我們需要創建一個iscsi target, 然後把邏輯卷和這個target 映射起來,這樣就可以通過這個target 與服務器進行連接。  點機iSCSI Target,創建Target IQN:
 
 
  
選擇LUN Mapping, 將ISCSI 和 邏輯卷對應起來
 
 
   
         配置能夠訪問邏輯卷的Network ACL 權限,這個ip 是在system 的選項裏設置的。 這個之前已經配置過。 這裏可以設置多個IP, 可以控制哪個IP 允許訪問哪個邏輯卷。從而可以多個用戶同時使用存儲而互不影響。
 
  
 
至此, 存儲的服務端已經配置完成。 在這一步,我們創建了一個邏輯卷然後與ISCSI target 進行了對應。 客戶端的服務器就通過這個ISCSI target 進行連接。
Openfiler target的配置文件是: /etc/ietd.conf。
 
[root@san etc]# cat /etc/ietd.conf
#####   WARNING!!! - This configuration file generated by Openfiler. DO NOT MANUALLY EDIT. ##### 
 
Target iqn.2006-01.com.san
        HeaderDigest None
        DataDigest None
        MaxConnections 1
        InitialR2T Yes
        ImmediateData No
        MaxRecvDataSegmentLength 131072
        MaxXmitDataSegmentLength 131072
        MaxBurstLength 262144
        FirstBurstLength 262144
        DefaultTime2Wait 2
        DefaultTime2Retain 20
        MaxOutstandingR2T 8
        DataPDUInOrder Yes
        DataSequenceInOrder Yes
        ErrorRecoveryLevel 0
        Lun 0 Path=/dev/san/racshare,Type=blockio,ScsiSN=4YMdbG-SGED-jqHA,ScsiId=4YMdbG-SGED-jqHA,IOMode=wt
[root@san etc]#
 
 
重啓iscsi-target 服務:
#service iscsi-target restart
 

 

 
 
三. 服務器端(initiator) 配置
           iSCSI 客戶端可以是提供 iSCSI 支持(驅動程序)的任何系統(Linux、Unix、MS Windows、Apple Mac 等)。
 
 
3.1安裝 iSCSI(啓動器)服務
           這個安裝包在系統的安裝包裏。 找到iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm包。 安裝上。
 
[root@centos ~]# rpm -Uvh iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm
warning: iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID e8562897
Preparing...                ########################################### [100%]
   1:iscsi-initiator-utils ########################################### [100%]
[root@centos ~]# rpm -qa | grep iscsi-initiator-utils
iscsi-initiator-utils-6.2.0.871-0.10.el5
 
 
3.2  配置 iSCSI(啓動器)服務
       剛纔已經安裝了initiator 包。 現在我們來啓動initiator 服務(iscsid),並使其在系統引導時自動啓動。在配置 iscsi 服務自動啓動,使其在系統啓動時自動登錄 iSCSI 目標。
 
[root@centos ~]# service iscsid start
[ OK ]off network shutdown. Starting iSCSI daemon: [ OK ]
[ OK ]
[root@centos ~]# chkconfig iscsid on
[root@centos ~]# chkconfig iscsi on
 
 
用iscsiadm命令檢查網絡存儲服務器上的所有可用目標:
[root@centos ~]# iscsiadm -m discovery -t sendtargets -p 192.168.1.1
192.168.1.1:3260,1 iqn.2006-01.com.san
 
手動登錄 iSCSI 目標
[root@centos ~]# iscsiadm -m node -T iqn.2006-01.com.san -p 192.168.1.1 -l
Logging in to [iface: default, target: iqn.2006-01.com, portal: 192.168.1.1,3260]
Login to [iface: default, target: iqn.2006-01.com, portal: 192.168.1.1,3260]: successful
 
 
配置自動登錄
在計算機引導(或 iSCSI 啓動器服務啓動/重新啓動)時,客戶端將自動登錄上面列出的每個目標。和上面描述的手動登錄過程一樣,不過在這裏加了2個參數。
[root@centos ~]# iscsiadm -m node -T iqn.2006-01.com.san -p 192.168.1.1 --op update -n node.startup -v automatic
 
 
3.3 創建永久性本地 SCSI 設備名稱
 
查看/dev/disk/by-path 文件,來確定文件被映射到了哪個文件上:
[root@centos by-path]# ls /dev/disk/by-path -al
total 0
drwxr-xr-x 2 root root 180 Oct 28 12:48 .
drwxr-xr-x 6 root root 120 Oct 28 05:54 ..
lrwxrwxrwx 1 root root   9 Oct 28 12:48 ip-192.168.1.1:3260-iscsi-iqn.2006-01.com-lun-0 -> ../../sdc
lrwxrwxrwx 1 root root   9 Oct 28 05:54 pci-0000:00:07.1-ide-0:0 -> ../../hdc
lrwxrwxrwx 1 root root   9 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root   9 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:1:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:1:0-part1 -> ../../sdb1
 
         通過上面,我們可以看到這個文件被掛到了sdc下。 但是每次重新引導服務器時,該映射都可能有所不同。它是自動登錄到以隨機方式配置的每個目標,並將這些目標映射到下一個可用的本地 SCSI 設備名稱。 所以對於有個多target的時候,target1現在是/dev/sdc,下一次可能就是/dev/sdd . 因此,如果無法預測重新引導後的 iSCSI 目標映射,依賴於使用本地 SCSI 設備名稱是不現實的。
 
在這裏,我們就需要使用udev的動態管理工具。udev 提供了一個動態設備目錄,使用一組可配置的規則通過符號鏈接指向實際設備。當 udev 收到設備事件(例如,客戶端登錄到 iSCSI 目標)時,就會根據 sysfs 中提供的可用設備屬性匹配其配置好的規則以便識別設備。匹配規則可以提供其他設備信息或指定設備節點名和多個符號鏈接名,並指示 udev 運行其他程序(例如,一個 SHELL 腳本)作爲設備事件處理過程的一部分。
 
 
3.3.1. 創建新的規則文件
創建文件 /etc/udev/rules.d/55-openiscsi.rules,它只包含一行用於接收事件的名稱-值對。還將定義一個調出 SHELL 腳本 (/etc/udev/scripts/iscsidev.sh),用於處理事件。
 
[root@centos ~]# more /etc/udev/rules.d/55-openiscsi.rules
# /etc/udev/rules.d/55-openiscsi.rules
KERNEL=="sd*", BUS=="scsi", PROGRAM="/etc/udev/scripts/iscsidev.sh %b",SYMLINK+="iscsi/%c"
 
3.3.2. 創建在接收該事件時將調用的 UNIX SHELL 腳本
 
(1)先在服務器上創建一個目錄,用於存儲 udev 腳本:
[root@centos ~]# mkdir -p /etc/udev/scripts
 
(2)在服務器上創建 UNIX shell 腳本 /etc/udev/scripts/iscsidev.sh:
[root@centos ~]# more /etc/udev/scripts/iscsidev.sh
#!/bin/sh
# FILE: /etc/udev/scripts/iscsidev.sh
BUS=${1}
HOST=${BUS%%:*}
[ -e /sys/class/iscsi_host ] || exit 1
file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname"
target_name=$(cat ${file})
# This is not an open-scsi drive
if [ -z "${target_name}" ]; then
   exit 1
fi
echo "${target_name##*.}"
 
說明:我們先看一下這個腳本的作用:
[root@centos]# more /sys/class/iscsi_host/host2/device/session1/iscsi_session:session1/targetname
iqn.2006-01.com.san
 
從這個命令,我們可以看出,這個腳本就是獲取target 的名稱的。 而規則將根據這個腳本返回的target 名稱的最後一個字符串,來在相應的目錄的下建立對應的文件。 簡單點就是根據target來做一個映射。 因爲target 名稱是唯一的,所以這個映射名稱也是唯一的。 這就避免了映射到不同的系統目錄,而到時共享數據不可用。
 
 
(3)將剛纔創建的shell腳本修改爲可執行文件:
# chmod 755 /etc/udev/scripts/iscsidev.sh
 
(4)在服務器上重新啓動 iSCSI 服務:
[root@centos ~]# service iscsi stop
Logging out of session [sid: 1, target: iqn.2006-01.com, portal: 192.168.1.1,3260]
Logout of [sid: 1, target: iqn.2006-01.com, portal: 192.168.1.1,3260]: successful
Stopping iSCSI daemon:
 
[root@centos ~]# service iscsi start
iscsid dead but pid file exists
[ OK ]off network shutdown. Starting iSCSI daemon: [ OK ]
[ OK ]
Setting up iSCSI targets: Logging in to [iface: default, target: iqn.2006-01.com, portal: 192.168.1.1,3260]
Login to [iface: default, target: iqn.2006-01.com, portal: 192.168.1.1,3260]: successful
[ OK ]
 
(5)驗證
[root@centos]# ls -l /dev/iscsi/*
lrwxrwxrwx 1 root root 6 Oct 28 14:16 /dev/iscsi/san -> ../sdc
 
因爲這裏我們用udev 配置,它就保證了iscsi目標映射到唯一的設備。 我們在使用的時候使用這個唯一的映射/dev/iscsi/san 即可。
 
 
對客戶端這個映射做一個解釋。 因爲開始對這塊也有點模糊。
存儲的配置只幹一件事,就是給我提供一個target。 這個target 是在存儲上做的映射。 服務器通過initiator 去連存儲。 然後把這個target 映射到自己的下一個可用設備上,如 /dev/sdc。 如果只有一個target. 那麼沒有任何問題。 每次initiator連上後都會把這個target 映射到/dev/sdc上。 但是如果有多個target, 那麼這裏就出了問題。 因爲initiator的連接是隨機的。 可能A先連接,那A就會映射到/dev/sdc上。 如果B先連接,B就會映射到/dev/sdc上。 這就是問題的所在。
 
Udev 的動態管理很好的解決了這個問題。 我們通過腳本加規則的設置,用腳本來獲取每個target的名稱,然後在規則裏用每個target 最後一個字符串,在我們指定的目錄創建一個設備。 這樣,因爲規則是唯一的。 所以每個設備都是唯一的。 我們就可以使用這個唯一的設備,而不會出現問題。 比如實驗中的/dev/iscsi/san. 這個就是一個絕地位置。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章