我有一个生产dc/os(v1.8.4)集群,我正在尝试在其中设置一个cassandra集群。我使用marathon(v1.3.0)部署cassandra节点。我使用了Cassandra的官方docker图像,更具体地说是2.2.3版本。
第一种情况:使用主机模式网络部署cassandra-一切正常
在本例中,我首先部署一个名为cassasndra seed的节点,并将其连接到ip为10.32.0.6的物理主机。从这个服务的marathon的stdout日志中我可以看到“node/10.32.0.6 state jump to normal”和listen\u address和broadcast\u address被设置为10.32.0.6。如果我在主节点中使用“\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" }
}
现在,我使用一个单独的部署并提供10.32.0.6作为种子(在部署json的env部分设置“cassandraèu seeds”:“10.32.0.6”)再添加一个cassandra节点。新节点获得另一个物理主机的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"
}
}
第二种情况:使用网桥模式网络部署cassandra-我们遇到了一个问题
在本例中,我还部署了第一个cassandra种子节点,并将其连接到ip为10.32.0.6的物理主机。但是,现在在marathon中服务的标准输出日志中,我可以看到“node/172.17.0.2 state jump to normal”以及listen\u address和broadcast\u address被设置为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": "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(node/172.17.0.2 state jump to normal)。结果是新节点不能与种子闲聊。
{
"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?
提前谢谢!
1条答案
按热度按时间ar5n3qh51#
在网桥网络模式下形成cassandra集群时,应注意settinhs以下。1.将以下值设置为主机ip(不是容器ip)
种子:公共\u ip广播\u地址:公共\u ip广播\u rpc \u地址:公共\u ip
将侦听地址设置为容器ip
收听地址:172.17.x.x
三。将rpc\u address设置为0.0.0.0(不使用localhost)
这样我们就可以使用桥接网络形成一个cassandra集群。
试试看。确保所需的端口可以从外部世界访问。