这两天在尝试搭建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