容器化部署Cassandra高可用集群


前提:

三台裝有docker的虛擬機,這里用VM1,VM2,VM3表達(當然生產環境要用三個獨立物理機,否則無高可用可言),裝docker可參見Ubuntu離線安裝docker

 

開始部署:

部署圖

如上圖所示,三台VM的IP分別為:

192.168.0.101

192.168.0.102

192.168.0.103

客戶端將使用這三個IP來連接集群,每個VM通過端口映射由docker網橋myBridge來與Cassandra容器通信,容器的IP會在啟動容器時指定

部署步驟:

1. 建docker網橋myBridge(名字隨意)

在三台VM上,這里假定是ubuntu16.04.5,使用docker命令創建自定義docker網橋,用於VM和docker容器通訊

sudo docker network create --driver=bridge --subnet=200.1.1.0/24 myBridge

2. 准備cassandra的docker鏡像,data目錄,cassandra.yaml配置文件

首先創建好如下目錄,假如VM的用戶名是capcom923

/home/capcom923/cassandra/

2.1. docker鏡像

由於我們要單獨掛載cassandra.yaml配置文件,直接使用官方cassandra docker鏡像會導致無法啟動(因為鏡像的啟動文件docker-entrypoint.sh要修改cassandra.yaml文件,會造成device busy的錯誤),所以我注釋掉了cassandra官網鏡像中docker-entrypoint.sh文件的38行至53行,並重新生成了docker鏡像,並導出為tar包供大家直接使用,請直接下載:(鏈接:https://pan.baidu.com/s/14n9_DGHCkAFRumln8muuQw 提取碼:l1rx )

將tar包下載到該位置/home/capcom923/cassandra/cassandra-3.11.2-bps.tar

2.3. data目錄

創建一個叫data的空目錄即可

/home/capcom923/cassandra/data/

該目錄用於cassandra存放所有持久化的數據

2.3. cassandra.yaml配置文件

該文件是cassandra的主要配置文件,由於三台VM的IP和角色各不盡相同,所以配置文件也不一樣。

基於默認的cassandra.yaml文件,要對三台VM進行以下配置:

第一台VM:角色為種子節點,該節點在集群擴容縮容時,以及其它節點重啟時是必須活着的,其它時候是可以宕機的。

配置節 說明
cluster_name 'MyCluster' 集群的名字,同一個集群的名字要相同
authenticator PasswordAuthenticator 生產環境都要用戶名密碼認證,默認的用戶名/密碼是cassandra/cassandra
seeds 192.168.0.101 種子節點VM的IP,注意不是容器的IP。
broadcast_address 192.168.0.101 節點VM的IP,注意不是容器的IP。
broadcast_rpc_address 192.168.0.101 節點VM的IP,注意不是容器的IP。
listen_address 200.1.1.11 節點容器的IP。
auto_snapshot false 盡管官方建議是true,但實際使用時,太消耗磁盤,所以建議改為false
endpoint_snitch GossipingPropertyFileSnitch 生產環境標配

編輯完畢后,存放在/home/capcom923/cassandra/cassandra.yaml


第二台VM:角色為普通節點

配置節 說明
cluster_name 'MyCluster' 集群的名字,同一個集群的名字要相同
authenticator PasswordAuthenticator 生產環境都要用戶名密碼認證,默認的用戶名/密碼是cassandra/cassandra
seeds 192.168.0.101 種子節點VM的IP,注意不是容器的IP。
broadcast_address 192.168.0.102 節點VM的IP,注意不是容器的IP。
broadcast_rpc_address 192.168.0.102 節點VM的IP,注意不是容器的IP。
listen_address 200.1.1.12 節點容器的IP。
auto_snapshot false 盡管官方建議是true,但實際使用時,太消耗磁盤,所以建議改為false
endpoint_snitch GossipingPropertyFileSnitch 生產環境標配

編輯完畢后,存放在/home/capcom923/cassandra/cassandra.yaml

 

第三台VM:角色為普通節點

配置節 說明
cluster_name 'MyCluster' 集群的名字,同一個集群的名字要相同
authenticator PasswordAuthenticator 生產環境都要用戶名密碼認證,默認的用戶名/密碼是cassandra/cassandra
seeds 192.168.0.101 種子節點VM的IP,注意不是容器的IP。
broadcast_address 192.168.0.103 節點VM的IP,注意不是容器的IP。
broadcast_rpc_address 192.168.0.103 節點VM的IP,注意不是容器的IP。
listen_address 200.1.1.13 節點容器的IP。
auto_snapshot false 盡管官方建議是true,但實際使用時,太消耗磁盤,所以建議改為false
endpoint_snitch GossipingPropertyFileSnitch 生產環境標配

編輯完畢后,存放在/home/capcom923/cassandra/cassandra.yaml

我也將這三個配置好的文件給大家參考,分別在1/2/3文件夾里(鏈接:https://pan.baidu.com/s/1joiC6EDV5FtFBWutV-sHzg 提取碼:ki64 )

至此,所以每台VM的目錄結構為

/home/capcom923/cassandra/cassandra-3.11.2-bps.tar

/home/capcom923/cassandra/data/

/home/capcom923/cassandra/cassandra.yaml

3. 加載cassandra的docker鏡像

在三台VM上執行

docker load -i /home/capcom923/cassandra/cassandra-3.11.2-bps.tar

4. 運行cassandra集群

在每一台VM上,先關閉ubuntu防火牆

sudo service ufw stop

sudo service firewalld stop(如果裝了firewalld的話)

在第一台VM上:

sudo docker run --name cassandraNode1 -d -e CASSANDRA_DC=datacenter1 -v /home/capcom923/cassandra/cassandra.yaml:/etc/cassandra/cassandra.yaml -v /home/capcom923/cassandra/data:/var/lib/cassandra --restart unless-stopped --network myBridge --ip 200.1.1.11 -p 7000:7000 -p 9042:9042 cassandra:3.11.2.bps

在第二台VM上:

sudo docker run --name cassandraNode2 -d -e CASSANDRA_DC=datacenter1 -v /home/capcom923/cassandra/cassandra.yaml:/etc/cassandra/cassandra.yaml -v /home/capcom923/cassandra/data:/var/lib/cassandra --restart unless-stopped --network myBridge --ip 200.1.1.12 -p 7000:7000 -p 9042:9042 cassandra:3.11.2.bps

在第三台VM上:

sudo docker run --name cassandraNode3 -d -e CASSANDRA_DC=datacenter1 -v /home/capcom923/cassandra/cassandra.yaml:/etc/cassandra/cassandra.yaml -v /home/capcom923/cassandra/data:/var/lib/cassandra --restart unless-stopped --network myBridge --ip 200.1.1.13 -p 7000:7000 -p 9042:9042 cassandra:3.11.2.bps

5. 檢查cassandra集群

在第一台VM上執行

sudo docker exec -it cassandraNode1 bash

進入容器之后,執行

nodetool status

注意三個節點開頭的信息,UN代表Up Normal狀態,都是UN就證明集群工作正常了,開始有UJ,說明Up Joining,一會兒就會變UN

6. 修改system_auth的配置

在第五步的窗口中繼續執行

cqlsh -u cassandra -p cassandra

連接進cassandra控制台

並輸入ALTER KEYSPACE system_auth WITH replication = {'class': 'NetworkTopologyStrategy','datacenter1': '3'};

回車

將這個keyspace的策略和副本改成3,

然后輸入exit退出cassandra控制台

再輸入nodetool repair執行修復

然后在其余兩台VM中的容器中都要執行nodetool repair,由此用戶認證授權表得以及時同步,否則會引起從某一台節點無法登錄的情況。

注意,cassandra/cassandra是系統默認用戶,登錄時要求至少過半的節點存活才可以。

 

至此,搭建完畢~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM