使用Docker快速搭建Mesos高可用集群

目录

作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/http://andyyoung01.16mb.com/

上篇文章通过Docker快速搭建了ELK日志分析系统,体会了Docker对于应用程序的部署提供的便利性。本篇尝试一下通过Docker快速搭建Mesos高可用集群,再次使用docker进行应用程序的快速部署。

在Mesos高可用设计中,引入了ZooKeeper集群来辅助Leader的选举,这在当前的分布式集群中比较流行,比如Docker Swarm高可用集群同时支持利用consul、etcd、ZooKeeper进行Leader的选举,Kubernetes也采用了etcd等实现了自身的高可用。这种设计可以理解为大集群+小集群,小集群也就是ZooKeeper/etcd/consul集群,它们为大集群服务,比如提供Leader的选举,为大集群提供配置数据的存储和服务发现等功能。在一个复杂的系统中,这个小集群可以为系统的多个服务组件同时提供服务。因此在部署高可用Mesos集群时,必须首先部署好一个ZooKeeper集群,这里我们直接使用文章“使用Docker快速搭建ZooKeeper高可用集群”中搭建的ZooKeeper集群,集群有3个节点,包括:
centos7-A:192.168.71.167
centos7-B:192.168.71.168
centos7-C:192.168.71.169
这三个节点上已经部署了ZooKeeper,下面部署3个节点的Mesos master,后面的Mesos Agent(Mesos slave)仍然部署在这三台机器上,在三个节点上分别运行如下命令:

1
2
3
4
5
6
docker run -d \
-e MESOS_HOSTNAME=centos7-A \
-e MESOS_IP=192.168.71.167 \
-e MESOS_QUORUM=2 \
-e MESOS_ZK=zk://192.168.71.167:2181,192.168.71.168:2181,192.168.71.169:2181/mesos \
--name mesos-master --net host mesoscloud/mesos-master:0.28.1-centos-7

上面的命令中MESOS_HOSTNAMEMESOS_IP要与每个节点的hostname和ip相对应。下面在每个节点上启动agent:

1
2
3
4
5
6
7
8
docker run -d \
-e MESOS_HOSTNAME=centos7-A \
-e MESOS_IP=192.168.71.167 \
-e MESOS_MASTER=zk://192.168.71.167:2181,192.168.71.168:2181,192.168.71.169:2181/mesos \
-v /sys/fs/cgroup:/sys/fs/cgroup \
-v /var/run/docker.sock:/var/run/docker.sock \
--name mesos-slave --net host --privileged \
mesoscloud/mesos-slave:0.28.1-centos-7

与master类似,命令中的MESOS_HOSTNAMEMESOS_IP要与每个节点的hostname和ip相对应。如果要加入更多的agent节点,只需要在新的节点上运行上述命令,便可以将新的agent节点加入集群。
上述命令在每个节点上执行完毕后,整个高可用集群便搭建完毕了,可以通过日志和mesos提供的web页面来进行验证。通过浏览器访问三个master中的第一IP地址,http://192.168.71.167:5050/结果如下图:
“web interface of mesos”
下面还是通过docker将Marathon Framework加入到此集群中:

1
2
3
4
5
6
7
docker run -d \
-e MARATHON_HOSTNAME=centos7-A \
-e MARATHON_HTTPS_ADDRESS=192.168.71.167 \
-e MARATHON_HTTP_ADDRESS=192.168.71.167 \
-e MARATHON_MASTER=zk://192.168.71.167:2181,192.168.71.168:2181,192.168.71.169:2181/mesos \
-e MARATHON_ZK=zk://192.168.71.167:2181,192.168.71.168:2181,192.168.71.169:2181/marathon \
--name marathon --net host mesoscloud/marathon:1.1.1-centos-7

Marathon也支持高可用的配置,与mesos master类似,上述命令在每个节点都执行一次,并且在每个节点都指定该节点自己的ip和hostname,这样Marathon便也成为高可用的部署了。

本篇通过docker快速部署了高可用的mesos集群。当然也可以通过配置管理工具如salt等,将上述命令写成state文件的形式,使部署更加容易管理,从而使整个IT基础设施通过配置文件的形式管理起来。