如何在马拉松比赛中使用桥接网络建立Cassandra Docker集群?
我有一个生产DC/OS(v1.8.4)集群,我正在尝试在其中设置一个Cassandra集群。我使用Marathon(v1.3.0)部署Cassandra节点。我使用卡桑德拉的官方Docker图像,更具体地说是2.2.3版本 第一种情况:使用主机模式网络部署Cassandra-一切正常 在本例中,我首先部署一个名为cassasndra seed的节点,它连接到IP为10.32.0.6的物理主机。从该服务的Marathon标准输出日志中,我可以看到“节点/10.32.0.6状态跳转到正常”,并且侦听地址和广播地址设置为10.32.0.6。如果我在主节点中使用“\u cassandra-seed.\u tcp.marathon.mesos SRV”检查mesos dns记录,我可以看到为该服务解析的IP是10.32.0.6。该节点功能齐全,我可以创建一个测试数据库如何在马拉松比赛中使用桥接网络建立Cassandra Docker集群?,docker,cassandra,mesos,marathon,dcos,Docker,Cassandra,Mesos,Marathon,Dcos,我有一个生产DC/OS(v1.8.4)集群,我正在尝试在其中设置一个Cassandra集群。我使用Marathon(v1.3.0)部署Cassandra节点。我使用卡桑德拉的官方Docker图像,更具体地说是2.2.3版本 第一种情况:使用主机模式网络部署Cassandra-一切正常 在本例中,我首先部署一个名为cassasndra seed的节点,它连接到IP为10.32.0.6的物理主机。从该服务的Marathon标准输出日志中,我可以看到“节点/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" }
}
{
"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"}
}
现在,我使用单独的部署添加了一个cassandra节点,并提供10.32.0.6作为种子(在部署JSON的env部分设置“cassandra_种子”:“10.32.0.6”)。新节点获得另一个物理主机的IP(与以前的模式相同),并设法与种子节点进行通信。因此,我们有一个运作良好的卡桑德拉集群
{
"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"
}
}
第二种情况:使用桥接模式网络部署卡桑德拉-休斯顿我们遇到了一个问题
在本例中,我还部署了第一个cassandra种子节点,它连接到IP为10.32.0.6的物理主机。然而,现在在Marathon中服务的stdout日志中,我可以看到“Node/172.17.0.2状态跳转到正常”,并且listen\u地址和broadcast\u地址被设置为172.17.0.2。172.17.0.2是docker容器的IP(使用docker inspect查找)。但是,如果我在主节点中使用“\u cassandra-seed.\u 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" }
}
{
"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
提前谢谢你 在低于settinhs的网桥网络模式下形成cassandra群集时应小心。 1.将以下值设置为主机Ip(非容器Ip) 种子:公共知识产权 广播地址:公共ip 广播地址:公共ip
试试看。确保从外部世界可以访问所需的端口。为什么不为Cassandra使用DC/OS Universe软件包?我想这会让事情变得容易很多。。。