Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在马拉松比赛中使用桥接网络建立Cassandra Docker集群?_Docker_Cassandra_Mesos_Marathon_Dcos - Fatal编程技术网

如何在马拉松比赛中使用桥接网络建立Cassandra Docker集群?

如何在马拉松比赛中使用桥接网络建立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状态跳转到正常”,并且侦听

我有一个生产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。该节点功能齐全,我可以创建一个测试数据库

{
  "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

  • 将侦听地址设置为容器Ip
  • 收听地址:172.17.x.x

    三,。将rpc_地址设置为0.0.0.0(不使用localhost)

    通过这种方式,我们实际上可以使用桥接网络形成Cassandra集群


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

    为什么不为Cassandra使用DC/OS Universe软件包?我想这会让事情变得容易很多。。。