转载

Docker多主机集群实例 Part 1

Ambari on Docker - 使用多个物理机做裸机的docker swarm集群

我最近正在做一个 新项目 ,来帮助大家搭建多个物理机跑裸机上的docker swarm集群。 在这个项目里, 我用脚本来实现一个Ambari集群, 使得搭建一个hadoop集群变的相当简单。 你可以通过一组异构的物理服务器来创建docker 集群, 而且可以随时间持续扩展。

针对Ambari的这些指令也可以扩展到其他有集群功能的服务上, 例如 Apache Tomcat, Apache Nifi, Apache Spark, Apache Storm等。 我所用的试验环境的说明 在此 。

裸机的docker swarm集群

裸机的docker swarm集群使用了多个物理服务器, 在这些机器上本机安装docker 和 swarm, 没有使用docker machine.

需要什么先期准备?

  • >1 个装有linux(ubuntu 14.x)的物理机。 它们可以是虚拟机, 但是如果你用VM的话, 你可能需要docker machine, 请参阅docker文档的说明。
  • 所有主机必须有固定ip 或者 ip不会改变
  • 所有主机不能装DNS

我为什么使用Consul而不是DNS?

  • 选择consul有3个原因:

    • 它容易安装也容易与docker集成 。 consul的部署文档非常赞而且有一个漂亮的GUI。 而且它具有优秀的fail over的能力在以后将大大有用。
    • consul将给ambari节点做动态的DNS 。 Hadoop以及许多其他基于网络的软件需要一个FQDN来运行。consul提供了此功能。重要的细节是你需要创建一个consul 服务器暴露53端口, 它将用作DNS来供docker 节点使用。 如果你在自己的环境中已经有了dynamic DNS, 你也可以使用, 但是你将需要找到一种方式将容器动态的加入进去。
    • - **consul用做docker 集群的“后端存储”**。docker要求如果你要用docker swarm你必须有一个后端纯纯。 在docker官方网站上有[详细说明](https://www.docker.com/)。

每个主机的准备工作

- Go语言 确保你主机上已经有最新版的Go。如果你没有, go Dep和swarm将没法编译。

- Go Dep 根据指令来下载安装。在运行指令前你可能需要设置一组环境变量(GOROOT, GOCODE)

- Docker 根据你linux的发行版的指令来安装, docker版本至少是1.9+. 安装时你会安装一个初始化脚本然后你以访问服务的方式访问它。你将需要根据docker swarm安装的指令来修改docker swarm启动脚本。

- Docker Swarm 根据指令来下载安装。 如果你成功编译了swarm, 那么将${GOCODE}/bin下的可执行文件复制到/usr/bin下(也可以别的适当的标准目录)

- Consul 根据指令安装。 如果你不是将它部署在一个生产环境, 你就只需要装在一个host上。 确保你暴露了53端口用作DNS(官方网站上有说明)

可选安装

Docker compose 与swarm一样, 你需要将可执行文件复制到/usr/bin/下

准备主机

  • 将每台主机的短名字填加进/etc/hosts
  • 选择哪个(些)主机运行consul
  • 选择哪个(些)主机运行consul GUI(可选)
  • 在consul服务器上创建一个启动脚本(/etc/init/consul.conf)以让它开机启动consul
  • 决定哪台主机做docker swarm manager。 你最好使用一个容易记的端口,因为在集群起来之后你在每个docker 调用时都要用到它。
  • 修改每台机器上的docker启动脚本让它广播自己是swarm cluster的成员。
  • 在每台机器上创建swarm的启动脚本
  • 创建swarm manager的 启动脚本
  • 当你完成了docker swarm的部署之后, 配置 docker overlay network 。

使用docker swarm来运行ambari和hadoop

  • 使用git pull下载 repo
  • 导出docker swarm manager的地址
    $export DOCKER_MANAGER=tcp://192.168.1.18:2376
  • 导出所用的docker overlay network的名字
    $export OVERLAY_NETWORK=my-net
  • 导出consul服务器的地址
    $export CONSUL=192.168.1.18
  • 将ambari函数导入到环境中
    $ . ambari-functions
  • 启动ambari服务器已经节点。 下面的命令会启动一个5节点的ambari集群: 一个做服务器,4个做代理
    $ amb-start-cluster 5
  • 找到ambari服务器的容器所在的主机
    $ get-swarm-host amb-server  $ ubuntu-hp-jdavis
  • 使用Ambari UI来创建集群,地址就是上一步的输出。 如果你已经在每台机器上配置好了/etc/hosts的话,你将可以通过浏览器来访问服务器。当前ambari服务器用的端口是8182,如果已经被占用的话,你可能就要修改了。docker是无法在端口占用的主机上启动这个容器的。
    • 在我的环境中, ambari服务器的访问地址是

      http://ubuntu-hp-jdavis:8182/#/login
  • 到现在, 你就可以将你的hadoop服务器部署到ambari集群中了!
原文  http://dockone.io/article/1307
正文到此结束
Loading...