相关理论请参考:https://www.cnblogs.com/Bourbon-tian/p/7155054.html,本文基于https://www.cnblogs.com/Bourbon-tian/p/7151840.html(文章时2017年写的)进行了实践,针对新版mesos部署会出现的问题提供了解决方案。

宿主操作系统:Win10

虚拟机:VirtualBox-6.1.10-138449-Win.exe

系统镜像:CentOS-7.5-x86_64-DVD-1804.iso

机器信息:

master1 172.16.40.186
master2 172.16.40.187
master3 172.16.40.188

slave1 172.16.40.189
slave2 172.16.40.190
slave3 172.16.40.191

这里部属的机器为3个Master控制节点,3个slave运行节点,其中:

zookeeper、Mesos-master、marathon运行在Master端;Mesos-slave和docker运行在Slave端;需要修改zk的内容来保证slave能够被发现和管理

构建环境

首先搭建虚拟机操作系统环境,安装增强功能,让windows和linux间的复制粘贴好用。VirtualBox 安装Centos7的方法请自行搜索。

安装增强功能时出现kernel headers not found for target kernel解决办法

#update kernel
yum update kernel -y
#Install the kernel-headers, kernel-devel and other required packages
yum install kernel-headers kernel-devel gcc make -y
#Reboot the server to make sure it load to the new kernel
init

切换阿里yum镜像源

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache

后续操作使用yum在线更新mesos时会很慢,没有国内镜像可用,建议先用阿里云镜像下载,后来速度无法忍受时,再用梯子(临时配个代理,例如:export http_proxy="http://[ip]:[端口]",大家自行解决)。

下好包后再清除环境变量,在命令行输入: unset http_proxy

配置mesos-master(3台master节点都要操作)

# 关闭selinux
[root@master- ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
[root@master- ~]# setenforce # 关闭防火墙
[root@master- ~]# systemctl stop firewalld.servic
[root@master- ~]# systemctl disable firewalld.service # 添加mesos的yum源
[root@master- ~]# rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-2.noarch.rpm # 安装mesos、marathon、zookeeper
#安装依赖的JDK环境
[root@master- ~]# yum install -y java-1.8.-openjdk-devel java-1.8.-openjdk
#mesos相关的包大概180MB(有些没有国内源)
[root@master- ~]# yum -y install mesos marathon mesosphere-zookeeper # 配置zookeeper
# 设置文件/var/lib/zookeeper/myid为当前mesos-master节点的id,id必须为1-255中的整数
# master-1机器id为""
[root@master- ~]# echo > /var/lib/zookeeper/myid # master-2机器id为""
[root@master- ~]# echo > /var/lib/zookeeper/myid # master-3机器id为""
[root@master- ~]# echo > /var/lib/zookeeper/myid # 修改zookeeper配置文件
[root@master- ~]# cp /etc/zookeeper/conf/zoo.cfg /etc/zookeeper/conf/zoo.cfg.bak
[root@master- ~]# vim /etc/zookeeper/conf/zoo.cfg
# 单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是50,如果设置为0,那么表明不作任何限制。请注意这个限制的使用范围,仅仅是单台客户端机器与单台ZK服务器之间的连接数限制,不是针对指定客户端IP,也不是ZK集群的连接数限制,也不是单台ZK对所有客户端的连接数限制。
maxClientCnxns=
# Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳
tickTime=
# Zookeeper的Leader 接受客户端(Follower)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 *= 秒
initLimit=
# 表示 Leader 与 Follower 之间发送消息时请求和应答时间长度,最长不能超过多少个tickTime 的时间长度,总的时间长度就是 *= 秒
syncLimit=
# zookeeper数据文件存放目录
dataDir=/var/lib/zookeeper
# 客户端连接端口
clientPort=
# 数字1,,3表示这个是第几号服务器(是上面myid文件里对应的数字);中间的是master主节点的ip地址
# 第一个端口2888(这个端口可以自己定义)表示的是这个服务器与集群中的 Leader 服务器交换信息的端口
# 第二个端口3888表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
server.= 172.16.40.186::
server.= 172.16.40.187::
server.= 172.16.40.188:: [root@master- ~]# vim /etc/mesos/zk
zk://172.16.40.186:2181,172.16.40.187:2181,172.16.40.188:2181/mesos # 设置文件/etc/master-/quorum内容为一个大于(master节点数除以2)的整数。即采用四舍五入,比如这里有3个master节点,那么3/=1.5,四舍五入为2
[root@master- ~]# echo >/etc/mesos-master/quorum
[root@master- ~]# cat /etc/mesos-master/quorum # 配置mesos和marathon
# 主机名和ip要在hosts中写入,最好不要使用localhost,否则会出现slave不能识别,以及marathon任务下发不正常等现象。 # master-1机器
[root@master- ~]# mkdir -p /etc/marathon/conf
[root@master- ~]# echo 172.16.40.186 > /etc/mesos-master/hostname
[root@master- ~]# echo 172.16.40.186 > /etc/marathon/conf/hostname
[root@master- ~]# hostnamectl --static set-hostname master-.com
[root@master- ~]# echo "172.16.40.186 master-1 master-1.com" >/etc/hosts
[root@master- ~]# cat /etc/hosts
172.16.40.186 master- master-.com # master-2机器
[root@master- ~]# mkdir -p /etc/marathon/conf
[root@master- ~]# echo 172.16.40.187 > /etc/mesos-master/hostname
[root@master- ~]# echo 172.16.40.187 > /etc/marathon/conf/hostname
[root@master- ~]# hostnamectl --static set-hostname master-.com
[root@master- ~]# echo "172.16.40.187 master-2 master-2.com" >/etc/hosts
[root@master- ~]# cat /etc/hosts
172.16.40.187 master- master-.com # master-3机器
[root@master- ~]# mkdir -p /etc/marathon/conf
[root@master- ~]# echo 172.16.40.188 > /etc/mesos-master/hostname
[root@master- ~]# echo 172.16.40.188 > /etc/marathon/conf/hostname
[root@master- ~]# hostnamectl --static set-hostname master-.com
[root@master- ~]# echo "172.16.40.188 master-3 master-3.com" >/etc/hosts
[root@master- ~]# cat /etc/hosts
172.16.40.188 master- master-.com [root@master- ~]# cp /etc/mesos/zk /etc/marathon/conf/master
[root@master- ~]# cp /etc/mesos/zk /etc/marathon/conf/zk
[root@master- ~]# sed -i 's|mesos|marathon|g' /etc/marathon/conf/zk #根据https://www.cnblogs.com/zhangmingcheng/p/8795235.html的说明marathon1.5以上不支持上面那么配置了,要用新的方式:
"/etc/marathon/conf " marathon1.5以后不支持了
发现是master配置找不到,尝试着给marathon填加mesos的地址参数,在文件/etc/default/marathon中增加如下内容:
MARATHON_MASTER="zk://172.16.40.186:2181,172.16.40.187:2181,172.16.40.188:2181/mesos"
MARATHON_ZK="zk://172.16.40.186:2181,172.16.40.187:2181,172.16.40.188:2181/marathon" # 启动mesos,marathon,zookeeper
[root@master- ~]# systemctl enable zookeeper && systemctl enable mesos-master && systemctl enable marathon
[root@master- ~]# systemctl start zookeeper && systemctl start mesos-master && systemctl start marathon
[root@master- ~]# systemctl disable mesos-slave # 查看进程状态
[root@master- ~]# systemctl status zookeeper
[root@master- ~]# systemctl status mesos-master
[root@master- ~]# systemctl status marathon [root@master- ~]# lsof -i:
[root@master- ~]# lsof -i:
[root@master- ~]# lsof -i: # 检查配置
#配置过程中出错,为了方便检查对比各master配置,直接执行如下命令。
[root@master- ~]# cat /var/lib/zookeeper/myid && grep -v "^#" /etc/zookeeper/conf/zoo.cfg && cat /etc/mesos/zk && cat /etc/mesos-master/quorum && cat /etc/mesos-master/hostname&& cat /etc/marathon/conf/hostname&& cat /etc/marathon/conf/master&&cat /etc/marathon/conf/zk maxClientCnxns=
tickTime=
initLimit=
syncLimit=
dataDir=/var/lib/zookeeper
clientPort=
server.= 172.16.40.186::
server.= 172.16.40.187::
server.= 172.16.40.188::
zk://172.16.40.186:2181,172.16.40.187:2181,172.16.40.188:2181/mesos 192.168.93.133
192.168.93.133
zk://172.16.40.186:2181,172.16.40.187:2181,172.16.40.188:2181/mesos
zk://172.16.40.186:2181,172.16.40.187:2181,172.16.40.188:2181/marathon # 以上操作后,master节点机不能ping通外网,是因为DNS解析文件被改变了,执行下面命令即可:
[root@master- local]# echo "nameserver 114.114.114.114" >> /etc/resolv.conf
[root@master- ~]# ping www.baidu.com
PING www.a.shifen.com (180.97.33.108) () bytes of data.
bytes from 180.97.33.108 (180.97.33.108): icmp_seq= ttl= time=13.1 ms
...

配置slave节点(3台slave节点都要操作)

# 关闭selinux
[root@slave- ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
[root@slave- ~]# setenforce # 关闭防火墙
[root@slave- ~]# systemctl stop firewalld.servic
[root@slave- ~]# systemctl disable firewalld.service # 安装并启动docker
[root@slave- ~]# yum install -y docker
[root@slave- ~]# systemctl enable docker
[root@slave- ~]# systemctl start docker #解决docker pull镜像报错或者超时的方案,将拉取地址改为国内镜像仓库
#解决方法修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。然后重启docker就可以了(我配完了还是慢,原因不明)
{
"registry-mirrors":["https://cr.console.aliyun.com"]
}
#重启docker
[root@slave- ~]# systemctl daemon-reload
[root@slave- ~]# systemctl restart docker # 拉取镜像(三台slave节点机都需要下载镜像,因为在marathon界面里创建docker容器,是随机在slave节点机上读取镜像创建的)
[root@slave- ~]# docker pull nginx
[root@slave- ~]# docker pull tomcat
[root@slave- ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 2f7f7bce8929 days ago 107.5 MB
docker.io/tomcat latest a2fbbcebd67e days ago 333.9 MB # 添加mesos的yum源
[root@slave- ~]# rpm -Uvh http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-2.noarch.rpm # 安装mesos(先正常用阿里镜像下,再用梯子,完事再调回来)
[root@slave- ~]# yum -y install mesos # 配置master信息
# slave-1机器
[root@slave- ~]# echo 172.16.40.189 > /etc/mesos-slave/hostname
[root@slave- ~]# hostnamectl --static set-hostname slave-.com
[root@slave- ~]# echo "172.16.40.189 slave-1 slave-1.com" >/etc/hosts
[root@slave- ~]# cat /etc/hosts
172.16.40.189 slave- slave-.com # slave-2机器
[root@slave- ~]# echo 172.16.40.190 > /etc/mesos-slave/hostname
[root@slave- ~]# hostnamectl --static set-hostname slave-.com
[root@slave- ~]# echo "172.16.40.190 slave-2 slave-1.com" >/etc/hosts
[root@slave- ~]# cat /etc/hosts
172.16.40.190 slave- slave-.com # slave-3机器
[root@slave- ~]# echo 172.16.40.191 > /etc/mesos-slave/hostname
[root@slave- ~]# hostnamectl --static set-hostname slave-.com
[root@slave- ~]# echo "172.16.40.191 slave-3 slave-1.com" >/etc/hosts
[root@slave- ~]# cat /etc/hosts
172.16.40.191 slave- slave-.com #把这个zk改了
[root@slave- ~]# cat /etc/mesos/zk
zk://172.16.40.186:2181,172.16.40.187:2181,172.16.40.188:2181/mesos # 配置marathon调用mesos运行docker容器
[root@slave- ~]# echo 'docker,mesos' > /etc/mesos-slave/containerizers #启动slave(要保证mesos-slave启动后,读取的zk信息是那三个mesos-master的连接信息,否则mesos访问页面里就不会出现这个slave节点信息。ps -ef|grep mesos-slave,如果没有读取到zk信息,可以尝试重启服务器再查看)
[root@slave- ~]# systemctl start mesos-slave && systemctl enable mesos-slave
[root@slave- ~]# systemctl disable mesos-master # 以上操作后,slave节点机不能ping通外网,是因为DNS解析文件被改变了,执行下面命令即可:
[root@slave- ~]#echo "nameserver 114.114.114.114" >> /etc/resolv.conf
[root@slave- ~]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.38) () bytes of data.
bytes from 14.215.177.38: icmp_seq= ttl= time=38.3 ms
....... # 如果mesos-slave启动失败,可以如下检查:
[root@slave- ~]# journalctl -f -u mesos-slave
网络释义
Mesos: 枫币
Mesos and YARN: 翻译张怡
master  [ˈmɑːstə(r)]  master&type=1详细X
基本翻译
v. 精通;控制;征服;制作……母版
adj. 主人的;主要的;熟练的;原始版的
n. 主人;大师;硕士;男教师;原件;院长;主宰者;船长;著名画家;少爷;桅船
n. (Master) 马斯特(人名)
网络释义
master: 硕士
master key: 万能钥匙
Master theorem: 主定理

最新文章

  1. [原]CentOS7 部署GeoServer2.92
  2. 使用野狗(Wilddog)云setValue写入数据
  3. Selenium+WebDriver+Python 定时控制任务
  4. 【freemaker】之判断是否为空,表达式的使用
  5. typedef用法
  6. MonkeyRunner学习(1)测试连接
  7. Linux消息队列
  8. 配有Tesla K40c的服务器新装Ubuntu16.04并安装CUDA8.0、Anaconda3、Matlab2016a、OPENCV3.1、CuDNN5.1、MXNet
  9. NetAnalyzer笔记 之 五 一些抓包技巧分享(不定期更新)
  10. EXCEL技能之数据去重
  11. C# Linq to Entity 多条件 OR查询
  12. Python01(linux基础)
  13. centos7修改网卡名称为eth0-技术流ken
  14. new Vue 发生了什么
  15. Tomcat服务器环境变量配置及在Eclipse中启动和配置
  16. Primitives vs Objects
  17. 遍历DOM树,理解更新范围
  18. 使用 GNU Libtool 创建库
  19. 搭建本地离线yum仓库
  20. mybatis第二天_拓展——与spring整合以及逆向工程

热门文章

  1. vc6.0代码转vs2017相关问题
  2. S7-1200视频教程: S7-1200的功能与特点-跟我学 - 1/112
  3. mysql主从同步参数
  4. 微信小程序-创建小程序页面
  5. Apollo配置中心的实战
  6. JavaWeb网上图书商城完整项目--day02-26.查询所有分类功能之DAO层实现
  7. ora-06502 ORA-06512问题解决
  8. 蝙蝠算法(BA)学习笔记
  9. JavaScript学习笔记(1)
  10. Linux中more和less的区别