Amazon EC2 提供的 Storage 種類

Amazon EC2 提供三種Storage種類給 VPC 使用,它們分別是

  1. Amazon Elastic Block Store ( 簡稱 EBS )
  2. Amazon EC2 Instance Store
  3. Amazon Simple Storage Service ( 簡稱 S3 )

除了蚊型 instance t1.micro 沒有 Instance Store ,其餘的 Amazon EC2 instance type 都可以使用這三種不同 Storage。


( 上圖乃取自http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Storage.html )

以我的理解,EBS 及 Instance Store 可以作為 VPC 的 primary storage,意即可以直接掛載 (mount) 於主機上,格式化(format) 並設置檔案系統 (filesystem),主機程序可以直接利用 File I/O 來存取 EBS 及 Instance Store 上的資料。

EBS 和 Instance Store 的主要分別如下:

  • 如果當VPC Instance Stop (停止) 或 Terminate (終止),儲存於EBS的資料是可以保存下來 (persist),而儲存於Instance Store 的資料將會遺失 (non-persist)。
  • EBS Volume 可以掛載上不同的 instance,而 Instance Store 就一定要跟隨同一個 instance。
  • (這個分別是很重要的) EBS 是按容量及 I/O 收費,而 Instance Store 是跟隨您所選用的 instance ( t1.micro 除外)而不用額外收費。

所以,Instance Store 只適宜存放一些 temporary data、cache data、staging data,一些 transient 或失去了也無關痛癢的資料。至於,重要以及需要保存的資料,就建議存放於 EBS Volume 上。EBS Volume 另外的一大好處是,它跟 SAN Disk 十分類似,可以隨時 attach 及 detach 到同一個availability zone 上不同的主機上,可以作為主機 failover 時的 high-availability storage。

至於 S3 Storage,是一個 online 的 secondary storage,有點類似 dropbox,存取是需要使用 API 或 webservices。收費是根據容量、數據傳送量(同一個 EC2 Region 間傳送量則全免)、及運行了多少個 GET、PUT 等指令。Amazon EC2 亦有提供把 EBS Snapshot 到 S3 的服務,所以作為資料備份或與對外的資料傳送,S3 是一個不錯的選擇。

t1.micro Instance 的 Storage 策略

1. 添加虛擬記憶體 ( Swap space )

Amazon EC2 免費的 t1.micro instance 只有 613 MB 的內存,但原生並沒有提供 swap space 的虛擬記憶體,運行中程序如果需要更多的記憶體而主機未能滿足時,程序有可能會因此而掛掉。而虛擬記憶體可以暫時彌補記憶體不足的問題,用儲存空間讓記憶體騰空 ( page-in) 一些記憶體出來讓當前運行中的程序使用,但由於 page-in 、page-out 涉及 Disk I/O ,所以效能會比較慢,但可避免程序因記憶體不足而掛掉。

為了提昇博客網站的 Availability,添加 swap space 是必需的。

正路來說,由於 swap space 是暫存的記憶體,用 Instance Store 來實作 swap space 本是最合適的選擇,兼可以免費無限 page-in 、page-out。可是 t1.micro instance 並不提供 Instance Store,所以我們只好用 EBS 來作為 instance 的 swap space。

建立 EBS Volume
建立 EBS Volume

如上圖,首先於 Amazon EC2 Management Console 建立一個 1GB 的 ESB Volume。

然後選擇新建立的 EBS Volume 並把它 attach 到正在運行中的 Instance 。 (無錯,是 hot attach 的,不用把主機停止)

接上 EBS Volume
接上 EBS Volume

Management Console 會找出合適的 Instance 並提供一個 device 路徑 (e.g. /dev/sdh )。您可能會得到一個不同的 device 路徑,但這個並不重要。現在把 device 路徑記下來,如果現在見到的是 /dev/sdh ,在 Instance 上,它的實際路徑將會是 /dev/xvdh 。 ( 把 “s” 換掉成 “xv” 便是了)

然後 SSH 登入 Instance ,修改 /etc/fstab ( 用 root 權限 ) 並加入

/dev/xvdh      swap      swap      defaults      0      0

執行以下的命令:

sudo mkswap -f /dev/xvdh
sudo swapon /dev/xvdh

( 當然要把上面的 /dev/xvdh 路徑修正為閣下 Instance 的路徑 )

完成後,恭喜您!您已經成功建立了一個 1GB 的虛擬記憶體給這個蚊型 t1.micro Instance 。您大可以利用以下的命令來証實它的存在。

free -m
             total       used       free     shared    buffers     cached
Mem:           598        486        112          0         86        266
-/+ buffers/cache:        133        465
Swap:         1023          0       1003

2. 添加掛載點 ( Mount Point )

我用的 Amazon Machine Image ( AMI ) 是 32bits 的 Amazon Linux。創建的時候,Amazon EC2 用了一個 8GB 的 EBS Storage 來安放整個 OS Image 。除了 root “/” 掛載點外,原生並沒有提供其他掛載點。

實際上,整個 Amazon Linux OS 大概只佔用 1GB 的 EBS 容量,如果網站的容量需求不大,相信剩餘的空間應該足夠應付一段時間。

但我就建議大家多建立一個 EBS Mount Point 來存放網站的資料 (Data),可以享受以下的好處。

  1. 便於管理和備份 (尤其當你選擇利用 Amazon S3 Snapshot 作為備份的時候)
  2. 可以讓資料獨立地 attach 到其他座落於同一個 Availability Zone 的 Instance 上,而無須連帶 OS 和 executables 同時掛上

Amazon Linux OS 的設計是把資料 (Data) 存放於 /var 掛載點內,這裡的資料包括 MySQL 數據庫中的 Data、系統日誌 (system logs)、Mail、WWW 文檔 (e.g. WordPress HTML / PHP / Image Media 等等。

如果想把 /var 的內容搬移到其他掛載點,可以參考以下的步驟,

  1. 首先依照上文的方法於 AWS Management Console 建立並 Attach 合適容量的 EBS Volume 到 EC2 Instance 上並記下 Device 路徑。Amazon EC2 free tier 提供1年免費 30GB 的 EBS 容量,扣除本身所用到的 8GB OS 和 1GB Swap Space,大家應該還有 21GB 可供應用。
  2. 然後 SSH 登入 Instance,執行以下的命令來格式化新加入的 EBS Volume (假設新建的 device 是 /dev/xvdg )
    sudo mkfs -t ext4 /dev/xvdg
  3. 完成後,把新的 device 暫時掛載到 /mnt 之下
    sudo mount /dev/xvdg /mnt
  4. 然後把 /var 的內容 copy 到新的 EBS Volume 上
    sudo cp -rp /var/* /mnt
  5. 完成後,修改 /etc/fstab  ( 用 root 權限 ) 並加入以下
    /dev/xvdg       /data   ext4    defaults        0       0
  6. 最後,重啟 (Reboot) Instance。您新建立的 EBS Volume 應該就掛載到 /var 之上,您可以利用 df 命令來檢查
    df
    Filesystem     1K-blocks    Used Available Use% Mounted on
    /dev/xvda1       8125880 1367424   6658188  18% /
    devtmpfs          294748      20    294728   1% /dev
    tmpfs             306660       0    306660   0% /dev/shm
    /dev/xvdg        1998672   41320   1836112   3% /var
    
Chrysanth WebStory WebStory: Let’s Blog n Roll!
Amazon EC2 架站 – Storage 篇
標籤:                        

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *