Mesos+ZooKeeper+Docker+Marathon 集群部署

本贴最后更新于 1528 天前,其中的信息可能已经事过景迁

Mesos 介绍

Mesos 是 apache 旗下的一个项目,是一个分布式资源管理系统,类似于一个操作系统,来管理一台机器的硬件,但是他是分布式的,所以也可以称作分布式操作系统。

官网:http://mesos.apache.org/

mesos 支持各种各样,上百种任务调度框架,官网推荐 Framework:http://mesos.apache.org/documentation/latest/frameworks/

这些框架包含了 长服务、大数据、分布式定时任务等等

他的两层架构设计很灵活,你也可以自己开发一个属于自己的任务调度系统,k8s 也可以作为 mesos 的一个 framework。

基本术语解释

  • Mesos master:负责管理各个 Framework 和 Slave,各个节点的 mesos slave 将资源上报给 mesos-master,并将资源分配个 Framework
  • Mesos slave :负责管理本节点上的各个 Mesos Task,为 Executor 分配资源
  • Framework :计算框架,如 Marathon 等,可以通过 MesosSchedulerDiver 接入 Mesos
  • Executor:执行器,在 Mesos Slave 上安装,用于启动计算框架中的 Task。
  • zookeeper: 注册中心,用于整个集群的高可用,存储 mesos、marathon 的配置信息
  • Docker: 一种容器解决方案,mesos 本身也自带了 container 解决方案,我们这里建议用 docker
  • Marathon:一种长服务任务调度系统,mesos 可支持多种任务调度框架,marathon 只是其中一种。

Mesos 功能

  • 使用 ZooKeeper 的容错复制主服务器
  • 可扩展到数千个节点
  • 使用 Linux 容器隔离任务
  • 多资源调度(内存和 CPU 感知)
  • 用于开发新并行应用程序的 Java,Python 和 C ++ API
  • 用于查看群集状态的 Web UI

环境规划:

192.168.149.129 mesos1

192.168.149.130 mesos2

192.168.149.131 mesos3

192.168.149.132 mesos4 作为 slave 存在

高可用

  1. zookeeper 作为注册配置中心,来存储 mesos,marathon 的配置,以及保证整个集群的高可用。一般来说部署奇数个节点,只要集群数量过半,集群还是可用的,比如 3 个节点可挂掉 1 个,5 个节点可挂掉 2 个。
  2. mesos-master 至少部署 3 个节点,并配置 quorum 参数,保证 master 的高可用
  3. mesos-slave 是整个计算和部署资源池,可部署成千上万个节点
  4. marathon 部署至少三个节点,通过注册 zookeeper 选举,保证高可用

基础环境准备:

防火墙及 SELINUX 安全策略确认已经关闭

#静态解析配置

cat <> /etc/hosts

192.168.149.129 mesos1

192.168.149.130 mesos2

192.168.149.131 mesos3

192.168.149.132 mesos4

EOF

#yum 源准备,依赖更新

wget -O /etc/yum.repos.d/cetos-base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install http://repos.mesosphere.io/el/7/noarch/RPMS/mesosphere-el-repo-7-1.noarch.rpm

yum install -y yum-utils device-mapper-persistent-data lvm2 lrzsz

mesos1-3 master 操作

yum -y install mesos docker-ce marathon java-1.8.0-openjdk.x86_64

wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz

tar xf apache-zookeeper-3.6.2-bin.tar.gz

mv apache-zookeeper-3.6.2-bin /usr/local/zookeeper

cd /usr/local/zookeeper/

mkdir -p dataDir

mkdir dataLogDir

cd conf/

mv zoo_sample.cfg zoo.cfg

vim zoo.cfg

dataDir=/usr/local/zookeeper/dataDir

dataLogDir=/usr/local/zookeeper/dataLogDir

admin.serverPort=8888 #此处有坑,如果是 3.5 以上版本 zk,他默认会占用 marathon 的 8080 端口,在这里修改掉

#末尾添加,三个集群的 id 配置, 这里的主机名替换成真实的主机名

server.0=mesos1:2888:3888

server.1=mesos2:2888:3888

server.2=mesos3:2888:3888


echo 0 > /usr/local/zookeeper/dataDir/myid #此处修改 myid 文件为自己的配置文件中定义的 id

scp -r /usr/local/zookeeper/ root@mesos2:/usr/local/zookeeper

scp -r /usr/local/zookeeper/ root@mesos3:/usr/local/zookeeper

#分别修改 myid 文件为自己的配置文件中定义的 id

[root@mesos3 conf]# cd ..

[root@mesos3 zookeeper]# pwd

/usr/local/zookeeper #当前路径

[root@mesos1 zookeeper]# ./bin/zkServer.sh start #启动 zookeeper

[root@mesos1 zookeeper]# ./bin/zkServer.sh status #查看 leader 状态

建议:生产环境下,建议 mesos-master、zookeeper 和 mesos-slave 分开部署,测试环境可复用。

注意:zookeeper 需要部署成集群方式

zookeeper 配置

集群方式配置时,节点数量需要为奇数,比如 3 或者 5,测试环境建议 3 个节点,一般生产环境建议 5 个节点,节点过多反而影响整体的性能,因为 zookeeper 的数据多节点同步是同步进行的。

/var/lib/zookeeper/myid 三个节点的整个配置必须和如下配置中指定的 id 一致。这里分别为 1、2、3

主配置文件:/etc/zookeeper/zoo.cfg

三个节点上都需要配置相同的配置文件

mesos4 slave 操作

yum -y install mesos docker-ce java-1.8.0-openjdk.x86_64

zk 配置:

mesos 主节点的服务器都需要配置编辑 /etc/mesos/zk 内容如下

,mesos2:2181,mesos3:2181/mesos

mesos master 配置

修改/etc/mesos-master/quorum 文件内容为 2,整个数字表示 不小于 master 的数量除以 2,来保证整个集群的高可用。

#编辑配置文件/etc/mesos-master/hostname

echo 192.168.149.129 >> /etc/mesos-master/hostname #分别输入本机 IP

指定 docker 作为容器方案 mesos slave 配置

vim /etc/mesos-slave/containerizers

docker #添加内容为 docker

marathon 配置;mesos 主节点配置

指定 mesos 在 zk 中的位置/mesos,以及 marathon 自己的 zk 位置/marathon

**vim /etc/default/marathon ** #编辑配置文件


MARATHON_MASTER="zk://mesos1:2181,mesos2:2181,mesos3:2181/mesos"MARATHON_ZK=",mesos2:2181,mesos3:2181/marathon"

Docker 配置

修改 systemctl 启动脚本, ExecStart 修改如下,主要是关闭 iptables,其他的配置可选

vim /usr/lib/systemd/system/docker.service


ExecStart=/usr/bin/dockerd -H --containerd=/run/containerd/containerd.sock --iptables=false --log-driver=syslog --log-opt syslog-facility=local6 --log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}" --insecure-registry mesos1:5000

systemctl daemon-reload #重载配置

启动 docker

systemctl start docker

#启动 mesos-master 和 mesos-slave、marathon,需要先启动 docker

Mesos1-3 master 机器启动服务

systemctl start mesos-master mesos-slave marathon

Mesos4 slave 启动服务

systemctl start mesos-slave

UI 页面

marathon:http://192.168.149.129:8080

mesos: http://192.168.149.129:5050

mesos-slave 日志切割

在/etc/mesos-slave/下配置模块文件 container_logger 和 modules

root@mesos4 /#touch /etc/mesos-slave/{container_logger,modules}

root@mesos4 latest# vim /etc/mesos-slave/container_logger
org_apache_mesos_LogrotateContainerLogger #添加内容

root@mesos4 latest# vim /etc/mesos-slave/modules
/etc/mesos-slave-modules.json #添加内容

root@mesos4 latest# vim /etc/mesos-slave-modules.json #以下为添加内容

{
"libraries": [
{
"file": "/usr/lib/liblogrotate_container_logger.so",
"modules": [
{
"name": "org_apache_mesos_LogrotateContainerLogger",
"parameters": [
{
"key": "launcher_dir",
"value": "/usr/libexec/mesos",
"key": "max_stdout_size",
"value": "5MB"
}
]
}
]
}
]
}

重启 mesos-slave

root@test41pub.tsht3.mc.ops latest# systemctl restart mesos-slave

在沙箱目录下生成这几个文件
root@test41pub.tsht3.mc.ops latest# ll

-rw-r--r-- 1 root root    300 Jul 10 17:25 docker.tar.gz
-rw-r--r-- 1 root root   2638 Jul 10 17:25 stderr
-rw-r--r-- 1 root root    291 Jul 10 17:25 stderr.logrotate.conf
-rw-r--r-- 1 root root 230253 Jul 10 18:11 stdout
-rw-r--r-- 1 root root    290 Jul 10 17:25 stdout.logrotate.conf
-rw-r--r-- 1 root root    321 Jul 10 17:47 stdout.logrotate.state

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...