如何利用网桥网络建立马拉松赛Cassandra码头集群?

xqnpmsa8  于 2021-06-26  发布在  Mesos
关注(0)|答案(1)|浏览(259)

我有一个生产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?
提前谢谢!

ar5n3qh5

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集群。
试试看。确保所需的端口可以从外部世界访问。

相关问题