這兩天在嘗試搭建messo+chronos+ zookeeper集羣,以下做一下小總結。
1在雲平臺上申請三臺Ubuntu 14.04虛擬機,三臺主機ip分別爲:10.18.5.150,10.18.5.151, 10.18.5.217,分別裝好docker1.17。wget -qO- https://get.docker.com/ | sh。
2三臺主機上均寫一個docker-compose.yml,大部分代碼都相同。不同之處:zookeeper的MYID要設置成不同的值(1,2,3),否則zookeeper無法選出leader;涉及ip的地方要注意和所在主機ip保持一致。docker-compose.yml的代碼貼在附錄。
注:因爲要同時對三臺主機進行操作,在不使用ansible此類工具時,希望屏幕上能顯示三個界面並能同時寫入代碼,如很常用的兩行命令,sudo docker-compose down (slave)和sudo docker-composeup –d (slave)。因此,使用tmux分屏(如何分屏?tmux ->sudo apt-get install tmux ->ctrl+B,?進入快捷鍵文檔->splitwindow:橫分屏或豎分屏ctrl+B,;->man ->set sycn-pane on 屏同時操作),分別ssh+ ip登錄三臺主機,然後就可以同時操作三臺主機了。分屏後,如何進入分屏界面?tmux a如何退出分屏界面,回到本機模式?Ctrl + B , D。
3需要在每臺主機上修改 /etc/default/docker,使能夠從公司鏡像倉庫拉下鏡像。
sudo vim /etc/default/docker
DOCKER_OPTS="--registry-mirror=http://mirror-hub.cloud.***.com--insecure-registry=mirror-hub.cloud. ***.com --insecure-registry=hub.cloud. ***.com"
修改完/etc/default/docker後需要重啓docker, sudodocker restart。接着拉起docker-compose,
sudo docker-compose –d。docker-composeconfig 查看是否有報錯,否則修改docker-compos
e.yml。sudo docker-composeexec slave bash 進入slave。
4在拉起docker-compose後,在瀏覽器中輸入三臺主機之一的ip:10.18.5.151,發現刷不出來,sudo docker-compose ps看一下master, slave,zookeeper的狀態,發現並不是所有的都up,存在exit,由此得知其中有沒拉起來的。看日誌找錯誤sudo docker-compose logs --tail 100 master, sudo docker-compose logs--tail 100 slave, sudo docker-compose logs --tail 100 zookeeper,發現log中出現異常ip(分三臺主機的ip),因此sudoiptables -A INPUT -s 10.18.5.92 -j DROP,將這個異常的ip禁掉。這樣,集羣正常拉起了。
5拉起後,在瀏覽器中輸入10.18.5.150:5050,能正常刷出並能看到3個slave;再看chronos是否正常,在瀏覽器中輸入10.18.5.150:8080,發現chronos中不能直接加job。因此查看chronos文檔add adocker job,發現需要通過發送post請求,因此在chrome中(chrome應用商場)安裝rest插件:postman,post請求填寫如下:
10.18.5.150:8080/scheduler/iso8601
Content-Type: application/json
{
"schedule": "R///PT2M",
"name": "sleep 100",
"container": {
"type": "DOCKER",
"image": "hub.//……//ubuntu",
"network": "BRIDGE",
"volumes": [
{
"containerPath": "/var/log/",
"hostPath": "/logs/",
"mode": "RW"
}
]
},
"cpus": "0.5",
"mem": "512",
"uris": [],
"command": "sleep 100"
}
附錄
version: '2'
services:
zookeeper:
image: hub.cloud.***.com/sysdev/mesos_zookeeper
network_mode: "host"
environment:
- MYID=2
- SERVERS=10.18.5.150,10.18.5.151,10.18.5.217
volumes:
- /etc/localtime:/etc/localtime:ro
master:
image: hub.cloud. ***.com/sysdev/mesos-master:0.28.0-2.0.16.ubuntu1404
network_mode: "host"
command: --no-hostname_lookup --work_dir=/var/lib/mesos/master
environment:
- MESOS_ZK=zk://10.18.5.150:2181,10.18.5.151:2181,10.18.5.217:2181/mesos
- MESOS_QUORUM=2
- MESOS_ADVERTISE_IP=10.18.5.151
volumes:
- /etc/localtime:/etc/localtime:ro
depends_on:
- zookeeper
slave:
image: hub.cloud. ***.com/sysdev/mesos-slave:0.28.0-2.0.16.ubuntu1404
network_mode: "host"
command: --no-hostname_lookup --containerizers=docker--work_dir=/var/lib/mesos
environment:
- MESOS_MASTER=zk://10.18.5.150:2181,10.18.5.151:2181,10.18.5.217:2181/mesos
- MESOS_containerizers=docker
- MESOS_ADVERTISE_IP=10.18.5.151
volumes:
- /etc/localtime:/etc/localtime:ro
depends_on:
- master
cassandra:
image: cassandra:2.1
network_mode: "host"
environment:
- CASSANDRA_SEEDS=10.18.5.151
- CASSANDRA_CLUSTER_NAME=cassandra_cluster
- CASSANDRA_DC=dc
- CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch
- CASSANDRA_NUM_TOKENS=256
- CASSANDRA_LI
volumes:
- /etc/localtime:/etc/localtime:ro
chronos:
image:hub.cloud. ***.com/ctrip_mesoscloud/chronos:latest
network_mode: "host"
environment:
-CHRONOS_MASTER=zk://10.18.5.150:2181,10.18.5.151:2181,10.18.5.217:2181/mesos
-CHRONOS_ZK_HOSTS=zk://10.18.5.150:2181,10.18.5.151:2181,10.18.5.217:2181/chronos
- CHRONOS_HOSTNAME=10.18.5.151
- CHRONOS_CASSANDRA_CONTACT_POINTS=10.18.5.150,10.18.5.151,10.18.5.217
- CHRONOS_CASSANDRA_KEYSPACE=metrics
- CHRONOS_CASSANDRA_PORT=9042
- CHRONOS_HTTP_PORT=8080
- CHRONOS_JOB_HISTORY_LIMIT=20
volumes:
- /etc/localtime:/etc/localtime:ro
depends_on:
- slave