在雲端時代,有效管理和佈署服務至關重要。RiakCS 和 Apache Whirr 正是兩大利器,能協助我們構建穩固且高效的雲端架構。RiakCS 提供了 S3 相容的物件儲存方案,與 CloudStack 整合,實作高擴充套件性和可靠性;而 Apache Whirr 則簡化了 Hadoop 等分散式系統的佈署流程,讓複雜的組態變得輕而易舉。

RiakCS 建立在分散式 NoSQL 資料函式庫 Riak 之上,具備高用性和容錯能力。它採用最終一致性原則管理資料複製,在確保可用性的同時,兼顧大規模分散式系統的需求。透過與 CloudStack 整合,RiakCS 可作為第二儲存空間,儲存範本或提供公開服務,為雲端架構增添了強大的儲存根本。

Apache Whirr 則是一個用於執行雲端服務的函式庫集合,透過 jclouds 與 CloudStack 互動。它最初用於在 Amazon EC2 上佈署 Hadoop 叢集,現在已發展成更全面的工具,支援 Elasticsearch、Cassandra 等多種服務的佈署。Whirr 根據 Java 開發,能自動化虛擬機器叢集的建立過程,大幅降低佈署複雜度。

RiakCS:開發你的 S3 儲存王國

RiakCS 讓你在 CloudStack 中輕鬆擁有 S3 相容的儲存方案,不論是遷移現有 NFS 儲存或是建立全新儲存空間,都能輕鬆搞定。

遷移 NFS 儲存到 RiakCS:玄貓的無痛遷移術

  1. 準備 RiakCS 叢集: 首先,你需要一個運作正常的 RiakCS 叢集。
  2. 設定 CloudStack 使用者: 在 RiakCS 中建立一個 CloudStack 專用使用者,並取得存取金鑰和密碼金鑰。
  3. 組態 CloudStack S3 儲存: 參考 CloudStack 檔案,設定 S3 相容的第二儲存空間,並使用 RiakCS 使用者的金鑰進行驗證。

s3curl:RiakCS 帳戶管理的秘密武器

s3curl 這個 Perl 指令碼,能讓你更有效率地管理 RiakCS 帳戶。透過修改指令碼中的端點設定,並搭配存取金鑰,你可以輕鬆建立使用者、列出使用者資訊等操作。 建議建立 ~/.s3curl 檔案儲存金鑰資訊,避免在命令列中暴露密碼,提升安全性。

CloudStack 整合 RiakCS:兩種方式一次搞定

  • updatecloudToUseObjectStore API: 如果已經有 NFS 第二儲存空間,使用這個 API 就能無痛遷移到 RiakCS。
  • addImageStore API: 如果沒有現有的第二儲存空間,使用這個 API 就能直接新增 RiakCS 作為新的儲存空間。

Apache Whirr:Hadoop 叢集佈署的最佳拍檔

Whirr 簡化了在 CloudStack 上佈署 Hadoop 叢集的流程,讓你告別繁瑣的組態工作。

安裝 Whirr:快速上手三步驟

  1. 取得 Whirr: 你可以下載壓縮檔或直接從 Git 儲存函式庫克隆。
  2. 使用 Maven 建置: 執行 mvn install 命令完成建置。
  3. 設定環境變數: 將 Whirr 的二進位檔案路徑加入 PATH 環境變數。

Whirr 組態技巧:玄貓不藏私大公開

Whirr 的組態檔案 whirr-properties.properties 存放了所有必要的設定,包含 CloudStack 端點、叢集名稱、虛擬機器型別、映像 ID 等資訊。設定正確的 API 金鑰和密碼金鑰,才能讓 Whirr 順利與 CloudStack 溝通。

佈署 Hadoop 叢集:一鍵搞定

完成 Whirr 的組態後,執行 whirr launch-cluster 命令就能自動化佈署 Hadoop 叢集。Whirr 會根據你的設定,在 CloudStack 上建立虛擬機器,並安裝 Hadoop 相關軟體,讓你省時省力。

總結:雲端佈署,就靠 RiakCS 和 Apache Whirr

RiakCS 和 Apache Whirr 是雲端架構佈署的兩大利器,前者提供 S3 相容的物件儲存,後者簡化分散式系統的佈署流程。透過本文的介紹,相信你已經掌握了 RiakCS 和 Apache Whirr 的使用方法和組態技巧,能夠更有效率地管理和佈署雲端服務。

進階應用佈署與雲端基礎架構強化

本章涵蓋了一些進階工具和使用案例,重點在於應用程式佈署和雲端基礎架構的強化。例如,Fluent 是一個日誌聚合框架,可用於監控環境中儲存和分析日誌。結合 MongoDB 或 Elasticsearch,它將成為一個非常強大的工具。RiakCS 是一個可擴充套件的分散式物件儲存,由 Basho 建立,並提供與 S3 相容的 API。與 EC2Stack 等工具結合使用,它可以幫助你建構 EC2/S3 複製品。Apache Whirr 是一個自動化工具,用於建立形成完整分散式系統的虛擬機器叢集。本章將使用 Whirr 來佈建 Hadoop 叢集。

本章將總結整個生態系統,從安裝、客戶端、封裝器、組態管理和軟體開發工具到應用程式佈署、監控和高階服務。

使用 Fluentd 收集 CloudStack 日誌與事件

Fluentd 是一個開源軟體,用於以 JSON 格式收集事件和日誌。它有數百個外掛程式,允許你將日誌/事件儲存在你喜歡的資料儲存中,例如 AWS S3、MongoDB 甚至 Elasticsearch。它相當於 logstash。原始碼可在 GitHub 上取得,但也可以透過你喜歡的套件管理器(例如 brew、yum、apt、gem)安裝。CloudStack 外掛程式監聽 CloudStack 事件,並將這些事件儲存在選擇的儲存後端中。本章將展示如何使用 Fluent 將 CloudStack 日誌儲存在 Elasticsearch 中。注意,使用 logstash 也可以做同樣的事情。

問題:你想要使用 Fluent 來聚合資料中心中各種系統的日誌。

解決方案:安裝 Fluent Ruby gem,產生組態檔案,然後啟動 fluentd 外掛程式。

討論:你需要在機器上安裝可用的 fluentd。選擇你喜歡的套件管理器並安裝 fluentd。例如,使用 gem:

$ sudo gem install fluentd

現在 fluentd 應該在你的路徑中。你需要建立一個組態檔案,並使用此組態啟動 fluentd。若要取得 fluentd 的其他選項,只需輸入 fluentd -h-s 選項將在工作目錄中建立一個範例組態檔案。-c 選項將使用特定的組態檔案啟動 fluentd。然後,你可以使用 fluent-cat 將測試日誌/事件訊息傳送到正在執行的程式:

$ fluentd -s conf
$ fluentd -c conf/fluent.conf &
$ echo '{"json":"message"}' | fluent-cat debug.test

組態 CloudStack Fluentd 外掛程式

問題:CloudStack 有一個 listEvents API,顧名思義,它會列出 CloudStack 佈署中發生的事件。例如,它可以列出虛擬機器的啟動和停止、安全群組的建立、儲存元素的生命週期事件、快照等等。

解決方案listEvents API 有完善的說明檔案。Yuichi UEMURA 主要根據此 API 和 Fog Ruby 函式庫,編寫了一個適用於 fluentd 的 CloudStack 外掛程式。它與使用 logstash 略有不同,因為使用 logstash,你可以格式化 CloudStack 管理伺服器的 log4j 日誌並直接收集這些日誌。這裡我們依賴 listEvents API。

討論:你可以透過 GitHub 從原始碼安裝外掛程式:

$ git clone https://github.com/u-ichi/fluent-plugin-cloudstack

然後建構你自己的 gem 並使用以下命令安裝它:

玄貓認為,透過 knife-cloudstack 管理 CloudStack 資源,能有效簡化雲端環境的操作。然而,在組態 Egress 規則時,需要特別注意網路安全,確保只有必要的流量才能透過。


### 活用 Fluentd 監控 CloudStack:從入門到 MongoDB 資料儲存

在雲端環境中,監控和日誌分析至關重要。Fluentd 是一個開源的資料收集器,能幫助我們集中管理來自不同來源的日誌。本文將介紹如何使用 Fluentd 搭配 CloudStack 外掛,有效監控 CloudStack 環境,並將資料儲存至 MongoDB,以便後續分析。

### 安裝與設定 CloudStack Fluentd 外掛

首先,你需要安裝 `fluent-plugin-cloudstack` 這個 gem。這個外掛能讓 Fluentd 從 CloudStack API 收集事件和使用量資訊。

```bash
sudo gem build fluent-plugin-cloudstack.gemspec
sudo gem install fluent-plugin-cloudstack-0.0.8.gem

或者,你也可以直接安裝:

sudo gem install fluent-plugin-cloudstack

安裝完成後,使用 fluentd -s conf 產生一個設定檔。編輯這個設定檔,將 CloudStack 設定為資料來源。以下是一個範例:

<source>
  type cloudstack
  host localhost
  apikey $cloudstack_apikey
  secretkey $cloustack_secretkey
  # 選填
  protocol http # https 或 http, 預設 https
  path /client/api # 預設 /client/api
  port 8080 # 預設 443
  interval 300 # 最小 300, 預設 300
  ssl false # true 或 false, 預設 true
  domain_id $cloudstack_domain_id
  tag cloudstack
</source>

內容解密

  • type cloudstack: 指定資料來源為 CloudStack 外掛。
  • host: CloudStack 主機位址。
  • apikeysecretkey: CloudStack API 的金鑰。
  • protocol: 通訊協定,可以是 httphttps
  • path: API 路徑,預設為 /client/api
  • port: API 埠,預設為 443
  • interval: 資料收集間隔,單位為秒,最小為 300
  • ssl: 是否使用 SSL 加密。
  • domain_id: CloudStack 網域 ID。
  • tag cloudstack: 設定標籤為 cloudstack,方便後續比對。

接著,定義一個 <match> 區塊,將事件輸出到標準輸出(stdout):

<match cloudstack.**>
  type stdout
</match>

使用 fluentd -c conf/fluent.conf & 啟動 Fluentd。瀏覽 CloudStack UI,建立 VM 和服務方案。一段時間後,你應該能在 stdout 看到事件輸出。

將資料儲存至 MongoDB

雖然將事件輸出到 stdout 很有趣,但更實用的是將資料儲存到資料函式庫或搜尋索引中。玄貓將示範如何使用 MongoDB 儲存 CloudStack 事件。

安裝與設定 MongoDB

首先,你需要安裝 MongoDB。在 macOS 上,可以使用 Homebrew:

brew install mongodb

對於其他作業系統,請使用適當的套件管理器。啟動 MongoDB:

sudo mongod --dbpath=/path/to/your/databases

建立一個 fluentd 資料函式庫和一個具有讀寫許可權的 fluentd 使用者:

sudo mongo
> use fluentd
> db.createUser({user:"fluentd", pwd: "foobar", roles: ["readWrite", "dbAdmin"]})

安裝 fluent-plugin-mongo

使用 gem 安裝 fluent-plugin-mongo

sudo gem install fluent-plugin-mongo

修改 Fluentd 設定檔

修改 Fluentd 設定檔,使用 MongoDB 作為輸出後端:

# 單一 MongoDB
<match cloudstack.**>
  type mongo
  host fluentd
  port 27017
  database fluentd
  collection test
  # 適用於固定大小集合
  capped
  capped_size 1024m
  # 驗證
  user fluentd
  password foobar
  # 清除
  flush_interval 10s
</match>

內容解密

  • type mongo: 指定輸出外掛為 MongoDB。
  • host: MongoDB 主機位址。
  • port: MongoDB 埠,預設為 27017
  • database: 資料函式庫名稱。
  • collection: 集合名稱。
  • capped: 是否使用固定大小集合。
  • capped_size: 固定大小集合的大小。
  • userpassword: MongoDB 使用者名稱和密碼。
  • flush_interval: 資料清除間隔,單位為秒。

玄貓使用經驗分享

在為某金融科技公司設計分散式系統時,玄貓發現集中日誌管理對於問題追蹤和系統分析至關重要。透過 Fluentd 搭配 MongoDB,我們能夠即時監控系統狀態,並快速定位問題。


### 玄貓駕到:Fluentd與MongoDB的完美結合

在資料處理的世界裡,將日誌和事件導向正確的地方至關重要。Fluentd,作為一個開源的資料收集器,能夠將各種來源的資料轉換並導向不同的目的地。今天,玄貓將帶領大家探索如何使用 Fluentd 將資料儲存到 MongoDB,並分享一些實際操作的技巧。

首先,確保你已經安裝了 Fluentd 和 MongoDB。接著,你需要安裝 Fluentd 的 MongoDB 外掛。這可以透過 gem 來完成:

```bash
gem install fluent-plugin-mongo

安裝完成後,組態 Fluentd 以連線到你的 MongoDB 例項。以下是一個範例組態:

<match your_tag_pattern>
  @type mongo

  # MongoDB 連線設定
  database fluentd
  collection test
  host localhost
  port 27017
  user fluentd
  password foobar

  # 錯誤處理
  flush_interval 10s
  retry_wait 1s
  max_retry_wait 30s
</match>

在這個組態中,your_tag_pattern 定義了哪些帶有特定標籤的事件將被導向 MongoDB。請注意,針對同一個標籤模式,你不能有多個 match 區塊。

為了在 Mongo 中檢視事件和使用情況,只需啟動 Mongo shell 並列出集合。你將會看到 test 集合:

mongo -u fluentd -p foobar fluentd

接著,你可以使用 MongoDB 的指令來查詢和分析資料:

coll=db.getCollection('test')
coll.count()
coll.findOne()

Fluentd 還有其他資料儲存外掛,包括一個非常有趣的 Elasticsearch 外掛。

玄貓私房秘技:Basho Riak CS物件儲存實戰

CloudStack 負責 IaaS 雲的運算端,提供虛擬機器佈建的管理功能。雲的儲存端通常由可擴充套件、容錯的物件儲存來實作。Ceph 和 Basho 的 RiakCS 是當今最受關注的兩個物件儲存。玄貓將帶領大家快速瀏覽 RiakCS。CloudStack 與 RiakCS 整合用於二級儲存,它們可以共同提供一個 EC2 和一個真正的 S3 介面,並由可擴充套件的物件儲存提供支援。

RiakCS(雲儲存)可以被視為 S3 後端實作,它根據 Riak。Riak 是一個高可用性分散式 NoSQL 資料函式庫。一致性雜湊演算法使 Riak 能夠在節點消失(例如,故障)和節點出現(例如,容量增加)時重新平衡資料;它還允許你使用最終一致性原則來管理資料複製,這在大規模分散式儲存系統中很常見,這些系統偏好可用性而不是一致性。

玄貓解題:使用分散式、可擴充套件的物件儲存

如果你想要使用分散式、可擴充套件的物件儲存作為映像目錄的儲存後端,並且想在你的本機上熟悉 RiakCS,該怎麼做呢?

要獲得一個可運作的 RiakCS 儲存,我們需要 Riak、RiakCS 和 Stanchion。Stanchion 是一個序列化傳送到 RiakCS 的 HTTP 請求的介面。所有三個系統都可以從二進位檔案安裝。

玄貓經驗分享:Riak叢集建立

讓我們先從 Riak 開始,在本機上建立一個叢集。Basho 有一些很棒的檔案;最困難的事情是安裝 Erlang(但這只需要幾分鐘),檔案提供了幾乎所有作業系統的逐步說明。

玄貓就不再重新建立逐步說明瞭,因為檔案已經很棒了。重點是,透過快速入門,我們可以在本機主機上建立一個 Riak 叢集。我們將啟動五個 Riak 節點(當然,我們可以啟動更多)並將它們加入到一個叢集中。這很簡單:

bin/riak start
bin/riak-admin cluster join dev1@127.0.0.1

其中 dev1 是第一個啟動的 Riak 節點。建立這個叢集將重新平衡環:

================================= Membership ==================================
Status Ring Pending Node
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
valid 100.0% 20.3% 'dev1@127.0.0.1'
valid 0.0% 20.3% 'dev2@127.0.0.1'
valid 0.0% 20.3% 'dev3@127.0.0.1'
valid 0.0% 20.3% 'dev4@127.0.0.1'
valid 0.0% 18.8% 'dev5@127.0.0.1'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

riak-admin 指令是一個管理叢集的好 CLI。我們可以檢查剛剛建立的叢集的成員資格,經過一段時間後,環將重新平衡到預期的狀態:

dev1/bin/riak-admin member-status

你可以透過放入一個映像來測試你的叢集,如檔案中所述,並在瀏覽器中檢索它(例如,一個 HTTP GET):

curl -XPUT http://127.0.0.1:10018/riak/images/1.jpg \
-H "Content-type: image/jpeg" \
--data-binary @image_name_.jpg

在瀏覽器中開啟 http://127.0.0.1:10018/riak/images/1.jpg

玄貓小提示:Ubuntu 12.04 安裝 RiakCS

要繼續前進並建立一個完整的 S3 相容物件儲存,你可以在 Ubuntu 12.04 機器上設定所有東西。你需要多個節點才能真正利用 Riak 的分散式特性,但從一個節點開始會讓你順利前進。

設定 basho 軟體包儲存函式庫,並使用軟體包管理器來取得 riak、riak_cs 和 stanchion 二進位檔案。然後編輯組態檔案,並檢查你是否可以在 RiakCS 中儲存一個物件。

總之,透過這些步驟,你可以開始使用 Fluentd 將資料儲存到 MongoDB,並熟悉 RiakCS 物件儲存。希望這些資訊對你有所幫助!

RiakCS:開發你的S3相容雲端儲存服務

在雲端儲存的世界裡,RiakCS 以其獨特的 NoSQL 分散式資料函式庫架構,提供了一個與 S3 相容的解決方案。這意味著你可以使用熟悉的 S3 客戶端工具和 API,來管理 RiakCS 上的物件,同時享受 Riak 作為後端資料函式庫所帶來的擴充套件性和可靠性。

Ubuntu 12.04 上 RiakCS 的安裝與設定:玄貓的建議

雖然 Ubuntu 12.04 已經是相當舊的版本,但我們還是可以從中學習到 RiakCS 的安裝佈署流程。以下是在 Ubuntu 12.04 上安裝 RiakCS 的步驟,以及玄貓的一些建議:

  1. 加入 Basho 軟體函式庫

    首先,你需要設定 Basho 軟體函式庫。取得金鑰並新增 basho.list 檔案:

    # curl http://apt.basho.com/gpg/basho.apt.key | sudo apt-key add -
    # bash -c "echo deb http://apt.basho.com $(lsb_release -sc) main > /etc/apt/sources.list.d/basho.list"
    # apt-get update
    

    玄貓解說

    • 第一行使用 curl 下載 Basho 的 GPG 金鑰,並使用 apt-key add - 將金鑰加入系統信任的金鑰列表中,確保下載的軟體包是經過 Basho 官方簽署的,從而驗證其真實性和完整性。
    • 第二行建立 /etc/apt/sources.list.d/basho.list 檔案,並在其中新增一行文字,指定 APT 從 http://apt.basho.com 這個軟體函式庫下載軟體包。${lsb_release -sc} 會自動替換為當前 Ubuntu 版本的代號 (例如 precise, trusty, xenial 等),確保 APT 能夠找到對應版本的軟體包。
    • 第三行執行 apt-get update,更新 APT 的軟體包索引,使其包含 Basho 軟體函式庫中可用的軟體包資訊。
  2. 安裝 Riak、RiakCS 和 Stanchion

    接著,安裝 riakriak-csstanchion 軟體包:

    # apt-get install riak riak-cs stanchion
    

    玄貓解說

    • apt-get install riak riak-cs stanchion:這行命令指示 APT 從設定好的軟體函式庫中下載並安裝 riakriak-csstanchion 這三個軟體包。APT 會自動處理軟體包之間的依賴關係,確保所有必要的元件都被正確安裝。
  3. 確認執行檔路徑

    確認這些執行檔是否在你的路徑中:

    # which riak
    # which riak-cs
    # which stanchion
    

    你應該可以在 /usr/sbin 中找到它們。所有的設定檔都會在 /etc/riak/etc/riak-cs/etc/stanchion 中。請務必檢查 app.config,我們會在啟動所有服務之前修改它。

    玄貓建議

    • 使用 which 命令來確認 riakriak-csstanchion 這三個命令是否能夠在終端機中直接執行。如果 which 命令能夠找到這些命令,它會顯示這些命令的完整路徑,通常位於 /usr/sbin 目錄下。這表示系統已經正確設定了這些命令的執行路徑。
  4. 設定元件

    在啟動任何服務之前,我們需要設定每個元件。這表示要編輯各自 etc 目錄下的 app.config 檔案。對於 riak-cs,玄貓建議至少要設定 {anonymous_user_creation, true}。對於 stanchion,我使用預設的埠口,並且在沒有 SSL 的情況下,在本機執行所有服務,所以沒有做任何修改。只要確定你沒有在 8080 埠口上執行任何其他的應用程式,因為 riak-cs 預設會使用這個埠口。

    玄貓解說

    • anonymous_user_creation 引數設定為 true,允許匿名使用者建立帳戶。這在測試或開發環境中可能很有用,但在生產環境中,強烈建議將其設定為 false,以提高安全性。
  5. 啟動元件

    完成所有這些設定步驟後,你應該可以啟動所有三個元件:

    # riak start
    # riak-cs start
    # stanchion start
    

    你可以使用 riak pingriak-cs pingstanchion ping 來檢查每個元件的狀態。

    玄貓提醒

    • 在啟動這些服務之前,請務必仔細檢查你的設定檔,確保所有引數都已正確設定。錯誤的設定可能會導致服務啟動失敗或執行不正常。
  6. 為 RiakCS 建立管理員使用者

    # curl -H 'Content-Type: application/json' \
    -X POST http://localhost:8080/riak-cs/user \
    --data '{"email":"foobar@example.com", "name":"admin user"}'
    

    如果這個命令成功執行,表示你的設定運作正常。在回應中,我們會看到 API 金鑰和密碼:

    {"email":"foobar@example.com",
    "display_name":"foobar",
    "name":"admin user",
    "key_id":"KVTTBDQSQ1-DY83YQYID",
    "key_secret":"2mNGCBRoqjab1guiI3rtQmV3j2NNVFyXdUAR3A==",
    "id":"1f8c3a88c1b58d4b4369c1bd155c9cb895589d24a5674be789f02d3b94b22e7c",
    "status":"enabled"}
    

    玄貓建議

    • 請務必妥善保管這些金鑰,因為它們將用於管理你的 RiakCS 叢集。

    將這些金鑰放入你的 riak-cs 設定檔中。有 admin_keyadmin_secret 變數可以設定。然後使用 riak-cs restart 重新啟動。別忘了也將這些金鑰新增到 stanchion 設定檔 /etc/stanchion/app.config 中,並使用 stanchion restart 重新啟動。

    玄貓提醒

    • 在生產環境中,強烈建議使用更安全的方式來管理這些金鑰,例如使用環境變數或 Vault 等工具。

    在這個階段,你應該有一個功能完整的 RiakCS 叢集(只有一個節點),並且建立了一個管理員使用者。你可以使用管理員金鑰來建立另一個使用者。

使用 Python Boto 將資料儲存到 RiakCS

RiakCS 暴露了一個與 S3 相容的 API,你可能會想要使用 S3 客戶端來儲存和管理 RiakCS 中的物件。這時候,Python Boto 模組就能派上用場。

玄貓的解決方案:Python Boto

使用 Python Boto 模組(Recipe 4.4)編寫一個 Python 指令碼,來管理 buckets 並在這些 buckets 中設定一些物件。

玄貓解說

Riak-CS 是一個與 S3 相容的雲端儲存解決方案,所以我們應該可以使用像 Python Boto 這樣的 S3 客戶端來建立 buckets 並儲存資料。讓我們先安裝 Boto:

# apt-get install python-boto

然後開啟一個互動式 shell:

>>> from boto.s3.key import Key
>>> from boto.s3.connection import S3Connection
>>> from boto.s3.connection import OrdinaryCallingFormat
>>> apikey='KVTTBDQSQ1-DY83YQYID'
>>> secretkey='2mNGCBRoqjab1guiI3rtQmV3j2NNVFyXdUAR3A=='
>>> cf=OrdinaryCallingFormat()
>>> conn=S3Connection(aws_access_key_id=apikey,aws_secret_access_key=secretkey, \
...is_secure=False,host='localhost',port=8080,
...calling_format=cf)

玄貓解說

  • from boto.s3.key import Key: 匯入 boto.s3.key 模組中的 Key 類別,用於表示 S3 儲存桶中的物件 (key-value pair)。
  • from boto.s3.connection import S3Connection: 匯入 boto.s3.connection 模組中的 S3Connection 類別,用於建立與 S3 服務的連線。
  • from boto.s3.connection import OrdinaryCallingFormat: 匯入 boto.s3.connection 模組中的 OrdinaryCallingFormat 類別,用於指定 S3 API 的呼叫格式。
  • apikey='KVTTBDQSQ1-DY83YQYID': 設定 S3 帳戶的 API 金鑰,用於身份驗證。
  • secretkey='2mNGCBRoqjab1guiI3rtQmV3j2NNVFyXdUAR3A==': 設定 S3 帳戶的密碼金鑰,與 API 金鑰一起用於身份驗證。
  • cf=OrdinaryCallingFormat(): 建立 OrdinaryCallingFormat 物件,指定使用標準的 S3 API 呼叫格式。
  • conn=S3Connection(...): 建立與 S3 服務的連線。
    • aws_access_key_id=apikey: 使用 API 金鑰進行身份驗證。
    • aws_secret_access_key=secretkey: 使用密碼金鑰進行身份驗證。
    • is_secure=False: 設定為 False 表示使用 HTTP 連線 (不安全)。在生產環境中,強烈建議使用 HTTPS 連線。
    • host='localhost': 設定 S3 服務的主機名稱為 localhost
    • port=8080: 設定 S3 服務的埠號為 8080
    • calling_format=cf: 使用標準的 S3 API 呼叫格式。

現在你可以列出 bucket,一開始會是空的。然後建立一個 bucket,並使用不同的金鑰在其中儲存內容:

>>> conn.get_all_buckets()
[]
>>> bucket=conn.create_bucket('riakbucket')
>>> k=Key(bucket)
>>> k.key='firstkey'
>>> k.set_contents_from_string('Object from first key')
>>> k.key='secondkey'
>>> k.set_contents_from_string('Object from second key')
>>> b=conn.get_all_buckets()[0]
>>> b.get_all_keys()
[<Key: riakbucket,firstkey>, <Key: riakbucket,secondkey>]
>>> k=Key(b)
>>> k.key='secondkey'
>>> k.get_contents_as_string()
'Object from second key'
>>> k.key='firstkey'
>>> k.get_contents_as_string()
'Object from first key'

玄貓解說

  • conn.get_all_buckets(): 取得所有儲存桶的列表。由於剛開始還沒有建立任何儲存桶,所以會傳回一個空列表 []
  • bucket=conn.create_bucket('riakbucket'): 建立一個名為 riakbucket 的儲存桶。
  • k=Key(bucket): 建立一個 Key 物件,與 riakbucket 儲存桶關聯。
  • k.key='firstkey': 設定 Key 物件的金鑰名稱為 firstkey
  • k.set_contents_from_string('Object from first key'): 將字串 'Object from first key' 作為內容儲存到 firstkey 金鑰中。
  • k.key='secondkey': 設定 Key 物件的金鑰名稱為 secondkey
  • k.set_contents_from_string('Object from second key'): 將字串 'Object from second key' 作為內容儲存到 secondkey 金鑰中。
  • b=conn.get_all_buckets()[0]: 取得第一個儲存桶 (也就是剛才建立的 riakbucket)。
  • b.get_all_keys(): 取得 riakbucket 儲存桶中所有金鑰的列表,傳回 [<Key: riakbucket,firstkey>, <Key: riakbucket,secondkey>],表示儲存桶中包含 firstkeysecondkey 這兩個金鑰。
  • k=Key(b): 建立一個 Key 物件,與 riakbucket 儲存桶關聯。
  • k.key='secondkey': 設定 Key 物件的金鑰名稱為 secondkey
  • k.get_contents_as_string(): 取得 secondkey 金鑰中的內容,傳回字串 'Object from second key'
  • k.key='firstkey': 設定 Key 物件的金鑰名稱為 firstkey
  • k.get_contents_as_string(): 取得 firstkey 金鑰中的內容,傳回字串 'Object from first key'

如果你想要一個 riakCS Boto shell,以下指令碼會很有用:

#!/usr/bin/env python
from boto.s3.key import Key
from boto.s3.connection import S3Connection
from boto.s3.connection import OrdinaryCallingFormat
from IPython.terminal.embed import InteractiveShellEmbed
apikey='C9JEFXWZ5RUFS9U2YZRX'
secretkey='DZ_6jtGC8Any-08YWiKN2vNKPkNxQDmU9rODig=='
cf=OrdinaryCallingFormat()
conn=S3Connection(aws_access_key_id=apikey,aws_secret_access_key=secretkey,
is_secure=False,host='localhost',port=8081,calling_format=cf)
ipshell = InteractiveShellEmbed(banner1="Hello, Riak Shell!")
ipshell()

玄貓解說

  • 這個指令碼使用 IPython.terminal.embed 模組建立一個互動式的 Python shell,並預先設定好與 RiakCS 的連線。
  • 你可以直接在這個 shell 中執行 Boto 命令,與 RiakCS 互動。

這就是全部了。一個與 S3 相容的物件儲存,由使用一致性雜湊的 NoSQL 分散式資料函式庫支援,而且全部都是用 Erlang 寫的。把它連線到你的 CloudStack EC2 相容雲端,用它作為二級儲存來儲存範本,或者把它做為公開的服務,你就有了雲端的第二條腿:一個可擴充套件的物件儲存。

將 RiakCS 作為 CloudStack 的二級儲存:玄貓的經驗分享

如果你已經使用 NFS 儲存系統作為 CloudStack 二級儲存,現在你已經設定好 RiakCS 叢集,你可能會想要使用它來取代你的 NFS 系統。

玄貓觀點

  • 使用 RiakCS 作為 CloudStack 的二級儲存,可以提供更好的擴充套件性和可靠性,特別是在雲端環境中。

總結 RiakCS 是一個強大的工具,可以讓你建立自己的 S3 相容雲端儲存服務。透過本文的介紹,你應該已經瞭解瞭如何在 Ubuntu 12.04 上安裝和設定 RiakCS,以及如何使用 Python Boto 模組來管理 RiakCS 上的物件。此外,玄貓也分享了將 RiakCS 作為 CloudStack 二級儲存的經驗,希望對你有所幫助。

如何使用 RiakCS 作為 CloudStack 的第二儲存空間:玄貓的實戰經驗

在 CloudStack 環境中,使用物件儲存作為第二儲存空間,能帶來擴充套件性和成本效益。RiakCS 是一個相容 S3 的物件儲存解決方案,可以與 CloudStack 整合。讓玄貓(BlackCat)來分享如何將現有的 NFS 儲存遷移到 RiakCS,或者直接使用 RiakCS 作為新的第二儲存空間。

遷移至 RiakCS:一步一步來

  1. RiakCS 叢集的佈署與設定

    首先,依照標準流程安裝和設定 RiakCS 叢集。這包括硬體組態、網路設定以及 RiakCS 軟體的安裝。

  2. 建立 CloudStack 使用者的存取金鑰

    在 RiakCS 中,為 CloudStack 建立一個專用使用者,並產生其存取金鑰(Access Key)和密碼金鑰(Secret Key)。

  3. CloudStack 中 S3 儲存的設定

    使用 CloudStack 檔案中描述的方法,設定 S3 相容的第二儲存空間。在這裡,你會用到 RiakCS CloudStack 使用者的存取金鑰和密碼金鑰。

使用 s3curl 管理 RiakCS 帳戶

RiakCS 的帳戶管理功能完善,但使用 s3curl 工具可以更方便地建立使用者。s3curl 是一個 Perl 指令碼,能夠產生帶有正確簽章的請求,從而對 S3 端點進行身份驗證。

首先,下載 s3curl 並修改指令碼,將端點指向你的 RiakCS 端點。例如,若在本地執行,則修改 s3curl,定義端點如下:

# begin customizing here
my @endpoints = ( 'localhost',);

s3curl 本身帶有使用說明,但 RiakCS 的官方檔案也很有用。

使用在 RiakCS 中產生的 key_idkey_secret,可以列出所有使用者:

./s3curl.pl --id C9JEFXWZ5RUFS9U2YZRX \
--key DZ_6jtGC8Any-08YWiKN2vNKPkNxQDmU9rODig== \
http://localhost:8081/riak-cs/users

要建立使用者,需要傳送包含使用者名稱和電子郵件地址的 JSON 資料。回應將包含新使用者的金鑰:

./s3curl.pl --id C9JEFXWZ5RUFS9U2YZRX \
--key DZ_6jtGC8Any-08YWiKN2vNKPkNxQDmU9rODig== \
--post --contentType application/json -- -s -v -x localhost:8081 \
--data '{"email":"foobar@example.com","name":"foo bar"}' \
http://localhost:8081/riak-cs/user

為了避免在命令列中暴露密碼金鑰,可以建立一個 ~/.s3curl 檔案,內容如下:

%awsSecretAccessKeys = (
    # personal account
    admin => {
        id => 'C9JEFXWZ5RUFS9U2YZRX',
        key => 'DZ_6jtGC8Any-08YWiKN2vNKPkNxQDmU9rODig==',
    },
);

將檔案許可權設定為 chmod 600,然後可以簡化請求:

./s3curl.pl --id admin http://localhost:8081/riak-cs/users

注意,這裡使用的是 admin ID,而不是管理員使用者的 key_id。這個新使用者將用於 CloudStack。

從 NFS 遷移到 RiakCS

如果 CloudStack 已設定 NFS 第二儲存空間,可以使用 updatecloudToUseObjectStore API 將其遷移到 RiakCS。

使用 CloudMonkey 可以輕鬆發出此 API 呼叫:

> update cloudtouseobjectstore url=http://localhost:8081/riak-cs
name=riakcs
provider=S3
details[0].key=accesskey
details[0].value=STU6Z-ZMK1TPMDAXL9I1
details[1].key=secretkey
details[1].value=8OuY3mHDXihu0Tdb2aVJ4vuYZLBAl5Z7NiWKsg==
imagestore:
name = riakcs
id = 6793abce-bebf-4de3-ac9e-7c3a23e3db3d
details:
+
---
-
---
-
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
---
+
| name      | value                                      |
+
---
-
---
-
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
---
+
| secretkey | ecJlaZebrYKj_qYaIfzlRR_1izojGVWjBRFx0Q== |
| accesskey | ZMJD6-90S2MST4NZMK1Z                     |
+
---
-
---
-
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
---
+
protocol = http
providername = S3
scope = REGION
url = http://localhost:8081/riak-cs

這裡指定的 provider 是 S3(區分大小寫)。

新增 RiakCS 作為第二儲存空間

如果區域中沒有現有的第二儲存空間,可以使用 addImageStore API 新增物件儲存:

> add imagestore
name=riakcs
provider=S3
url=http://localhost:8081/riak-cs
details[0].key=accesskey
details[0].value=ZMJD6-90S2MST4NZMK1Z
details[1].key=secretkey
details[1].value=ecJlaZebrYKj_qYaIfzlRR_1izojGVWjBRFx0Q==
imagestore:
name = riakcs
id = 1a60d62a-c1e9-4d1c-8b35-d5cd687f6de4
details:
+
---
-
---
-
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
---
+
| name      | value                                      |
+
---
-
---
-
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
---
+
| secretkey | ecJlaZebrYKj_qYaIfzlRR_1izojGVWjBRFx0Q== |
| accesskey | ZMJD6-90S2MST4NZMK1Z                     |
+
---
-
---
-
---
+
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
---
+
protocol = http
providername = S3
scope = REGION
url = http://localhost:8081/riak-cs

這個簡單的應該能幫助你開始在 CloudStack 中使用 RiakCS。

Apache Whirr:雲端服務的佈署利器

Apache Whirr 是一組用於執行雲端服務的函式庫。它使用 jclouds,透過 jclouds-cli 介面與 CloudStack 互動。Whirr 根據 Java,可用於在雲端供應商上佈建虛擬機器叢集。最初,它是一組在 Amazon EC2 上佈署 Hadoop 叢集的指令碼。玄貓(BlackCat)將介紹 Whirr 作為在 CloudStack 雲上佈建 Hadoop 叢集的工具。

使用 Whirr 佈署分散式系統

如果你需要佈署組成一個分散式系統的虛擬機器群組,Apache Whirr 可以協調這些多機器佈署。

安裝 Whirr

要安裝 Whirr,可以按照快速入門、下載壓縮檔或克隆 Git 儲存函式庫。在這裡,玄貓(BlackCat)選擇克隆儲存函式庫:

git clone git://git.apache.org/whirr.git

然後使用 Maven 建置原始碼:

mvn install

Whirr 的二進位檔案位於 bin 目錄中,可以將其新增到路徑:

export PATH=$PATH:/Users/sebgoa/Documents/whirr/bin

如果一切順利,現在應該可以檢視 Whirr 的用法:

whirr --help

輸出:

Unrecognized command '--help'
Usage: whirr COMMAND [ARGS]
where COMMAND may be one of:
launch-cluster    Launch a new cluster running a service.
start-services    Start the cluster services.
stop-services     Stop the cluster services.
restart-services  Restart the cluster services.
destroy-cluster   Terminate and cleanup resources for a running cluster.
destroy-instance  Terminate and cleanup resources for a single instance.
list-cluster      List the nodes in a cluster.
list-providers    Show a list of the supported providers
run-script        Run a script on a specific instance or
                  a group of instances matching a role name
version           Print the version number and exit.
help              Show help about an action
Available roles for instances:
  cassandra
  elasticsearch
  ganglia-metad
  ganglia-monitor
  hadoop-datanode
...

從用法可以看出,Whirr 不僅僅適用於 Hadoop,還可以用於設定 Elasticsearch 叢集和 Cassandra 資料函式庫,以及包含 Mahout、Pig、HBase、Hama、MapReduce 和 YARN 的整個 Hadoop 生態系統。