我正在尝试通过Docker设置Apache CassandraDB集群。
我已经使用docker run --network cassandra -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch -e CASSANDRA_SEEDS=node0 --name "node0" -d cassandra
创建了多达3个节点(包括3个节点)。
每当我使用相同的命令添加第4个节点(只是更改容器名称)时,集群中的另一个随机节点就会崩溃,并且创建的节点也会在处于UJ
和DJ
阶段后不久退出。
我是这么试的。
x1米3英寸x1米4英寸
然后我等待节点启动,nodetool显示如下:
Datacenter: dc1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 172.19.0.2 88.49 KiB 16 100.0% 15573541-fc19-4569-9a43-cb04e49e134f rack1
之后,我又向集群添加了两个节点。
x1米5英寸x1米6英寸
我一直等到这两个人加入集群,nodetool显示如下:
Datacenter: dc1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 172.19.0.2 74.11 KiB 16 64.7% 15573541-fc19-4569-9a43-cb04e49e134f rack1
UN 172.19.0.4 98.4 KiB 16 76.0% 30afdc85-e863-452c-9031-59803e4b1f11 rack1
UN 172.19.0.3 74.04 KiB 16 59.3% 6d92cf62-65b4-4365-ab28-2d53872605e3 rack1
看起来不错!之后,我想添加另一个节点来测试我的复制因子是否正常工作。因此,我使用相同的命令向集群添加了另一个节点:docker run --network cassandra -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch -e CASSANDRA_SEEDS=node0 --name "node3" -d cassandra
当我添加这个节点时,node1
立即崩溃。node3
(这是新的)短暂地处于UJ
(向上连接)阶段,然后切换到DJ
(向下连接),然后从节点列表中删除。
- 以下是
nodetool status
的结果,按顺序排列:**
- 以下是
一个一个二个一个一个一个三个一个一个一个一个一个一个四个一个一个一个一个一个五个一个
以下是node1
的日志:如您所见,日志中的第一项是确认node2
已连接到集群。
https://gist.github.com/janic0/7e464e5c819c37e6ed38819fb3c19eff
下面是node3
的日志(同样,这是新节点)
https://gist.github.com/janic0/0968b7136c3beb3ef76a2379f3cd9be5
1条答案
按热度按时间dsekswqp1#
我对此进行了调查,发现Docker使用退出代码137(即“内存不足”)来终止这些容器。
是啊,我就知道会发生这种事。
每个节点使用了大约4GB的RAM,第四个节点刚好足够迫使Docker删除一些容器。如果出于某种原因,您确实希望在一台机器上托管这么多节点,您可以增加内存限制:
我以前做过类似的事情。如果你只是做一些本地测试,你想要一个多节点集群,我以前用过Minikube。事实上,我做了一个repo,里面有一些资源可以做这件事:https://github.com/aploetz/cassandra_minikube
但是另一种可能是“快速修复”的方法是显式地调整Java堆的大小,使每个节点的堆都小很多。
这将创建一个1/2 GB的堆,对于本地开发或一些简单的测试来说足够了。您可以在
cassandra-env.sh
或jvm-server.options
文件中设置这些值(取决于您的Cassandra版本)。