gpt4 book ai didi

docker - 如何使用 BRIDGE 网络在 Marathon 中设置 Cassandra Docker 集群?

转载 作者:行者123 更新时间:2023-12-02 04:37:03 24 4
gpt4 key购买 nike

我有一个生产 DC/OS(v1.8.4) 集群,我正在尝试在其中设置一个 Cassandra 集群。我使用 Marathon(v1.3.0) 来部署 Cassandra 节点。我使用 Cassandra 的官方 Docker 镜像,更具体地说是 2.2.3 版本。

第一个案例:使用HOST模式网络部署Cassandra——一切OK

在这种情况下,我首先部署一个名为 cassasndra-seed 的节点,并将其连接到 IP 为 10.32.0.6 的物理主机。从此服务的 Marathon stdout 日志中,我可以看到“节点/10.32.0.6 状态跳转到正常”,并且 listen_address 和 broadcast_address 设置为 10.32.0.6。如果我在主节点中使用“_cassandra-seed._tcp.marathon.mesos SRV”检查 mesos-dns 记录,我可以看到为此服务解析的 IP 是 10.32.0.6。该节点功能齐全,我设法创建了一个测试数据库。

{
"id": "/cassandra-seed",
"cpus": 1.5,
"mem": 8192,
"disk": 0,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image": "cassandra:2.2.3",
"network": "HOST",
"ports": [7199,7000,7001,9160,9042],
"requirePorts": true,
"privileged": true
}
},
"constraints": [ ["hostname","UNIQUE"] ],
"env": { "CASSANDRA_CLUSTER_NAME": "democluster" }
}

现在我使用单独的部署再添加一个 cassandra 节点,并提供 10.32.0.6 作为种子(在部署 JSON 的环境部分中设置“CASSANDRA_SEEDS”:“10.32.0.6”)。新节点获取另一个物理主机的 IP(与之前相同的模式)并设法与种子节点进行八卦。因此,我们有一个正常运行的 Cassandra 集群。

{
"id": "/cassandra",
"cpus": 1.5,
"mem": 8192,
"disk": 0,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image": "cassandra:2.2.3",
"network": "HOST",
"ports": [7199,7000,7001,9160,9042],
"requirePorts": true,
"privileged": true
}
},
"constraints": [ ["hostname","UNIQUE"] ],
"env": {
"CASSANDRA_CLUSTER_NAME": "democluster",
"CASSANDRA_SEEDS": "10.32.0.6"
}
}

案例二:使用 BRIDGE 模式网络部署 Cassandra - 休斯顿,我们遇到了问题

在这种情况下,我还部署了第一个 cassandra-seed 节点,它连接到 IP 为 10.32.0.6 的物理主机。但是,现在在 Marathon 服务的标准输出日志中,我可以看到“Node/172.17.0.2 state jump to normal”并且 listen_address 和 broadcast_address 设置为 172.17.0.2。 172.17.0.2 是 docker 容器的 IP(使用 docker inspect 找到)。但是,如果我在主节点中使用“_cassandra-seed._tcp.marathon.mesos SRV”检查 mesos-dns 记录,我可以看到为此服务解析的 IP 是 10.32.0.6。该节点功能齐全,我设法创建了一个测试数据库。

{
"id": "/cassandra-seed",
"cpus": 1.5,
"mem": 8192,
"disk": 0,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image": "cassandra:2.2.3",
"network": "BRIDGE",
"portMappings": [
{"containerPort": 7000, "hostPort": 7000, "servicePort": 0 },
{"containerPort": 7001, "hostPort": 7001, "servicePort": 0 },
{"containerPort": 7199, "hostPort": 7199, "servicePort": 0 },
{"containerPort": 9042, "hostPort": 9042, "servicePort": 0 },
{"containerPort": 9160, "hostPort": 9160, "servicePort": 0 },
],
"privileged": true,
}
},
"constraints": [ [ "hostname", "UNIQUE" ] ],
"env": {"CASSANDRA_CLUSTER_NAME": "democluster"}
}

现在,我使用单独的部署并提供 10.32.0.6 作为种子,再添加一个 cassandra 节点。新节点附加到另一台主机并获取他容器的IP(节点/172.17.0.2状态跳转到正常)。结果是新节点无法与种子进行八卦。

{
"id": "/cassandra",
"cpus": 1.5,
"mem": 8192,
"disk": 0,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image": "cassandra:2.2.3",
"network": "BRIDGE",
"portMappings": [
{"containerPort": 7000, "hostPort": 7000, "servicePort": 0 },
{"containerPort": 7001, "hostPort": 7001, "servicePort": 0 },
{"containerPort": 7199, "hostPort": 7199, "servicePort": 0 },
{"containerPort": 9042, "hostPort": 9042, "servicePort": 0 },
{"containerPort": 9160, "hostPort": 9160, "servicePort": 0 },
],
"privileged": true,
}
},
"constraints": [ [ "hostname", "UNIQUE" ] ],
"env": {
"CASSANDRA_CLUSTER_NAME": "democluster",
"CASSANDRA_SEEDS": "10.32.0.6"
}
}

问题是在第二种情况下我怎样才能让两个节点八卦?为了找到第一个节点,我应该将哪个 IP 作为种子提供给第二个节点? 172.17.0.2 是 docker 容器 IP,第二个节点无法访问。例如,种子节点中的cassandra实例是否可以像主机网络模式一样获取物理主机的IP?

提前致谢!

最佳答案

在桥接网络模式下形成 cassandra 集群时,应注意以下设置。1.设置下面的值给主机IP(不是容器IP)

种子:public_ip广播地址:public_ipBroadcast_rpc_address : public_ip

  1. 设置listen_address为容器Ip

监听地址:172.17.x.x

3。将 rpc_address 设置为 0.0.0.0(不要使用本地主机)

这样我们实际上可以使用桥接网络形成一个 Cassandra 集群。

试一试。确保外部世界可以访问所需的端口。

关于docker - 如何使用 BRIDGE 网络在 Marathon 中设置 Cassandra Docker 集群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41586960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com