
cassandra 是一個流行的分布式nosql資料存儲系統。最近有客戶問起了cassandra在如何docker中運作的一些問題。本文将利用docker compose和阿裡雲容器服務輕松玩轉cassandra。
docker hub上已經提供了cassandra的官方鏡像,可以友善地建立單節點cassandra執行個體或cassandra叢集。cassandra采用去中心化的叢集架構,沒有master節點的概念;但是會有seed節點在新節點連入時通知目前叢集。
下面的docker compose模闆将為你建立一個包含3個節點的cassandra叢集,其中第一個容器“cassandra-1”為seed節點。
注釋:這裡面一個重要的技巧是:在docker的容器網絡模型中(cnm, docker network model),同一網絡中的容器可以通過容器名互相通路。
現在,我們可以輕松利用 docker-compose 指令來啟動cassandra叢集了
啟動之後,我們可以友善地檢視叢集狀态
利用阿裡雲容器服務,我們可以直接使用上文compose模闆部署cassandra叢集,但是為了防止在相同的ecs執行個體上部署了超過一個個cassandra節點,我們可以添加部署限制來指明不同的cassandra節點部署到不同的ecs示例上。
注釋:
這個示例需要叢集中至少包含3個節點
<code>constraint:aliyun.node_index</code>限制可以友善地指明将容器部署到叢集中的第幾個節點
在overlay等網絡使用官方cassandra 2.2鏡像的時候,如果沒有指明cassandra_listen_address我們會遇到一個 “unknown listen_address” 的問題,
這個原因是因為在鏡像的“docker-entrypoint.sh”腳本中,的如下代碼
然而在overlay網絡環境中,容器會包含多塊網卡,而<code>hostname --ip-address</code>會傳回所有網卡的ip位址導緻cassandra_listen_address的格式出現問題,一個簡單的修正就是使用下面的指令來擷取eth0網卡的ip位址
利用docker和docker compose模闆可以輕松部署cassandra叢集。阿裡雲容器服務可以輕松複用docker compose模闆,并添加限制支援靈活的部署控制。