此刻,我正在尝试用一个数据中心创建集群。
它们中的每一个都应存储相同的日期,以防其中一个停止工作时群集应该工作。
我成功创建了2个节点,但是...
他们没有相同的日期,只是在他们之间分配了日期。我使用命令阅读了此内容:
docker exec -ti cas1 nodetool status
,并且自己的标签约为45/55。我想每个都放100个。每当节点之一以某种方式停止工作时,这将防止丢失数据。
CREATE KEYSPACE mykeyspace
WITH replication = {
'class' : 'NetworkTopologyStrategy',
'datacenter1' : 2
};
有一些我用来启动cassandra的命令:
datacener1上的第一个节点
docker run -e DS_LICENSE=accept -e CASSANDRA_CLUSTER_NAME=AAIPCluster -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch -e CASSANDRA_DC=datacenter1 -p 9042:9042 --name cassandra --memory 2g -d cassandra
数据中心的第二个节点
docker run --name cassandra2 -e CASSANDRA_SEEDS="$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' cassandra)" -e CASSANDRA_CLUSTER_NAME=AIIPCluster -e CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch -e CASSANDRA_DC=datacenter1 -d cassandra
已在同一数据中心(datacenter1)中启动并运行。
我了解仅使用端口9042公开了第一个节点,但是有没有办法在一个端口上公开整个数据中心/集群?
我可以将每个节点暴露在不同的端口上,但是可能很难定义与rest api的连接,因为我必须检查当前可见的节点。
我认为,只要第一个节点关闭,它就可以解决无法获取/放入群集中数据的问题。还是有更好的解决方案来实现这一目标?
答案 0 :(得分:0)
使用Docker时,可以通过Docker网络连接到这些实例,因此,如果要连接到localhost
和端口9042,则驱动程序将获取群集的完整拓扑,并使用该网络地址是由节点自己发布的,如果您没有进行任何特定的配置,则将使用Docker网络中的地址,而不是localhost
。