如何使用 Docker Desktop for Windows 从主机连接到 Cassandra
Posted
技术标签:
【中文标题】如何使用 Docker Desktop for Windows 从主机连接到 Cassandra【英文标题】:How do I Connect from Host to Cassandra using Docker Desktop for Windows 【发布时间】:2018-02-11 09:31:04 【问题描述】:我正在寻找一个开发测试环境,虽然我已经完成了大部分设置,但我在从主机(运行 Visual Studio)连接到 docker 中的 Cassandra 集群时遇到了困难(使用 Docker Desktop对于 Windows)。我猜我只是弄乱了配置设置和/或缺少设置;但无法确定如何使这项工作(它确实适用于单个节点;只是不是多个节点,这是我想要使用的)
我的设置:
docker run --name tnode1 -d -e CASSANDRA_CLUSTER_NAME=tcluster -e CASSANDRA_DC=TDC1 -e CASSANDRA_RACK=TRAC1 -e CASSANDRA_BROADCAST_ADDRESS=10.0.75.2 -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch cassandra
我也尝试过使用 -p 开关
docker run --name tnode1 -d -p 9042:9042 -e CASSANDRA_CLUSTER_NAME=tcluster -e CASSANDRA_DC=TDC1 -e CASSANDRA_RACK=TRAC1 -e CASSANDRA_BROADCAST_ADDRESS=10.0.75.2 -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch cassandra
如果我将数据放入其中,然后从 Visual Studio 连接到 10.0.75.2,这似乎有效,一切都按我的预期工作。当我去添加另一个节点时,问题就来了。
我尝试了多种方法,但似乎它们都以第二个音符启动然后退出并且从未加入集群而告终。如果我在设置 tnode1 时忽略了 CASSANDRA_BORADCAST_ADDRESS,那么集群可以工作,但我无法从 Visual Studio 访问它。
第二个节点(一般信息)
docker inspect -f ' .NetworkSettings.IPAddress ' tnode1 返回 172.17.0.2 docker exe -it tnode1 nodetool 状态 地址为 10.0.75.2
第二个节点(尝试 1)
docker run --name tnode2 -d -e CASSANDRA_CLUSTER_NAME=tcluster -e CASSANDRA_DC=TDC1 -e CASSANDRA_RACK=TRAC1 -e CASSANDRA_SEEDS=172.17.0.2 ca 珊德拉 结果:运行 nodetool status 不显示 tnode2 ...运行 docker ps -a 显示“Exited (3) 30 seconds ago”状态
第二个节点(尝试 2)
docker run --name tnode2 -d -e CASSANDRA_CLUSTER_NAME=tcluster -e CASSANDRA_DC=TDC1 -e CASSANDRA_RACK=TRAC1 -e CASSANDRA_SEEDS=10.0.75.2 ca 珊德拉 结果:运行 nodetool status 不显示 tnode2 ...运行 docker ps -a 显示“Exited (3) 28 seconds ago”状态
似乎种子值没有连接,然后新节点因此停止。同样,如果我取出广播地址,则节点创建工作,但我无法从主机连接;我尝试在创建 tnode1 时添加侦听器地址和 -p 参数,但结果相似。
任何帮助将不胜感激。
【问题讨论】:
如果我知道如何连接集群,我很乐意取出所有广播项;当我这样做并尝试 10.0.75.2 或 127.0.0.1 或 172.17.0.2 时,它们都因 NoHostAvailableException 而失败,然后我放入消失并启用连接的广播。 这不是 cassandra 特定的,但在创建集群时,通常更容易在 user defined network 上运行所有节点,这样它们就可以像在物理网络上一样进行通信,中间没有 Docker。默认情况下,为集群使用docker compose v2+ definition 将为您设置网络。 @Matt 谢谢,那是我最初为所有集群所拥有的,但后来我无法从主机(视觉工作室/代码实例所在的位置)连接到它......所以我添加了广播标志以使连接正常工作,因此我失去了连接节点的能力……所以看起来很接近;只需要知道节点在哪里/如何指向,这样它们就可以互相看到,我可以从外部连接 【参考方案1】:以下compose cluster definition 对我有用,我可以从 Docker 主机连接 cqlsh 并运行 test cql。
内存从默认的 1.5G 向下调整,因为每次我启动一个新节点时,由于 Docker VM 内存不足,前一个节点会退出。
version: "2.1"
services:
cassandra-1:
image: cassandra
environment:
CASSANDRA_CLUSTER_NAME: tcluster
CASSANDRA_DC: TDC1
MAX_HEAP_SIZE: 600M
HEAP_NEWSIZE: 100M
ports:
- '9042:9042'
- '9160:9160'
networks:
cassclus:
ipv4_address: 10.0.75.11
cassandra-2:
image: cassandra
environment:
CASSANDRA_CLUSTER_NAME: tcluster
CASSANDRA_DC: TDC1
CASSANDRA_SEEDS: 10.0.75.11
MAX_HEAP_SIZE: 600M
HEAP_NEWSIZE: 100M
networks:
cassclus:
ipv4_address: 10.0.75.12
cassandra-3:
image: cassandra
environment:
CASSANDRA_CLUSTER_NAME: tcluster
CASSANDRA_DC: TDC1
CASSANDRA_SEEDS: 10.0.75.11
MAX_HEAP_SIZE: 600M
HEAP_NEWSIZE: 100M
networks:
cassclus:
ipv4_address: 10.0.75.13
networks:
cassclus:
driver: bridge
ipam:
driver: default
config:
- subnet: 10.0.75.0/24
gateway: 10.0.75.1
【讨论】:
以上是关于如何使用 Docker Desktop for Windows 从主机连接到 Cassandra的主要内容,如果未能解决你的问题,请参考以下文章
关于在k8s-desktop-for-mac如何坚持优雅地填坑
Docker zookeeper 集群 for Docker desktop (win)