Cassandra节点没有在Docker中链接

问题描述 投票:3回答:4

我正在观看PluralSight for Cassandra上的一个旧视频,并将作品与下面的方法联系起来。但是,它不适用于当前的docker版本。这就是我连接不同节点的方式。例如:

docker run --name=n1 -d tobert/cassandra
docker run --name n2 -d tobert/cassandra -seeds 172.17.0.7 

172.17.0.7是运行命令时的IP地址

docker inspect -f '{{ .NetworkSettings.IPAddress}}' n1

但是,似乎一次只允许一个节点运行。当我运行命令

docker ps 

要么

docker exec -it n1 nodetool status

只有一个容器正在运行。当我尝试检查容器的ip地址时,它返回空。还有另一种方法来链接docker中的cassandra节点吗?

docker cassandra
4个回答
1
投票

管理以解决此问题。这似乎是由“Docker快速启动终端”创建的docker机器的问题。也许与1024的默认内存有关?

重新创造机器为我解决了它

docker-machine rm default
docker-machine create -d virtualbox --virtualbox-memory=4096 default

1
投票

是的,Dashu是对的,你需要超过默认内存来运行多个Cassandra实例。在这里查看类似的Twitter主题:https://twitter.com/perksc/status/641159044225466368

-seeds参数特定于此Cassandra docker容器的入口点,并促进了Cassandra自己的聚类(请参阅Github项目:https://github.com/tobert/cassandra-docker)。使用此功能,您无需使用Docker自己的容器链接来建立群集。

(我是有问题的Pluralsight课程的作者。有趣的是,该课程还不到一年,但从那以后Docker中发生了很多变化!)


1
投票

我遇到了同样的问题。它使用内存参数-m 4g解决。所以我用4 g初始化节点。

A - Changing The Docker Memory

增加Docker内存是件好事;

enter image description here

B - My Setup

Windows版本:Windows 10 Pro内存:16 GB Docker版本;

docker --version
Docker version 18.09.2, build 6247962

C - Solution Demo

初始化第一个cassandra节点;

docker run --name=n1 -d -m 4g tobert/cassandra

获取第一个节点的ip;

docker inspect -f "{{ .NetworkSettings.IPAddress }}" n1

上述命令的输出是;

172.17.0.3

初始化与第一个链接的第二个Cassandra节点;

docker run --name n2 -d -m 4g tobert/cassandra -seeds 172.17.0.3

在第一个节点上运行nodetools status命令;

docker exec -it n1 nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens  Owns (effective)  Host ID                               Rack
UN  172.17.0.3  51.5 KB    256     100.0%            002150d0-90b9-4f8f-861f-0d0205e3ea72  rack1
UN  172.17.0.4  82.46 KB   256     100.0%            05c06381-778e-4989-860b-756d05c8cfbc  rack1

在第二个节点上运行nodetools status命令;

docker exec -it n2 nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens  Owns (effective)  Host ID                               Rack
UN  172.17.0.3  51.5 KB    256     100.0%            002150d0-90b9-4f8f-861f-0d0205e3ea72  rack1
UN  172.17.0.4  82.46 KB   256     100.0%            05c06381-778e-4989-860b-756d05c8cfbc  rack1

0
投票

您可以使用--link标志链接docker容器:

docker run --name n1 tobert/cassandra
docker run --name n2 --link n1:cassandra tobert/cassandra -seeds cassandra

来自docker文档的Communication across links包含如何使用--link标志的详细说明。


我也运行你的命令,它可以在我的机器上运行。

下面是命令的输出:docker exec -it n1 nodetool status

Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens  Owns (effective)  Host ID                               Rack
UN  172.17.0.3  72 KB      256     100.0%            f0a34a45-5f7a-46ff-8fe6-1cf5ff36a3e3  rack1
UN  172.17.0.2  51.46 KB   256     100.0%            8036177e-515c-42b1-9263-3b815c25bde6  rack1

此外,当-seed参数错误(不是现有的ip地址)时,第二个容器正在等待一段时间,并且~30s后终止为exeception:

ERROR [main] 2016-02-07 19:12:11,081 CassandraDaemon.java:541 - Exception encountered during startup
java.lang.RuntimeException: Unable to gossip with any seeds
    at org.apache.cassandra.gms.Gossiper.doShadowRound(Gossiper.java:1307) ~[apache-cassandra-2.1.7.jar:2.1.7]
    at org.apache.cassandra.service.StorageService.checkForEndpointCollision(StorageService.java:533) ~[apache-cassandra-2.1.7.jar:2.1.7]

所以我认为n2无法访问n1 - 请仔细检查你的n1 ip地址(检查你的n2日志运行:docker exec xxxx tail -f /data/log/system.log -n 100,其中xxxx - n2容器ID)。

如果您对Cassandra版本没有任何特定要求,您还可以从官方存储库中查看图像:https://hub.docker.com/_/cassandra/

© www.soinside.com 2019 - 2024. All rights reserved.