2017-01-11 45 views
3

我有一個生產DC/OS(v1.8.4)集羣,我正在嘗試在其中設置一個Cassandra集羣。我使用Marathon(v1.3.0)來部署Cassandra節點。我使用Cassandra的官方Docker鏡像,更具體地說是2.2.3版本。如何使用BRIDGE網絡在Marathon中設置Cassandra Docker集羣?

第一種情況:使用主機模式網絡部署卡桑德拉 - 一切OK

在這種情況下,我第一次部署,我稱之爲cassasndra種子節點,並重視與IP 10.32.0.6物理主機。從Marathon的這個服務的stdout日誌中,我可以看到「Node /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" } 
} 

現在我添加使用單獨的部署和提供10.32.0.6作爲種子(設定「CASSANDRA_SEEDS」:在部署JSON的ENV部「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模式網絡部署卡桑德拉 - 休斯頓,我們有一個問題

在這種情況下,我也部署第一卡桑德拉種子節點,並重視與IP物理主機10.32.0.6。但是,現在在Marathon中的服務的stdout日誌中,我可以看到「Node /172.17.0.2狀態跳轉到正常」,並且listen_address和broadcast_address被設置爲172.17.0.2。 172.17.0.2是Docker容器的IP(使用docker檢查發現)。但是,如果我在主節點中使用「_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(Node /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,就像在主機網絡模式中一樣?

預先感謝您!

+0

你爲什麼不使用Cassandra的DC/OS Universe軟件包?我想這會讓事情變得更容易... – Tobi

回答

0

在橋接網絡模式下形成cassandra集羣時,應小心謹慎。 1。設置爲低於值以主機IP(未容器IP)

種子:public_ip Broadcast_address:public_ip Broadcast_rpc_address:public_ip

  • 設置listen_address到容器葉
  • Listen_address:172.17.xx

    3。設置rpc_address爲0.0.0.0(不要使用本地主機)

    這樣我們可以使用橋接網絡實際形成一個Cassandra集羣。

    試試看。確保所需的端口應該可以從外部訪問。

    相關問題