阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何使用Zookeeper+Mesos+Marathon搭建Docker集群管理平台

185次阅读
没有评论

共计 8126 个字符,预计需要花费 21 分钟才能阅读完成。

Mesos 概述

Apache Mesos 是一款基于多资源(内存、CPU、磁盘、端口等)调度的开源集群管理套件,能使容错和分布式系统更加容易使用。其采用了 Master/Slave 结构来简化设计,将 Master 做的尽可能轻量级,仅保存了各种计算框架(Framwork)和 Mesos Slave 的状态信息, 这些状态很容易在 Mesos 出现故障时被重构,所以使用 zookeeper 解决 master 单点故障问题。

Mesos 工作原理

Mesos Master 充当全局资源调度器角色,采用某种策略算法将某个 Save
上的空闲资源分配给某个 Famework, 而各种 Framework 则是通过自己的调度器向 master 注册进行接入,master slave 则是收集任务状态和启动各个 Framework 的 Executor。其架构图如下:

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台

基本术语:

  • Mesos master: 负责管理各个 Framework 和 Slave, 并将 Slave 上的资源分配给各个 Framework。
  • Mesos Slave: 负责管理本节点上的各个 Mesos Task, 为各个 Executor 分配资源。
  • Framework: 计算框架,如:Hadoop、Spark 等,可以通过 MesosSchedulerDiver 接入 Mesos。
  • Executor:执行器,在 Mesos Slave 上安装,用于启动计算框架中的 Task。

Zookeeper 概述

ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。其中 Master 选举可以说是 ZooKeeper 最典型的应用场景了。生产环境中 Zookeeper 是以宕机个数过半来让整个集群宕机的, 所以 master 至少三个节点。

Marathon

Marathon 是一个 Mesos 框架,能够支持运行长服务,比如 web 应用等。是集群的分布式 Init.d,能够原样运行任何 Linux 二进制发布版本,如 Tomcat Play 等等,可以集群的多进程管理。也是一种私有的 Pass,实现服务的发现,为部署提供提供 REST API 服务,有授权和 SSL、配置约束,通过 HAProxy 实现服务发现和负载平衡。

配置搭建 docker 集群管理平台

版本内核需要 3.10 以上

cat /etc/RedHat-release   // 查看 Linux 版本

uname -r   // 查看内核版本(需要内核 3.10 以上)

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台
环境如下所示:

主机 IP 地址 安装软件包
master 192.168.26.150 jdk-8u91-linux-x64.tar.gz/mesos-0.25.0.tar.gz/zookeeper-3.4.10.tar.gz/ marathon-0.15.2.tgz
master1 192.168.26.139 jdk-8u91-linux-x64.tar.gz/ mesos-0.25.0.tar.gz /zookeeper-3.4.10.tar.gz
master2 192.168.26.140 jdk-8u91-linux-x64.tar.gz/mesos-0.25.0.tar.gz/zookeeper-3.4.10.tar.gz
slave 192.168.26.141 jdk-8u91-linux-x64.tar.gz/mesos-0.25.0.tar.gz/docker
slave1 192.168.26.142 jdk-8u91-linux-x64.tar.gz/mesos-0.25.0.tar.gz/docker

步骤如下所示:

一、安装 Mesos

关闭所有主机的防火墙和安全性策略

systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0

1. 配置 Java 环境

tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/

cd /usr/local
mv jdk1.8.0_91/ java

vim /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

source /etc/profile

2. 安装相关环境

(1)安装开发工具

yum groupinstall -y "Development Tools"

(2)添加 apache-maven 源
为 Mesos 提供项目管理和构建自动化工具的支持

wget http://repos.Fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

(3)安装相关依赖包

yum install -y apache-maven Python-devel zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel apr-util-devel subversion-devel

(4)配置 WANdiscoSVN 网络源

vim /etc/yum.repos.d/wandisco-svn.repo

[WANdiscoSVN]
name=WANdisco SVN Repo 1.9
enabled=1
baseurl=http://opensource.wandisco.com/CentOS/7/svn-1.9/RPMS/$basearch/
gpgcheck=1
gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco

3. 配置 Mesos 环境变量

vim /etc/profile

export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
export MESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so

source /etc/profile

4. 构建 Mesos

tar zxvf mesos-0.25.0.tar.gz -C /opt/
mv /opt/mesos-0.25.0/ /root/
cd /root/mesos-0.25.0
mkdir build
cd  build
../configure

make              //等待时间长(在线状态)make check
make install     

二、配置 Mesos-master(三台配置一样)

1. 规划 master 主机名

Mesos-master 负责维护 slave 集群的心跳,从 salve 提取资源信息,配置之前做好相应的解析工作。

hostnamectl set-hostname master  #修改相应的主机名

vim /etc/hosts      #修改 hosts 文件
192.168.26.131 master
192.168.26.139 master1
192.168.26.140 master2
192.168.26.141 slave
192.168.26.142 slave1

ln -sf /root/mesos-0.25.0/build/bin/mesos-master.sh /usr/sbin/mesos-master

2. 启动 mesos-master

mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 

参数:

–work_dir:运行期数据存放路径,包含 sandbox、slavemeta 等信息

–log_dir:Mesos 日志存放路径

–[no-]hostname_lookup: 是否从 DNS 获取主机名,本例中关闭了此配置,直接显示 IP。

–ip: Mesos 进程绑定的 IP。

3. 配置完成后打开另一个终端使用浏览器访问本地的 5050 端口

http://l92.168.26.150:5050

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台

三、配置 Mesos-slave(两台配置一样)

1. 规划 slave 主机名

Mesos-slave 负责接收并执行来自 Mesos-master 传递的任务以及监控任务状态,收集任务使用系统的情况,配置之前做好解析工作。

hostnamectl set-hostname slave

vim /etc/hosts      #修改 hosts 文件
192.168.26.150 master
192.168.26.139 master1
192.168.26.140 master2
192.168.26.141 slave
192.168.26.142 slave1
ln -sf /root/mesos-0.25.0/build/bin/mesos-slave.sh /usr/sbin/mesos-slave #创建链接文件

2. 安装并启动 docker

yum install docker -y

systemctl start docker.service
systemctl enable docker.service

注意 docker 服务启动失败,解决方案请参考博客 http://blog.51cto.com/11134648/2162785。

3. 启动 Mesos-slave 服务

mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=192.168.26.148:5050 --no-hostname_lookup --ip=0.0.0.0

注意当启动失败时,有可能链接文件没有生效,使用如下命令

cd /root/mesos-0.25.0/build/bin/

./mesos-slave.sh --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=192.168.26.150:5050 --no-hostname_lookup --ip=0.0.0.0

4. 查看 slave 状态

使用浏览器再次对 master 的 5050 端口进行访问

http://:192.168.26.150:5050

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台

四、安装 Zookeeper

1. 分别在所有的 master 节点上安装 Zookeeper

wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz

tar zxvf zookeeper-3.4.10.tar.gz -C /home/q/

cd /home/q/zookeeper-3.4.10/

mv conf/zoo_sample.cfg conf/zoo.cfg

2. 修改 Zookeeper 的配置文件

以 server.A=B:C:D 格式定义各个节点的相关信息,其中 A 是一个数字,表示第几号服务器;B 是这个服务器的 IP 地址;C 为与集群中的 Leader 服务器交换信息的端口;D 是在 leader 挂掉时专门进行 Leader 选举时所用的端口。

cd /home/q/zookeeper-3.4.10/conf

vim zoo.cfg 
   dataDir=/home/q/zookeeper-3.4.10/data   // 重新定义 Datadir 的位置
   dataLogDir=/home/q/zookeeper-3.4.10/datalog
   server.1=192.168.26.150:2888:3888
   server.2=192.168.26.139:2888:3888
   server.3=192.168.26.140:2888:3888

3. 修改完的配置文件拷贝给其他 master 主机

scp zoo.cfg 192.168.26.139:/home/q/zookeeper-3.4.10/conf/
scp zoo.cfg 192.168.26.140:/home/q/zookeeper-3.4.10/conf/

4. 在 dataDir 路径下创建一个 myid 文件

master 主机上(/home/q/zookeeper-3.4.10/)

mkdir data datalog 
echo 1 > data/myid
cat data/myid

master1 主机上(/home/q/zookeeper-3.4.10/)

mkdir data datalog 
echo 2 > data/myid
cat data/myid

master2 主机上(/home/q/zookeeper-3.4.10/)

mkdir data datalog 
echo 3 > data/myid
cat data/myid

5. 分别在各 master 节点上启动 Zookeeper 服务

master 主机

./bin/zkServer.sh start conf/zoo.cfg 

master1 主机

./bin/zkServer.sh start conf/zoo.cfg 

master2 主机

./bin/zkServer.sh start conf/zoo.cfg 

6. 查看主机状态

./bin/zkServer.sh status

7. 分别启动 Mesos-master

注意先 kill 掉之前启动的 Mesos-master 进程

master 主机

mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.26.150:2181/mesos --quorum=2

master1 主机

mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.26.139:2181/mesos --quorum=2

master2 主机

mesos-master --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --no-hostname_lookup --ip=0.0.0.0 --zk=zk://192.168.26.140:2181/mesos --quorum=2

8. 启动 Mesos-slave

注意先 kill 掉之前启动的 Mesos-master 进程

mesos-slave --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.26.150:2181,192.168.26.139:2181,192.168.26.140:2181/mesos --no-hostname_lookup --ip=0.0.0.0

注意当启动失败时,,有可能链接文件没有生效,使用如下命令

cd /root/mesos-0.25.0/build/bin/

./mesos-slave.sh --containerizers="mesos,docker" --work_dir=/home/q/mesos/data --log_dir=/home/q/mesos/logs --master=zk://192.168.26.150:2181,192.168.26.139:2181,192.168.26.140:2181/mesos --no-hostname_lookup --ip=0.0.0.0

9. 使用浏览器指定任意 Mesos-master 地址的 5050 端口验证

http://192.168.26.140:5050

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台
若指定的是非 Leader 状态下的 Mesos-master 地址,页面会自行跳转至处于 leader 状态的 Mesos-master 地址。
如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台

五、在 master 主机上部署运行 Marathon

使用 Marathon 向 Mesos 发送任务。

1. 安装并启动 Marathon

wget http://downloads.mesosphere.com/marathon/v0.15.2/marathon-0.15.2.tgz

tar zxvf marathon-0.15.2.tgz -C /home/q/

cd /home/q/marathon-0.15.2

./bin/start --hostname 192.168.26.150 --master zk://192.168.26.150:2181,192.168.26.139:2181,192.168.26.140:2181/mesos --http_address 0.0.0.0    // 将 Marathon 安装到多 Mesos-master 环境的 master 主机上

2. 访问 Marathon(默认使用 8080 端口)

http://192.168.26.150:8080/

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台

3. 使用 Marathon 创建测试任务

(1)在首页点击 Create 按钮,创建一个测试任务 echo“hello world”
如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台
(2)创建成功以后在 applications 页面可以看到该任务
如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台
Marathon 会自动注册到 Mesos 中,可以在 Mesos web 的 Framework 页面中看到注册信息。
如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台

可以在 Mesos Web 首页看到测试任务在不停的执行中
如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台
(4)在节点 slave 主机查看任务的相关信息
如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台
(5)删除测试任务

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台

4. 使用 Marathon API 的形式添加新任务

在节点 slave 中操作

cd /root
vim demo.json
{"id":"basic-0",
"cmd":"while [true]; do echo'hello Marathon'; sleep 5; done",
"cpus":0.1,
"mem":10.0,
"instances":1
}
// 查看 Marathon 网站有新添加任务
curl -X POST -H "Content-type:application/json" http://192.168.26.150:8080/v2/apps -d@demo.json

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台
如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台
如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台

5. 使用 Mesos 与 Marathon 创建 Docker 集群

(1)在节点 slave 创建 docker 的 nginx 请求任务

cd /root
vim nginx.json

{"id":"/nginx",      // 应用唯一的 ID
"container":{//marathon 启用 docker 格式
"type":"DOCKER",
"docker":{"image":"nginx",     //nginx 镜像
"network":"HOST",   // 网络为 HOST 模式
"parameters":[],
"privileged":false,
"forcePullImage":false   // 是否强制更新镜像
}
},
"cpus":0.1,
"mem":32.0,
"instances":1
}

// 查看 Marathon 网站有新添加任务
curl -X POST -H "Content-type:application/json" http://192.168.26.150:8080/v2/apps -d@nginx.json

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台
(2)在 Marathon 页面查看

可以在创建的 Nginxd 任务下看到该任务发送给主机

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台
(3)用命令行方式查看主机下载的 docker 镜像

docker images

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台

docker ps -a

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台
(4)访问 slave 主机上运行着的 Nginx 服务

 http://192.168.26.141

如何使用 Zookeeper+Mesos+Marathon 搭建 Docker 集群管理平台

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8126字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中