3,296 瀏覽數

IP SAN – AoE(ATA-over-Ethernet)

AoE(一) 什麼是 AoE(ATA-over-Ethernet)

AoE 是由一家叫做 Brantley Coile Company (http://www.coraid.com/) 的公司所開發出來的一項協定.AoE 是 IP SAN 的一個成員,主要的工作跟 iSCSI 一樣將本地端的硬碟以 Raw device 的方式透過網路去分享,而 iSCSI 是將 scsi 的指定封裝在 Enternet 的封包,再透過網路去傳送 SCSI 的指令.但不同之處是 AoE 使用的 ATA 指令,而且不透過 TCP / IP 的傳送,直接將指令封裝在Enternet 的訊框(frames)也因此不過 AoE 的資料無法 Routing.
aoe01
Brantley Coile 試圖在 IP SAN 下提供另外一種便宜(使用 (S)ATA 的硬碟)和高效能(不依賴 TCP / IP)的選擇.

AoE(二) AoE 如何在網路上工作

基本上和 iSCSI 一樣 AoE 也分為 Target 和 Initiator(Target 指的是 "提供磁碟" 的伺服器端,Initiator 指的是 "使用磁碟" 的主機端.)
aoe02

  1. AoE initiator 以廣播(broadcasts)的方式在網路傳送包含 AoE configuration 訊息去尋找 AoE target 端.  這些廣播 Initiators 會定期的傳送.
  2. AoE targets 端接收到 Initiator 所指定訊息後,會將 AoE 有效的 storage volumes 傳送給 Initiator 端.
  3. AoE initiator 傳送給 Target 端的 AoE 訊息會夾帶一個唯一的 tag 用來辨識是由哪個 Initiator 給 Target 端的.而完整的訊息還會包含 ATA 磁碟的指令. 
  4. AoE targets 會依據 tag 來回應給特定的 Initiator 端並執行 AoE messages 所包含的 disk read/write 指令.
  5. 如果 Initiator 傳送給 Target 端的訊息沒回應時會重新傳送這訊息.

AoE(三) RHEL5 – Target

AoE Target 程式非標準 RHEL5 內建,所以先到  http://sourceforge.net/projects/freshmeat_vblade/ 下載. AoE Target 的名稱是 vblade 這 vblad 跟刀鋒伺服器有關係嗎???

1.解開 vblade-19.tgz

[root@benjr ~]# tar zxvf vblade-19.tgz
[root@benjr ~]# cd vblade-19

2.編譯

[root@benjr vblade-19]# make
gcc -Wall -g -O2 -c aoe.c
gcc -Wall -g -O2 -c bpf.c
gcc -Wall -g -O2 -c linux.c
gcc -Wall -g -O2 -c ata.c
gcc -o vblade aoe.o bpf.o linux.o ata.o
[root@benjr vblade-19]# make install
install vblade /usr/sbin/
install vbladed /usr/sbin/
install vblade.8 /usr/share/man/man8/

這樣 Taget 端程式就已經安裝好了.接下來就是將本地端的硬碟以 ATA 指定將 Raw device 的裝置透過網路去分享.這種技術被稱為 virtual EtherDrive (R) blade,也就是程式的名稱 vblade 的由來.

vblade 是以程式的方式存在不是使用 service 的方式所以在在開機時就指定需要將下面的內容寫到 /etc/rc.local .

[root@benjr ~]# vblade 1 0 eth0 /dev/xvdb1

主要的參數:

vblade [ -m mac[,mac…] ] shelf slot netif filename

  • shelf:  在 AoE Inititaor 端時所呈現硬碟裝置名稱方式.AoE Target 將硬碟排列方式像是以書架的方式來呈現.這裡的 Shelf 就是指定哪一個書架(major AoE address).
  • slot:   slot 就是指定哪個書架的哪一個地方 (minor AoE address) .以上面的例子. AoE Initiator 就會看到 /dev/etherd/e1.0 -> vblade 1 0 這個裝置!
  • netif: 如果系統尚包含多個網路裝置時我們可以指定由哪一個 ethernet 分享 AoE 傳輸.
  • filename: AoE Target 端要分享的裝置可以事實體硬碟裝置 /dev/sdb1 或是檔案模式(image)皆可!
  • mac: 因為 iSCSI 是透過 IP 為基礎所以可以指定限定由哪些 IP 來存取,但是 AoE 不透過 IP 層所以要限制就只能透過鎖定 mac address.

AoE(四) RHEL5 – Initiator

目前 RHEL5 已經包含了 AoE Initiator 端的程式,如果是想要使用新版會是在其他作業系統下可以上官方網站查詢 http://support.coraid.com/support/linux/

只要 AoE Target 端和 Initiator 端來接在相同的網路上(不透過 Router 的裝置),就可以直接存取!使用上也很簡單,只要將 driver(module) "aoe" 載入系統就可以看到由 AoE Target 端所分享出來的硬碟.

[root@localhost ~]# modprobe aoe
[root@localhost ~]# fdisk -l
Disk /dev/xvda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *           1          13      104391   83  Linux
/dev/xvda2              14        2610    20860402+  8e  Linux LVM

Disk /dev/etherd/e1.0: 5362 MB, 5362882048 bytes
255 heads, 63 sectors/track, 651 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/etherd/e1.0 doesn't contain a valid partition table

裝置名稱會依據 AoE Target 所設定有所不同依據 shelf 和 slot 這兩個參數來決定 /dev/etherd/e1.0 名稱.不用時也只需將 driver(module) "aoe" 移除系統就可以了.

[root@localhost ~]# rmmod aoe

AoE(五) RHEL5 – 其他

剛剛有說到一個參數 -m mac AoE Target 就是透過這去限制 AoE Initiator 存取.所以一開始我們就必須知道 Initiator 的 mac address.

[root@localhost ~]# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr FA:3A:FB:4A:6B:90 
          inet addr:192.8.1.249  Bcast:192.8.1.255  Mask:255.255.255.0
          inet6 addr: fe80::f83a:fbff:fe4a:6b90/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:138769635 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4286 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:19055124723 (17.7 GiB)  TX bytes:472401 (461.3 KiB)

回到 AoE Target 端,剛剛也說過不一定要實體體裝置檔案模式(image)也可!先來建立一個檔案模式(image).

[root@benjr ~]# dd if=/dev/zero of=vdisk.img bs=512k count=10240
  • if=/dev/zero :檔案內容將都為 "0"
  • of=vdisk.img :就是 output file 檔案模式(image).
  • bs : 規劃的一個 block 的大小,如果沒有設定時,預設是 512 bytes
  • count : 多少次個 bs 的意思.

512kB*10240=5GB

[root@benjr ~]# vblade -m FA:3A:FB:4A:6B:90 1 0 eth0 vdisk.img
[root@localhost ~]# fdisk -l
Disk /dev/xvda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *           1          13      104391   83  Linux
/dev/xvda2              14        2610    20860402+  8e  Linux LVM

Disk /dev/etherd/e1.0: 5362 MB, 5362882048 bytes
255 heads, 63 sectors/track, 651 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/etherd/e1.0 doesn't contain a valid partition table

參考資料:
http://kate.babyface.com.tw/NetAdmin/07200608AoE/

http://support.coraid.com/support/linux/quick-install/installAoEtoolsRedHatCentOSFedora.pdf

http://www.coraid.com/TECHNOLOGY/How-AoE-Works

http://linux.die.net/man/8/vblade

http://www.coraid.com/TECHNOLOGY/What-is-AoE

http://en.wikipedia.org/wiki/ATA_over_Ethernet

網友的想法

  1. 自動參照通知: NAS/SAN | Benjr.tw

發表迴響