我正在观看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节点吗?
答案 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初始化节点。
增加Docker内存是一件好事;
Windows版本:Windows 10 Pro 记忆体:16 GB Docker版本;
docker --version
Docker version 18.09.2, build 6247962
初始化第一个卡桑德拉节点;
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/。