上一篇文章我们了解了mesos解决的问题以及其大致的原理,这篇文章就开始实战搭建一个mesos实战环境
具体地址+操作: https://github.com/ncuwaln/mesos-learn
环境搭建我们采用vagrant来最大程度的模拟真实环境,采用ansible来进行分布式自动运维
环境组成:mesos+docker+marathon,目前暂时只是单master,单zookeeper,单slave,和单marathon,后续会加上HA模式的部署
主要看一下Vagrantfile+主要的playbook的yml文件+inventory.cfg
Vagrantfile
Vagrant.configure("2") do |config|
config.vm.define "master" do |master|
master.vm.box = "CentOS7"
master.vm.network "private_network", ip: "192.168.50.4"
master.vm.provision :shell, inline: "echo 'root:root' | sudo chpasswd"
config.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 4
end
end
config.vm.define "slave" do |slave|
slave.vm.box = "CentOS7"
slave.vm.network "private_network", ip: "192.168.50.5"
slave.vm.provision :shell, inline: "echo 'root:root' | sudo chpasswd"
config.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 4
end
end
end
我特意指定了虚拟机的cpu和内存大小,因为初始编译mesos时很慢而且编译中途抛了oom异常,其实2核+1024应该就够用了
inventory.cfg
[all]
192.168.50.4
192.168.50.5
[master]
192.168.50.4
[slave]
192.168.50.5
mesos.yml
---
- hosts: all
remote_user: root
roles:
- install
tags: install_denpendencies
- hosts: all
remote_user: root
vars:
software_path: /tmp
remote_dir: /tmp
test: false
roles:
- install_mesos
tags: install_mesos
- hosts: slave
remote_user: root
roles:
- install_docker
tags: install_docker
- hosts: master
remote_user: root
vars:
software_path: /tmp
remote_dir: /home
roles:
- install_zk
tags: install_zk
- hosts: master
remote_user: root
vars:
software_path: /tmp
remote_dir: /home
roles:
- install_marathon
tags: install_marathon
我把步骤分的很细,避免一次失败全部重来
tips: 各个组件的下载和安装真的很耗时,我觉得可以做一个安装好了各个组件的镜像,这样可以节省大量时间
暂时直接进入虚拟机里执行命令,后续会用ansible的API进行自动化部署
ssh root@192.168.50.4
# 你可以改成你的路径,但是如果你用我的,默认是这个路径
/home/zookeeper-3.4.11/bin/zkServer.sh start
ssh root@192.168.50.4
mesos-master --hostname=192.168.50.4 --quorum=1 --zk=zk://192.168.50.4:2181/mesos --work_dir=/var/lib/mesos/master --advertise_ip=192.168.50.4&
建议一定加上–advertise_ip选项,因为不加可能你的防火墙会拦截
ssh root@192.168.50.5
mesos-agent --hostname=192.168.50.5 --master=zk://192.168.50.4:2181/mesos --work_dir=/var/lib/mesos/agent --advertise_ip=192.168.50.5 --containerizers=docker,mesos &
此时你可以进入http://192.168.50.4:5050,你会看到mesos的web管理界面。
MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so /home/marathon-1.5.0-96-gf84298d/bin/marathon --master zk://192.168.50.4:2181/mesos --zk zk://192.168.50.4:2181/marathon&
前面的环境变量是用来指定mesos的动态链接库的位置的,此时你可以进入http://192.168.50.4:8080来查看marathon的web管理界面
后续我将会用marathon部署一个我编写的用于测试的web服务,用docker,其实这个很简单,但是我碰到了一些问题,就是目前的文档中都是直接运行一个docker镜像,我在想有没有办法在mesos上从dockerfile开始build一个镜像并进行部署。
后续还会在此基础上进行HA模式的mesos搭建与应用的部署