什麼是 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.
Brantley Coile 試圖在 IP SAN 下提供另外一種便宜(使用 (S)ATA 的硬碟)和高效能(不依賴 TCP / IP)的選擇.
AoE 如何在網路上工作
基本上和 iSCSI 一樣 AoE 也分為 Target 和 Initiator(Target 指的是 "提供磁碟" 的伺服器端,Initiator 指的是 "使用磁碟" 的主機端.)
- AoE initiator 以廣播(broadcasts)的方式在網路傳送包含 AoE configuration 訊息去尋找 AoE target 端. 這些廣播 Initiators 會定期的傳送.
- AoE targets 端接收到 Initiator 所指定訊息後,會將 AoE 有效的 storage volumes 傳送給 Initiator 端.
- AoE initiator 傳送給 Target 端的 AoE 訊息會夾帶一個唯一的 tag 用來辨識是由哪個 Initiator 給 Target 端的.而完整的訊息還會包含 ATA 磁碟的指令.
- AoE targets 會依據 tag 來回應給特定的 Initiator 端並執行 AoE messages 所包含的 disk read/write 指令.
- 如果 Initiator 傳送給 Target 端的訊息沒回應時會重新傳送這訊息.
RHEL5 – AoE 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.
RHEL5 – AoE 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
RHEL5 – AoE 其他
剛剛有說到一個參數 -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
One thought on “IP SAN – AoE(ATA-over-Ethernet)”