数人科技Mini(单机版)-Mesos系统安装-Ubuntu

  1. 文档信息
  2. 创建人 庞铮
  3. 邮件地址 zpang@dataman-inc.com
  4. 建立时间 2015628
  5. 更新时间 201571

单机Mesos环境部署

单机环境说明

由于大多数初学者并没有集群环境,为了叫更多的人了解Mesos系统的魅力,本人将整套Mesos上部署在单机环境中,并记录下来给大家贡献。本环境适合初学者对于Mesos系统环境了解学习。

因为是初级环境,所以本环境中只包括了Mesos自身系统和调度框架中最基础的一种—-Marathon。以及因为是单机所以没有部署Docker私有仓库。

应用部署拓扑图

MesosSystem

拓扑图说明

整体系统部署分5个部分:

  • 任务调度层

    包括:Mesos-Master和Frameworks(调度框架)

    功能:资源和任务调度节点

  • 任务执行层

    包括:Mesos-Slave和Docker

    功能:任务执行节点

  • 镜像存储

    包括:DockerRegistry

    功能:环境存储节点

  • 数据交互层

    包括:Zookeeper

    功能:集群状态、任务相关数据信息存储节点

  • 网络层

    包括:Haproxy和Bamboo

    功能:网络层服务发现节点

部署环境需求

  • Ubuntu 14.04LTS/64位以上版本
  • 硬件2核4g内存
  • root权限
  • 外网可用
  • dns 推荐 114.114.114.114(防止dns劫持,你懂的)

安装部署

安装Docker

  1. if [ ! -e /usr/lib/apt/methods/https ]; then
  2. sudo apt-get update && sudo apt-get install -y apt-transport-https
  3. else
  4. echo "$datetime HTTPS transport is available"
  5. fi
  6. # Add the repository to your APT sources
  7. echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list
  8. # Then import the repository key
  9. apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
  10. # Install docker
  11. sudo apt-get update && sudo apt-get install -y lxc-docker

安装 Zookeeper

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

安装 Mesos

  1. sudo wget -O - http://get.dataman.io/repos/ubuntu/key | sudo apt-key add -
  2. sudo echo "deb http://get.dataman.io/repos/ubuntu ./" > /etc/apt/sources.list.d/dataman.list
  3. # Install dataman mesos
  4. sudo apt-get update && sudo apt-get -y install mesos

安装 Marathon

  1. sudo wget -O - http://get.dataman.io/repos/ubuntu/key | sudo apt-key add -
  2. sudo echo "deb http://get.dataman.io/repos/ubuntu ./" > /etc/apt/sources.list.d/dataman.list
  3. # Install dataman marathon
  4. sudo apt-get update && sudo apt-get -y install marathon

安装 Haproxy

  1. HAPROXY_EXE=`which haproxy`
  2. if [ -z "$HAPROXY_EXE" ]; then
  3. #Install HAProxy
  4. sudo apt-add-repository -y ppa:vbernat/haproxy-1.5 && sudo apt-get update && sudo apt-get install -y haproxy
  5. fi

Log设置

  1. sudo /bin/cat > /etc/rsyslog.d/dataman.haproxy.conf<<EOF
  2. $ModLoad imudp
  3. $UDPServerRun 514
  4. $UDPServerAddress 127.0.0.1
  5. EOF

安装Bamboo

  1. VERSION=0.9.0
  2. P_NAME=dataman-bamboo-$VERSION.tar.gz
  3. BAMBOO_INSTALL_HOME=/opt/bamboo
  4. BAMBOO_HOME=/usr/local/bamboo
  5. #net
  6. if [ -d "$BAMBOO_HOME" ];then
  7. /bin/rm -Rf $BAMBOO_HOME
  8. fi
  9. if [ -f "$P_NAME" ];then
  10. /bin/rm -Rf $P_NAME
  11. fi
  12. sudo /usr/bin/wget http://datamanpub.ufile.ucloud.com.cn/download/dataman-bamboo-0.9.0.tar.gz && sudo /bin/mkdir $BAMBOO_INSTALL_HOME && sudo /bin/tar xzvf $P_NAME -C $BAMBOO_INSTALL_HOME --strip-components=1 && sudo /bin/rm -f $P_NAME* && sudo /bin/chmod -R 775 $BAMBOO_INSTALL_HOME && sudo /bin/ln -s $BAMBOO_INSTALL_HOME $BAMBOO_HOME

配置说明

Mesos-Master

配置 Mesos 本身信息

  1. #配置mesos在zk的使用目录
  2. echo "zk://localhost:2181/mesos" > "/etc/mesos/zk"

配置 Mesos-Master 相关信息

  1. #指定master配置目录
  2. MESOS_MASTER_CONF_DIR="/etc/mesos-master"
  3. #指定master的主机名
  4. echo "localhost" > $MESOS_MASTER_CONF_DIR/hostname
  5. #指定master的ip
  6. echo "0.0.0.0" > $MESOS_MASTER_CONF_DIR/ip
  7. #副本的仲裁数量的大小(集群配置很重要,本次试验只有1台所以写1)
  8. echo "1" > $MESOS_MASTER_CONF_DIR/quorum
  9. #注册表中存储持久性信息的地址
  10. echo "/var/lib/mesos" > $MESOS_MASTER_CONF_DIR/work_dir

Mesos-Slave

配置 Mesos-Slave 相关信息

  1. #指定slave配置目录
  2. MESOS_SLAVE_CONF_DIR="/etc/mesos-slave"
  3. #指定slave的主机名(这里不能用localhost)
  4. echo "10.3.1.3" > $MESOS_SLAVE_CONF_DIR/hostname
  5. #指定slave支持的容器类型
  6. echo "docker,mesos" > $MESOS_SLAVE_CONF_DIR/containerizers
  7. #指定slave的ip
  8. echo "0.0.0.0" > $MESOS_SLAVE_CONF_DIR/ip
  9. #执行器注册超时时间
  10. echo "5mins" > $MESOS_SLAVE_CONF_DIR/executor_registration_timeout
  11. #指定mesos资源控制的内容(这里只有打开对CPU和内存的控制)
  12. echo "cgroups/cpu,cgroups/mem" > $MESOS_SLAVE_CONF_DIR/isolation

MARATHON

配置Marathon相关信息

  1. #创建配置文件目录
  2. mkdir /etc/marathon/conf
  3. #指定marathon配置目录
  4. MARATHON_CONF_DIR="/etc/marathon/conf"
  5. #指定marathon在zk目录路径
  6. echo "zk://127.0.0.1:2181/marathon" > $MARATHON_CONF_DIR/zk
  7. #事件订阅模式
  8. echo "http_callback" > $MARATHON_CONF_DIR/event_subscriber
  9. #指定marathon主机名
  10. echo "127.0.0.1" > $MARATHON_CONF_DIR/hostname
  11. #指定mesos在zk目录路径
  12. echo "zk://127.0.0.1:2181/mesos" > $MARATHON_CONF_DIR/master

BAMBOO

注释 ha 模版的8080部分,否则该8080端口和 marathon 自带默认端口冲突
  1. vim /opt/bamboo/config/haproxy_template.cfg
  2. #注释掉一下模版
  3. frontend websocket-in
  4. bind *:8080
  5. {{ $services := .Services }}
  6. {{ range $index, $app := .Apps }} {{ if $app.Env.BAMBOO_WEBSOCKET_OPEN }} {{ if hasKey $services $app.Id }} {{ $service := getService $services $app.Id }}
  7. acl {{ $app.EscapedId }}-websocket-aclrule {{ $service.Acl}}:8080
  8. use_backend {{ $app.EscapedId }}-websocket-cluster if {{ $app.EscapedId }}-websocket-aclrule
  9. {{ end }} {{ end }} {{ end }}
  10. stats enable
  11. # CHANGE: Your stats credentials
  12. stats auth admin:admin
  13. stats uri /haproxy_stats
  14. {{ range $index, $app := .Apps }} {{ if $app.Env.BAMBOO_WEBSOCKET_OPEN }}
  15. backend {{ $app.EscapedId }}-websocket-cluster{{ if $app.HealthCheckPath }}
  16. option httpchk GET {{ $app.HealthCheckPath }}
  17. {{ end }}
  18. balance leastconn
  19. option httpclose
  20. option forwardfor
  21. {{ range $page, $task := .Tasks }}
  22. server {{ $app.EscapedId }}-{{ $task.Host }}-{{ index $task.Ports 1 }} {{ $task.Host }}:{{ index $task.Ports 1 }} {{ end }}
  23. {{ end }}
  24. {{ end }}
修改 bamboo 配置
  1. sudo /bin/cat > /opt/bamboo/config/production.json<<EOF
  2. {
  3. "Marathon": {
  4. "Endpoint": "http://127.0.0.1:8080"
  5. },
  6. "Bamboo": {
  7. "Endpoint": "http://127.0.0.1:8000",
  8. "Zookeeper": {
  9. "Host": "127.0.0.1:2181",
  10. "Path": "/marathon-haproxy/state",
  11. "ReportingDelay": 5
  12. }
  13. },
  14. "HAProxy": {
  15. "TemplatePath": "/opt/bamboo/config/haproxy_template.cfg",
  16. "OutputPath": "/etc/haproxy/haproxy.cfg",
  17. "ReloadCommand": "PIDS=`pidof haproxy`; haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $PIDS && while ps -p $PIDS; do sleep 0.2; done"
  18. },
  19. "StatsD": {
  20. "Enabled": false,
  21. "Host": "localhost:8125",
  22. "Prefix": "bamboo-server.development."
  23. }
  24. }
  25. EOF

bamboo-json配置文件基础说明:

  • http://127.0.0.1:8080 #Marathon地址
  • http://127.0.0.1:8000 #Bamboo地址
  • 127.0.0.1:2181 #zookeeper地址
  • /opt/bamboo/config/haproxy_template.cfg #bamboo自带haproxy配置文件模版路径
  • /etc/haproxy/haproxy.cfg #haproxy配置文件路径
  • localhost:8125 #StatsD监控地址(需要另行安装)

服务操作(启动、关闭、重启、状态)

Mesos-master

  1. #命令
  2. service mesos-master (statusstartstop|restart)
  3. #进程状态
  4. ps axuf | grep mesos-master | grep -v grep
  5. root 4343 0.0 0.4 1210808 18460 ? Ssl 13:32 0:00 /usr/sbin/mesos-master --zk=zk://localhost:2181/mesos --port=5050 --log_dir=/var/log/mesos --hostname=10.3.1.2 --ip=0.0.0.0 --quorum=1 --work_dir=/var/lib/mesos
  6. root 4366 0.0 0.0 5908 608 ? S 13:32 0:00 \_ logger -p user.info -t mesos-master[4343]
  7. root 4367 0.0 0.0 5908 704 ? S 13:32 0:00 \_ logger -p user.err -t mesos-master[4343]

Mesos-slave

  1. #命令
  2. service mesos-slave (statusstartstop|restart)
  3. #进程状态
  4. ps axuf | grep mesos-slave | grep -v grep
  5. root 4368 0.1 0.3 890764 15316 ? Ssl 13:32 0:01 /usr/sbin/mesos-slave --master=zk://localhost:2181/mesos --log_dir=/var/log/mesos --containerizers=docker,mesos --executor_registration_timeout=5mins --hostname=10.3.1.2 --ip=0.0.0.0 --isolation=cgroups/cpu,cgroups/mem
  6. root 4405 0.0 0.0 5908 608 ? S 13:32 0:00 \_ logger -p user.info -t mesos-slave[4368]
  7. root 4406 0.0 0.0 5908 704 ? S 13:32 0:00 \_ logger -p user.err -t mesos-slave[4368]
  8. #### 3.7.3 Marathon
  9. #命令
  10. service marathon (statusstartstop|restart)
  11. #进程状态
  12. ps axuf | grep marathon | grep -v grep
  13. root 4515 2.8 6.2 2082080 254804 ? Ssl 13:32 0:23 java -Djava.library.path=/usr/local/lib:/usr/lib:/usr/lib64 -Djava.util.logging.SimpleFormatter.format=%2$s%5$s%6$s%n -Xmx512m -cp /usr/bin/marathon mesosphere.marathon.Main --hostname 127.0.0.1 --event_subscriber http_callback --zk zk://127.0.0.1:2181/marathon --master zk://127.0.0.1:2181/mesos
  14. root 4543 0.0 0.0 5908 708 ? S 13:32 0:00 \_ logger -p user.info -t marathon[4515]
  15. root 4544 0.0 0.0 5908 708 ? S 13:32 0:00 \_ logger -p user.notice -t marathon[4515]

Haproxy

  1. #命令
  2. service haproxy (statusstartstop|restart)
  3. #进程状态
  4. ps axuf | grep haproxy | grep -v grep
  5. haproxy 4903 0.0 0.0 29156 1012 ? Ss 13:42 0:00 haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf 4882

Bamboo

  1. #启动命令
  2. /opt/bamboo/bamboo -config /usr/local/bamboo/config/production.json -log /var/log/bamboo-server.log
  3. #进程状态
  4. ps axuf | grep bamboo | grep -v grep
  5. root 4721 0.0 0.2 200920 10204 ? Sl 13:32 0:00 /opt/bamboo/bamboo -config /usr/local/bamboo/config/production.json -log /var/log/bamboo-server.log

Zookeeper

  1. #启动命令
  2. service zookeeper (statusstartstop|restart)
  3. #进程状态
  4. ps axuf | grep zookeeper | grep -v grep
  5. zookeep+ 8264 0.0 2.2 2370896 89868 ? Ssl Jun29 1:26 /usr/bin/java -cp /etc/zookeeper/conf:/usr/share/java/jline.jar:/usr/share/java/log4j-1.2.jar:/usr/share/java/xercesImpl.jar:/usr/share/java/xmlParserAPIs.jar:/usr/share/java/netty.jar:/usr/share/java/slf4j-api.jar:/usr/share/java/slf4j-log4j12.jar:/usr/share/java/zookeeper.jar -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false -Dzookeeper.log.dir=/var/log/zookeeper -Dzookeeper.root.logger=INFO,ROLLINGFILE org.apache.zookeeper.server.quorum.QuorumPeerMain /etc/zookeeper/conf/zoo.cfg