fbpx

實作 Linux Ceph File Copy Script

為什麼要用 Distributed Object Storage 呢?除了酷炫之外,有一個很大的好處就是可以 Scale-out 水平擴充。AWS S3 目前算是最常被使用的 Object Storage,但是都是收費的模式,如果想要自己搞 Distributed Object Storage 的話當然也有 Open Source 且免費的 CEPH Project 可以用。CEPH 的架構如下:

http://docs.ceph.com/docs/master/architecture/

RADOSGW 就是傳說中的 Rados Gateway,提供了與 S3 API 相容的 REST Interface,早期 Ceph 的版本在 RadosGW 有非常大的效能瓶頸,許多廠商都自己透過 LIBRADOS 重新實作 REST Interface,但聽說在新版的 Ceph 已經有很大的改進,但我也還在測試中,我相信 Ceph 會越來越成熟,就不需自己硬幹實作囉。

最近常常要測試 Ceph RadoaGW API 傳檔與讀檔,也想備份 Linux OS 中的重要檔案到 Ceph,好像沒有發現比較好用的程式,大部分的範例都是實作 AWS S3 的版本。雖然說 API 是相容,但是實際上還是有一點點不一樣,像是 Bucket Name 在 Ceph 中是透過 URI 而非 Hostname 來傳送。其他的地方就真的完全一樣,可以無痛轉移,反正大家都抄 AWS 就對了,阿里雲的 OSS 也是用幾乎一樣的規格,只差在 Siganture Prefix 不同,對開發者來說也比較方便,用起來都差不多。

要在 Linux 上傳或下載檔案,要呼叫 HTTP 當然第一個想到的就是 curl 命令,呼叫 API 的過程中有一些產生 Signature 的步驟比較麻煩,拜了 Google 大神後,把方法寫成 Script 可以方便以後使用,程式放在 GitHub,使用的方法如下:

一開始可以透過以下命令設定組態,會將連線設定儲存於 ~/.ceph-cp.conf 檔案中:

./ceph-cp --init

要將本地檔案複製到 Ceph 所指定的 Bucket 中可以用以下命令:

./ceph-cp [filename] [remote path]@[bucket]

從複製 Ceph Service 複製檔案回來本地使用以下命令

./ceph-cp [remote path]@[bucket] [filename]

如果沒有設定 --init,也可以直接指定 Service Key, Secret, Host 進行呼叫,如下:

./ceph-cp -h http://192.168.0.1 -k ESe8dJDS3988duy -s 48FDg4DFIjeiwe4e90

需要的人請自行服用,謝謝。