我如何从主机连接到使用Docker for Windows的Cassandra
我期待设置开发测试环境,虽然我已经安装了很多东西,但是我很难从主机(运行Visual Studio)连接到Docker中的Cassandra集群(使用Docker for Windows)。我猜我只是搞乱配置设置和/或缺少设置;但不能确定如何使这项工作(它为单节点工作;只是没有多个节点,这是我要使用什么)我如何从主机连接到使用Docker for Windows的Cassandra
我有什么设置:
搬运工运行 - -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卡桑德拉
我也试着与-p开关
搬运工运行--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卡桑德拉
这似乎是工作的,如果我把数据放在这里,然后从Visual Studio连接到10.0.75.2,一切都按我的预期工作。当我去添加另一个节点时,问题就出现了。
我已经尝试了很多方法,但似乎它们都以第二个音符开始,然后退出并且从未加入群集结束。如果我在设置tnode1时忽略了CASSANDRA_BORADCAST_ADDRESS,那么群集可以工作,但我无法从Visual Studio中获取它。
第二个节点(综合信息)
搬运工检查-f '{{.NetworkSettings.IPAddress}}' tnode1 回报172.17.0.2 泊坞窗的exe - 它tnode1 nodetool状态 有该地址为10.0 .75.2
第二节点(尝试1)
搬运工运行--name tnode2 -d -e CASSAND RA_CLUSTER_NAME = tcluster -e CASSANDRA_DC = TDC1 -e CASSANDRA_RACK = TRAC1 -e CASSANDRA_SEEDS = 172.17.0.2 ca ssandra 结果:运行nodetool状态不显示tnode2 ...正在运行docker ps -a shows“已退出(3)30秒前”用于状态
第二节点(尝试2)
搬运工运行--name tnode2 -d -e CASSANDRA_CLUSTER_NAME = tcluster -e CASSANDRA_DC = TDC1 -e CASSANDRA_RACK = TRAC1 -e CASSANDRA_SEEDS = 10.0 .75.2 ca ssandra 结果:运行nodetool状态不显示tnode2 ...正在运行docker ps -a shows“已退出(3)28秒前”的状态
看来,如果种子值未连接,然后将新节点停止作为一个结果。同样,如果我取出广播地址,节点创建工作,但我无法从主机连接;我试图在tnode1创建时添加侦听器地址和-p参数,但类似的结果。
任何援助将不胜感激。
以下compose cluster definition适合我,我可以从Docker主机连接到cqlsh并运行test cql。
内存从默认的1.5G下调,每次启动一个新节点时,由于Docker虚拟机中缺少内存,前一个节点会退出。
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
如果我知道如何连接群集,我很高兴拿出所有广播项目;当我这样做,并尝试10.0.75.2或127.0.0.1或172.17.0.2他们都失败,NoHostAvailableException,然后我把广播消失,并启用连接。 – ChrisHDog
这不是cassandra特有的,但创建集群时,通常更容易在[用户定义的网络]上运行所有节点(https://docs.docker.com/engine/userguide/networking/#user-defined-networks)所以它们都可以像在物理网络上那样进行通信,而且两者之间没有Docker。默认情况下,为群集使用[docker compose v2 + definition](https://docs.docker.com/compose/compose-file/)将为您设置网络。 – Matt
@Matt谢谢,这是我最初对所有群集所做的,但后来我无法从主机(Visual Studio /代码实例所在的地方)连接到它...所以我添加了广播标志以获取那连接工作和我失去了连接节点的能力......所以它看起来很接近;只需要知道节点在哪里/如何指向,以便它们都可以看到对方,并且我可以从外部连接 – ChrisHDog