天天看點

Openfiler搭建存儲

來自網絡:

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搭建存儲

這裡有一個磁盤的配置。我選擇了手動配置。我給openfiler 是40g 的磁盤空間。系統占2G,交換區1G。剩下的空間沒有配置設定。

安裝完成之後的界面如下:

Openfiler搭建存儲

在這裡有提示我們通過web進行通路。并且提示了通路的位址:

Openfiler搭建存儲

二.存儲端(target)配置

Openfiler 的配置,可以參考Oracle 的這遍文檔:

<a href="http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_iscsi.html#9" target="_blank">http://www.oracle.com/technology/global/cn/pub/articles/hunter_rac10gr2_iscsi.html#9</a>

<a href="http://www.oracle.com/technetwork/cn/articles/hunter-rac11gr2-iscsi-083834-zhs.html#11" target="_blank">http://www.oracle.com/technetwork/cn/articles/hunter-rac11gr2-iscsi-083834-zhs.html#11</a>

2.1 啟動iscsi target 服務

在Service 裡面啟動iscsi target。啟動之後,下次重新開機會自動啟該服務。

Openfiler搭建存儲

2.2 配置iscsi initiator 通路IP

隻有配置了IP 才有權限通路openfiler 存儲。在system 選項的最下面有配置選項,把IP 寫上即可。注意這裡的子網路遮罩,寫的是255.255.255.255

Openfiler搭建存儲

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

eextended

pprimary 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 BootStartEndBlocksIdSystem

/dev/sda1*1255204825683Linux

/dev/sda22563821020127+82Linux swap / Solaris

/dev/sda3383522138869267+5Extended

格式化之後,我們在openfiler的網頁中就能看到這個磁盤資訊,如果不格式化,或者格式化錯誤,是無法編輯的。

Openfiler搭建存儲

頁面網下拉,我們能看到建立分區:

Openfiler搭建存儲

把所有空間全部建立成一個分區,這個就是一個卷。之後視窗會顯示:

Openfiler搭建存儲

建立完成後,選擇volume Groups。

Openfiler搭建存儲

然後輸入vg名稱和對應的裝置,确定即可。

Openfiler搭建存儲

至此,我們已經建立完成了一個叫san的卷組。但是我們在環境中使用的是卷。是以我們還需要在這個卷組裡建立它的卷。

點選旁邊的add volume選項:

Openfiler搭建存儲

在這個頁面往下拉,我們可以看到建立卷的選項:

Openfiler搭建存儲

這裡我把所有的空間都建立到一個邏輯卷裡。

Openfiler搭建存儲

邏輯卷建立完成以後,我們需要建立一個iscsi target,然後把邏輯卷和這個target 映射起來,這樣就可以通過這個target 與伺服器進行連接配接。點機iSCSI Target,建立Target IQN:

Openfiler搭建存儲

選擇LUN Mapping, 将ISCSI 和邏輯卷對應起來

Openfiler搭建存儲

配置能夠通路邏輯卷的Network ACL 權限,這個ip 是在system 的選項裡設定的。這個之前已經配置過。這裡可以設定多個IP, 可以控制哪個IP 允許通路哪個邏輯卷。進而可以多個使用者同時使用存儲而互不影響。

Openfiler搭建存儲

至此,存儲的服務端已經配置完成。在這一步,我們建立了一個邏輯卷然後與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 root9 Oct 28 12:48 ip-192.168.1.1:3260-iscsi-iqn.2006-01.com-lun-0 -&gt; ../../sdc

lrwxrwxrwx 1 root root9 Oct 28 05:54 pci-0000:00:07.1-ide-0:0 -&gt; ../../hdc

lrwxrwxrwx 1 root root9 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:0:0 -&gt; ../../sda

lrwxrwxrwx 1 root root10 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:0:0-part1 -&gt; ../../sda1

lrwxrwxrwx 1 root root10 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:0:0-part2 -&gt; ../../sda2

lrwxrwxrwx 1 root root9 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:1:0 -&gt; ../../sdb

lrwxrwxrwx 1 root root10 Oct 28 05:54 pci-0000:00:10.0-scsi-0:0:1:0-part1 -&gt; ../../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

Setting up iSCSI targets: Logging in to [iface: default, target: iqn.2006-01.com, portal: 192.168.1.1,3260]

(5)驗證

[root@centos]# ls -l /dev/iscsi/*

lrwxrwxrwx 1 root root 6 Oct 28 14:16 /dev/iscsi/san -&gt; ../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. 這個就是一個絕地位置。

本文轉自東方之子736651CTO部落格,原文連結:http://blog.51cto.com/ecloud/1378732 ,如需轉載請自行聯系原作者

繼續閱讀