Bluemix平台一步一步搭建ZooKeeper + Mesos + Marathon平台管理Docker集群之一

9 篇文章 0 订阅
5 篇文章 0 订阅

最近在Youtube看Docker视频的过程中不幸看到了Mesos的介绍,然后就有一种一见如故的感觉,最终根据mesosphere官网的文档在IBM的Bluemix虚拟机上搭建了基于ZooKeeper + Mesos + Marathon的平台。


搭建之前先简单了解下各个组件是做什么的。(来自wikipedia及其他网络)


ZooKeeper:Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。官网:https://zookeeper.apache.org/


Mesos:来自mesosphere的定义是Mesos是下一代的云数据中心的kernel,它是Apache下的开源分布式资源管理框架,作者之一Benjamin在Mesosconf上一直强调Mesos只做kernel的事情,只做scheduling,并不实际运行任务。现该作者也去了Mesosphere公司做云数据中心操作系统DC/OS的工作(看起来很令人兴奋的软件)。


Marathon:是Mesos的一个框架,能够支持运行长期任务,也与这个名字有点关联,马拉松本身就是长时间要完成的任务,它可以提供REST API服务,可以通过HAProxy实现服务发现和负载均衡。(负载均衡可以看mesosphere公司开源的marathon-lb https://github.com/mesosphere/marathon-lb/)


Docker:就不用介绍了吧。记住它是应用容器引擎,可以给微服务提供完美的运行环境,尽量一个容器只有一个服务。


下面说一下服务器的运行环境:总共六台服务器,三台运行Mesos-master,4台运行Mesos-slave,服务器都是IBM Bluemix上申请的虚拟机,处于一个vpn网络里,底层是基于Openstack的架构,在底层是Softlayer和Cloudfoundry。


Server Name Internal Ip Operation System Roles
bastion.shanker 192.168.0.33 Centos 6.7 Mesos Master1,ZooKeeper, slave, Jenkins,Haproxy
dbmaster.shanker 192.168.0.28 Centos 6.7 Mesos Master2,ZooKeeper
dbslave2.shanker 192.168.0.31 Centos 6.7 Mesos Master3,ZooKeeper
dbslave3.shanker 192.168.0.32 Centos 6.7 Mesos Slave
dbslave.shanker 192.168.0.29 Ubuntu 14.04 Mesos Slave
dbarbiter.shanker 192.168.0.30 Ubuntu 14.04 Mesos Slave,Mysql Slave


软件安装:

RedHat 6 / CentOS 6


1
2
3
4
# Add the repository
sudo  rpm -Uvh http: //archive .cloudera.com /cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0 .x86_64.rpm 
 
yum -y  install  mesos marathon zookeeper


所有机器用ansible安装Java:


1
2
ansible mesos -m shell -a  "wget http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.tar.gz "
ansible mesos -m shell -a "tar zxf jdk-8u73-linux-x64.tar.gz -C /usr/java/


导入jre到.zshrc,然后用ansible分发下去:


1
2
3
export  JAVA_HOME= /usr/java/jdk1 .8.0_73
export  PATH=$JAVA_HOME /bin :$PATH
export  CLASSPATH=.:$JAVA_HOME /lib/dt .jar:$JAVA_HOME /lib/tool .jar



Master Node Setup


ZooKeeper的配置:


在三台ZooKeeper server上设置ID,这个数字必须是1到255的整数,并且每个节点的ID是不一样的。


1
sudo  zookeeper --server-initialize --myid=<YOUR ID HERE>


编辑/etc/zookeeper/conf/zoo.cfg,在每台机器上都需要添加zk 集群的服务器名称,ip地址,端口号等信息:server.A=B:C:D


1
2
3
server.1=192.168.0.33:2888:3888
server.2=192.168.0.28:2888:3888
server.3=192.168.0.31:2888:3888


A:代表一个1-255的整数,是第几号服务器,可以随便定义。

B:代表服务器的ip地址。

C:代表服务器与集群中的Leader通信的端口。

D:代表如果集群中的Leader down了,需要用这个端口来重新选举,如果使用一台主机多个zk实例,这个D的值不能与C相同。

zk最终的配置:


1
2
3
4
5
6
7
8
9
10
# egrepv /etc/zookeeper/conf/zoo.cfg
maxClientCnxns=50
tickTime=2000
initLimit=10
syncLimit=5
dataDir= /var/lib/zookeeper
clientPort=2181
server.1=192.168.0.33:2888:3888
server.2=192.168.0.28:2888:3888
server.3=192.168.0.31:2888:3888


一份简单的zk配置就完成了,sudo service zookeeper restart。


Mesos & Marathon的配置:


在每一个master节点添加以下文件,并把master的ip地址写进去:


1
2
# cat /etc/mesos/zk
zk: //192 .168.0.33:2181,192.168.0.28:2181,192.168.0.31:2181 /mesos


Quorum的设定原则是Mesos master的数量除以2得到的整数,我们用了3个maser,除以2 是1.5,得到的整数是2,所以这里用2


1
2
# cat /etc/mesos-master/quorum 
2


Hostname的设置是可选的,如果有DNS的前提下,可以不用设置,但是为了避免后期出现不能解析域名的情况,我这里设置的hostname,在每一台机器(包括slave)的/etc/mesos-{master,slave}/hostname的文件里写上改机器的ip地址,注意:每台机器只需要写自己机器的ip即可,不需要把所有机器的ip都写进去:


1
2
3
4
5
6
7
$ ansible all -m shell -a  'cat /etc/mesos-master/hostname'  -s
bastion | success | rc=0 >>
192.168.0.33
dbmaster | success | rc=0 >>
192.168.0.28
dbslave2 | success | rc=0 >>
192.168.0.31


然后将hostname 复制到Marathon的目录一份:


1
cp  /etc/mesos-master/hostname  /etc/marathon/conf/


如果你不需要master的机器跑slave的话,需要将slave的功能override


1
2
sudo  stop mesos-slave
sudo  sh -c  "echo manual > /etc/init/mesos-slave.override"


然后没有问题的话就可以start Mesos-master和Marathon了。


1
ansible master -m shell -a  "start mesos-msater && start marathon"



Slave Node Setup


安装mesos-slave软件

Debian/Ubuntu


1
2
3
4
5
6
7
8
9
10
# Setup
# sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E56151BF
# DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
# CODENAME=$(lsb_release -cs)
#
# # Add the repository
# echo "deb http://repos.mesosphere.com/${DISTRO} ${CODENAME} main" | \
#   sudo tee /etc/apt/sources.list.d/mesosphere.list
#   sudo apt-get -y update
#   sudo apt-get -y install mesos


RedHat/CentOS6


1
2
3
#   # Add the repository
#   sudo rpm -Uvh 
#   sudo yum -y install mesos


如果系统使用的是Ubuntu like的系统,需要将自动安装的ZooKeeper禁用


1
2
sudo  service zookeeper stop
sudo  sh -c  "echo manual > /etc/init/zookeeper.override"


配置zk,跟master节点的内容一样,可以使用ansible 分发到slave节点:


1
2
# cat zk
zk: //192 .168.0.33:2181,192.168.0.28:2181,192.168.0.31:2181 /mesos


要支持运行Docker,还需要在slave节点/etc/mesos-slave/添加两个文件:executor_registration_timeout,文件内容如下:


1
2
3
4
5
6
# ibmcloud at dbarbiter.shanker in /etc/mesos-slave [15:43:23]
cat  containerizers
docker,mesos
# ibmcloud at dbarbiter.shanker in /etc/mesos-slave [15:43:27]
cat  executor_registration_timeout
5mins



需要配置的就这么多,接下来就是要在slave节点上禁用mesos-master,要不然选举的时候会出莫名其妙的错的


1
2
sudo  service mesos-master stop
sudo  sh -c  "echo manual > /etc/init/mesos-master.override"


然后开启slave服务


Ubuntu:


1
sudo  service mesos-slave restart


CentOS:


1
sudo  start mesos-slave


然后在浏览器里输入一个master节点的ip:5050看看是否有Mesos的console出现,如果输入的ip地址不是leader,mesos会自动跳转到Leader的ip地址上:


wKiom1dWdtKBZ_ltAABGhFaHrUU879.png-wh_50


登录进Mesos-master的dashborad之后会发现有显示Cluster Name, 当前Leader的ip地址,有多少Slaves, Resources具体情况,Active Tasks,即当前的任务都有哪些,Completed Tasks,:


wKiom1dWek7wnJU0AAFg89Qzj3I873.png


如果不确认当前的Marathon的Leader ip是哪个,可以看Mesos-master的Framework页面,来查看Marathon的ip:


wKiom1dWdtTxZ14xAABbPB2rlq4998.png-wh_50


未完待续...



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值