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,并且能够被外部识别
配置docker网桥
docker 默认的网桥是docker0ifconfig 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?