y/protobuf-2.5.0/src -I/usr/include/subversion-1 -I/usr/include/apr-1 -I/usr/include/apr-1.0 -pthread -g1 -O0 -Wno-unused-local-typedefs -std=c++11 -MT master/libmesos_no_3rdparty_la-quota.lo -MD -MP -MF master/.deps/libmesos_no_3rdparty_la-quota.Tpo -c master/quota.cpp -fPIC -DPIC -o master/.libs/libmesos_no_3rdparty_la-quota.o
g++: 编译器内部错误:已杀死(程序 cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See for instructions.
make[2]: *** [master/libmesos_no_3rdparty_la-master.lo] 错误 1
make[2]: *** 正在等待未完成的任务....
mv -f master/.deps/libmesos_no_3rdparty_la-quota.Tpo master/.deps/libmesos_no_3rdparty_la-quota.Plo
mv -f master/.deps/libmesos_no_3rdparty_la-metrics.Tpo master/.deps/libmesos_no_3rdparty_la-metrics.Plo
mv -f master/.deps/libmesos_no_3rdparty_la-http.Tpo master/.deps/libmesos_no_3rdparty_la-http.Plo
make[2]: 离开目录“/root/mesos-0.28.2/src”
make[1]: *** [all] 错误 2
make[1]: 离开目录“/root/mesos-0.28.2/src”
make: *** [all-recursive] 错误 1
刚开始以为内存分配过低,被OOM了,于是加到3G内存,仍然报错
以为mesos-1.0版本有兼容性问题,于是又换了个低版本的mesos-0.28.2, 还是报错
最后,检查官方安装文档,发现subversion-devel必须大于1.8,而CentOS7.2 光盘源里自带是1.7。
systemd版本需要大于218,而CentOS7.2的systemd已经是219版本,故不用升级。
最后,升级subversion-devel后再次编译,还是报同样的错。
无赖,百度大半天后,看到有朋友也碰到相同问题,也是说内存问题,于是再次调大内存为8G,终于开始了正常编译
总结,编译出错,请安装正确版本的依赖库后调大内存再编译
其它节点,可以直接运行编译好的二进制文件
4.配置mesos集群
http://mesos.apache.org/documentation/latest/configuration/
zk1: 192.168.8.101
zk2: 192.168.8.102
zk3: 192.168.8.103
mesos-m1: 192.168.8.101
mesos-m2: 192.168.8.102
mesos-m3: 192.168.8.103
mesos-a1: 192.168.8.101
mesos-a2: 192.168.8.102
mesos-a3: 192.168.8.103
说明:节省资源,实验环境中192.168.8.101-103这3台主机分别为zookeeper,mesos-maser,mesos-agent节点,生产环境请组件分离
mesos-master
/opt/mesos/sbin/mesos-master --work_dir=/opt/mesos/data --quorum=2 --zk=zk://192.168.8.101:2181,192.168.8.102:2181,192.168.8.103:2181/mesos
mesos-agent
/opt/mesos/sbin/mesos-agent --work_dir=/opt/mesos/data --master=zk://192.168.8.101:2181,192.168.8.102:2181,192.168.8.103:2181/mesos
5.Web UI
192.168.8.101:5050
192.168.8.102:5050
192.168.8.103:5050
三.marathon
https://mesosphere.github.io/marathon/docs/
marathon是容器编排的mesos框架,是目前除kubenutes和swarmkit(docker-engine-1.12内嵌新功能)之外的另一种成熟解决方案
1.安装marathon
curl -L http://downloads.mesosphere.com/marathon/v1.1.1/marathon-1.1.1.tgz
tar -xvf marathon-1.1.1.tgz -C /opt
2.配置marathon HA
https://mesosphere.github.io/marathon/docs/high-availability.html
marathon节点可以在任意节点上,这里还是
marathon1: 192.168.8.101
marathon2: 192.168.8.102
marathon3: 192.168.8.103
cat >/etc/profile.d/marathon.sh <<HERE
export MESOS_NATIVE_JAVA_LIBRARY=/opt/mesos/lib/libmesos.so
export MESOS_NATIVE_LIBRARY=/opt/mesos/lib/libmesos.so
HERE
source /etc/profile
/opt/marathon-1.1.1/bin/start --master zk://192.168.8.101:2181,192.168.8.102:2181,192.168.8.103:2181/mesos --zk zk://192.168.8.101:2181,192.168.8.102:2181,192.168.8.103:2181/marathon
--master #指定mesos master
--zk #指定zookeeper
3.Web UI
192.168.8.101:8080
192.168.8.102:8080
192.168.8.103:8080
marathon默认监听在8080端口,每个marathon HA节点都可以部署和查看到相同的task, 这里部署一个测试app, marathon可以轻松将app拉伸,如下,可以看到,basic-0分别在node1,node2上运行
Hello Marathon: An Inline Shell Script
Let's start with a simple example: an app that prints Hello Marathon
to stdout and then sleeps for 5 sec, in an endless loop. You would use the following JSON application definition to describe the application:
{
"id": "basic-0",
"cmd": "while [ true ] ; do echo 'Hello Marathon' ; sleep 5 ; done",
"cpus": 0.1,
"mem": 10.0,
"instances": 1
}
4.运行docker容器
https://mesosphere.github.io/marathon/docs/native-docker.html
http://mesos.apache.org/documentation/latest/containerizer/
http://mesos.apache.org/documentation/latest/docker-containerizer/
要支持docker容器,需要在mesos-agent节点
i.安装docker-engine
ii.mesos-agent添加--containerizers=docker,mesos参数
(顺序很重要,分隔符前面的为task首选格式),mesos默认使用mesos容器格式
还可以根据需求来指定其它选项,如下
/opt/mesos/sbin/mesos-agent --work_dir=/opt/mesos/data \
--master=zk://192.168.8.101:2181,192.168.8.102:2181,192.168.8.103:2181/mesos \
--containerizers=docker,mesos \
--docker_registry=http://192.168.8.254:5000 \
--executor_registration_timeout=5mins
--docker_store_dir=/tmp/mesos/store/docker #存放容器的目录
--log_dir=/opt/mesos/log #日志目录
--logging_level=WARNING #日志级别
--docker_socket=/var/run/docker.sock #docker socket位置
这里我run了一个python3的简单http server