Cassandra节点没有在Docker中链接

时间:2016-02-05 08:00:03

标签: docker cassandra

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

firstLoad

172.17.0.7是运行命令时的IP地址

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

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

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

docker ps 

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

4 个答案:

答案 0 :(得分:1)

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

重新启动机器为我解决了

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

答案 1 :(得分:1)

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

SET @sid = (SELECT status_id FROM user_relationship_status WHERE status = 'LIKE'); INSERT INTO user_relationships (user_id, target_user_id, status_id) VALUES ( 17, 22, @sid ) ON DUPLICATE KEY UPDATE status_id = VALUES(@sid) 参数特定于此Cassandra docker容器的入口点,并有助于Cassandra自己的群集(请参阅此处的Github项目:https://github.com/tobert/cassandra-docker)。使用此功能,您无需使用Docker自己的容器链接来建立群集。

(我是有问题的Pluralsight课程的作者。有趣的是,这门课程不到一年,但从那时起Docker就发生了很多变化!)

答案 2 :(得分:1)

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

A-更改Docker内存

增加Docker内存是一件好事;

enter image description here

B-我的设置

Windows版本:Windows 10 Pro 记忆体:16 GB Docker版本;

docker --version
Docker version 18.09.2, build 6247962

C-解决方案演示

初始化第一个卡桑德拉节点;

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

答案 3 :(得分:0)

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

docker run --name n1 tobert/cassandra
docker run --name n2 --link n1:cassandra tobert/cassandra -seeds cassandra
来自docker文档的

Communication across links包含有关如何使用--link flag。

的详细说明

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

以下是命令的输出: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/