我有一個生產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,就像在主機網絡模式中一樣?
預先感謝您!
你爲什麼不使用Cassandra的DC/OS Universe軟件包?我想這會讓事情變得更容易... – Tobi