参考的网址:Mesos Deploy Scripts、Mesos High Availability Mode、Mesos Configuration、Re:Problems Of Running mesos-0.20.0 with ZooKeeper
实验环境:mesos版本:0.21.0、操作系统:Red Hat 6
经过三天的折腾,终于将Mesos编译好,并进行了单点Master集群的部署和High Availability集群的部署,官方文档对集群的部署写得比较简略,Mesos的下载、编译和安装可以参考 Mesos Getting Started 或者我的上一篇博文。现在假定我们已经在三台机子上安装了Mesos,接下来是进行集群的配置。以下是两种方式的配置和部署:
单点Master集群
集群架构如下:
IP | 主机名 | 运行的进程或应用 |
192.168.70.130 | worker00 | Mesos Master、Mesos Slave |
192.168.70.131 | worker01 | Mesos Slave |
192.168.70.132 | worker02 | Mesos Slave |
注意:如果节点够多的话,建议Master和Slave进程运行在不同的节点中,我只在三个节点中安装了Mesos,所以Master和Slave共享了worker00这个节点
1、增加、修改配置文件
在节点上安装好Mesos后,默认的配置文件在/usr/local/etc/mesos目录下,刚开始目录下只有mesos-deploy-env.sh.template、mesos-master-env.sh.template和mesos-slave-env.sh.template这三个模版文件。我们需要新建masters和slaves文件、根据原有的文件复制出mesos-deploy-env.sh、mesos-master-env.sh和mesos-slave-env.sh这三个文件,如下图:
1) masters和slaves
这两个文件分别写入运行Master的主机名或IP以及Slave运行的主机名或IP,每行一个,如下图。
2) mesos-master-env.sh
该文件是关于Master的相关配置。单点Master集群的需要配置的参数是:MESOS_log_dir:log输出的目录,如果不设置,默认不会产生log、MESOS_worker_dir:存放元数据的目录。
3) mesos-slave-env.sh
该文件是Slave相关的配置文件。MESOS_log_dir:log输出的目录,如果不设置,默认不会产生log;MESOS_worker_dir:存放framework工作目录的目录路径(默认: /tmp/mesos)。MESOS_master这个参数是必不可少的,这里设为Master节点的主机名:端口。
4)mesos-deploy-env.sh
该文件包含了部署脚本运行的环境变量。只要从模版文件复制过来即可,不需要添加其他参数。
这样配置文件的相关参数就设置好了。需要将这些配置文件复制给每一个mesos所在的节点。
2、启动集群
在/usr/local/sbin目录下有一些脚本,可以用来启动集群和关闭集群。mesos-start-masters.sh 用于启动所有的Masters; mesos-start-slaves.sh 用于启动所有的Slaves; mesos-start-cluster.sh 用于启动所有的Masters和Slaves; mesos-stop-masters.sh 用于关闭所有的Masters; mesos-stop-slaves.sh 用于关闭所有的Slaves; mesos-stop-cluster.sh 用于关闭所有的Masters和Slaves;
现在我们执行./mesos-start-cluster.sh启动集群:
3、查看集群启动情况
在浏览器中输入http://192.168.70.130:5050来查看Web UI。可以看到集群已经跑起来了。
点击Slaves,可以看到从节点的状态。
High Availability集群
IP | 主机名 | 运行的进程或应用 |
192.168.70.130 | worker00 | Mesos Master、Mesos Slave |
192.168.70.131 | worker01 | Mesos Master、Mesos Slave |
192.168.70.132 | worker02 | Mesos Master、Mesos Slave |
192.168.70.135 | worker05 | ZooKeeper |
192.168.70.136 | worker06 | ZooKeeper |
192.168.70.137 | worker07 | ZooKeeper |
注意:如果节点够多的话,建议Master和Slave进程运行在不同的节点中,我只在三个节点中安装了Mesos,所以worker00~worker02上都运行了Master和Slave进程。
1、增加、修改配置文件
在节点上安装好Mesos后,默认的配置文件在/usr/local/etc/mesos目录下,刚开始目录下只有mesos-deploy-env.sh.template、mesos-master-env.sh.template和mesos-slave-env.sh.template这三个模版文件。我们需要新建masters和slaves文件、根据原有的文件复制出mesos-deploy-env.sh、mesos-master-env.sh和mesos-slave-env.sh这三个文件,如下图:
1) masters和slaves
这两个文件分别写入运行Master的主机名或IP以及Slave运行的主机名或IP,每行一个,如下图。
2) mesos-master-env.sh
该文件是关于Master的相关配置。主要需要配置的参数是MESOS_zk:Zookeeper的相关信息、MESOS_log_dir:log输出的目录,如果不设置,默认不会产生log、MESOS_worker_dir:存放元数据的目录,如果对配置文件修改后,可能需要删除该目录下的文件,然后再重新启动。之前启动时发现有问题,删除该目录中的数据,重启后,运行正常,但删除该目录下的文件需要谨慎,会使你元数据丢失,个人感觉跟Hadoop的HDFS格式化差不多。MESOS_quorum这个参数在HA中是必不可少的,Master的个数最好是奇数个的,而MESOS_quorum这个参数需要根据Mesos的Master的个数而设定,如
如果你有1个master,MESOS_quorum=1
如果你有3个master,MESOS_quorum=2
如果你有5个master,MESOS_quorum=3
如果你设置成2个master,MESOS_quorum=2或者有2个master,MESOS_quorum=1,这样启动后,当Active 的 Master挂掉后,将无法实现Standby的Master切换成Active。这就是为什么我在这里采用3个master,以及MESOS_quorum设为2的原因。
3) mesos-slave-env.sh
该文件是Slave相关的配置文件。MESOS_log_dir:log输出的目录,如果不设置,默认不会产生log;MESOS_worker_dir:存放framework工作目录的目录路径(默认: /tmp/mesos)。
4)mesos-deploy-env.sh
该文件包含了部署脚本运行的环境变量。只要从模版文件复制过来即可,不需要添加其他参数。
这样配置文件的相关参数就设置好了。需要将这些配置文件复制给每一个mesos所在的节点。
2、启动集群
在/usr/local/sbin目录下有一些脚本,可以用来启动集群和关闭集群。mesos-start-masters.sh 用于启动所有的Masters; mesos-start-slaves.sh 用于启动所有的Slaves; mesos-start-cluster.sh 用于启动所有的Masters和Slaves; mesos-stop-masters.sh 用于关闭所有的Masters; mesos-stop-slaves.sh 用于关闭所有的Slaves; mesos-stop-cluster.sh 用于关闭所有的Masters和Slaves;
在启动集群之前,首先要确定ZooKeeper集群已经启动。ZooKeeper集群的部署和启动这边就不说了,大家应该都是会的(关于ZooKeeper可以参看我之前的 Zookeeper 简要介绍和安装 和 ZooKeeper集群搭建 这两篇文章)。现在我们执行./mesos-start-cluster.sh启动集群:
3、查看集群启动情况
在浏览器中输入http://192.168.70.130:5050来查看Web UI。可以看到集群已经跑起来了,worker00这个主机上的Master是leader。
点击Slave,可以看到三个从节点,工作正常。
在浏览器中输入http://192.168.70.131:5050,显示worker01这个节点的Master不是leader,与我们预期一样。
在浏览器中输入http://192.168.70.132:5050,显示worker02这个节点的Master也不是leader,也是我们想要的结果。
4、测试High Availability
现在三个Master中worker00上的Master已经被选举为leader,那么如果这个Master进程死掉后,其他worker01和worker02上的两个Master中的其中一个能否被选为leader呢?如果可以,就说明我们的Mesos High Availability是正常运行的。现在来测试下,在worker00上查找占用5050端口的进程,查找到进程号之后,将它杀掉:
查看web页面,发现在http://192.168.70.130:5050 (http://worker00:5050)上已经访问不到管理页面了。现在由worker01被选举为leader来接管工作,并且worker01工作正常,至此,大功告成,Mesoso High Availability集群部署完成了。
虽说配置文件中的内容不多,但是由于参考资料较少,官方文档给出的部署步骤也很简略,所以这是经过我一番折腾,才搞出来的,特意将这些记录下来,方便自己和他人查阅。