docker 部署cassandra


摘要

本文主要介紹在redhat7 平台,利用docker 部署cassandra 集群,除了介紹基本的部署步驟,另外主要
討論類似於cassandra 這種分布式集群系統部署 docker如何進行網絡配置的問題

文章只發布在CSDN與http://www.webpersonaledeveloper.cn,其余站點均屬盜版侵權
更多cassandra知識請訪問 http://www.webpersonaldeveloper.cn

安裝docker

最簡單的方法,利用已有的腳本

curl -fsSL https://get.docker.com/ | sh

然后啟動docker 服務

service docker start

驗證是否安裝成功

docker run hello-world

docker run cassandra

docker run --name $CONTAINER_NAME -d -e CASSANDRA-BROADCAST_ADDRESS=xxx.xxx.xxx.xxx

 -e CASSANDRA_DC=XX -e CASSANDRA_RACK=XXX cassandra

可以添加的參數有很多,通常下列這些參數需要指定

CASSANDRA_LISTEN_ADDRESS:監聽進來的連接地址,在docker中默認使用的就是container的ip address

CASSANDRA_BROADCAST_ADDRESS:廣播給別的node的地址。

CASSANDRA_SEEDS:cassandra bootstrap時通信的節點

CASSANDRA_DC:multi datacenter 時需要指定datacenter 名

CASSANDRA_RACK:cassandra機架號

CASSANDRA_ENDPOITN_SNITCH:網絡拓撲策略,用來找尋節點,生產環境一般建議使用GossipingPropertyFileSnitch

multi datacenter & networking

Case1:一個node上安裝一個cassandra container

在6 nodes 上部署兩個cassandra datacenter,每個datacenter 3nodes.
node1:seed node,沒有bootstrap

docker run --name $CONTAINER_NAME -d -e CASSANDRA_BROADCAST_ADDRESS=XXX 
-e  CASSANDRA_DC=DC1 -e CASSANDRA_RACK=RAC1 
-e  CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch 
-p 7000:7000 -p 9042:9042 -p 7199:7199 cassandra

其他node

docker run --name $CONTAINER_NAME -d -e CASSANDRA_SEEDS=XXX 
-e CASSANDRA_BROADCAST_ADDRESS=XXX -e CASSANDRA_DC=DC1 
-e CASSANDRA_RACK=RAC1 -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch 
-p 7000:7000 -p 9042:9042 -p 7199:7199 cassandra

這里需要將CASSANDRA_BROADCAST_ADDRESS 指定為server 的ip
注意這邊如果需要使用remote jmx連接到node上,因為docker的存在可能會存在問題。cassandra jmx 暴露出來的不是node的public ip,是docker分配的一個內部地址。
所以外部無法訪問。可以在cassandra-env.sh 中添加jvm參數,這樣外部就可以連接到server了。

JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public ip>"

Case2:在一個node上安裝多個cassandra container

這種情況與Case1 有些不同,最重要的是docker網絡問題。如何讓各個container 有自己獨立的ip,並且能夠被外部識別

  1. 配置docker網橋
    docker 默認的網橋是docker0

    ifconfig docker0 192.168.22.1 netmask 255.255.255.0
    

    更新/etc/sysconfig/docker 添加

    other_args="--bip"=192.168.22.1/24"
    

    重啟docker

    service docker restart
    

    橋接模式下容器之間是可以相互通信的,容器也可以與外部通信

2.啟動cassandra
不需要指定Listen Address,和broadcast address,docker 會自動分配,可以在一個server上啟動多個cassandra

docker run --name $CONTAINER_NAME -d -e CASSANDRA_DC=DC1 -e CASSANDRA_RACK=RAC1 -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch cassandra

3.配置路由

client 與docker container:cassandra 通信,與其他server 上的cassandra節點通信。

route add -net 192.168.22.0 netmask 255.255.255.0 gw public_ip

參考

https://hub.docker.com/_/cassandra/

https://yeasy.gitbooks.io/docker_practice/content/advanced_network/bridge.html

http://www.infoq.com/cn/articles/docker-network-and-pipework-open-source-explanation-practice


免責聲明!

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



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