前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >达观数据Docker 集群部署实例

达观数据Docker 集群部署实例

作者头像
达观数据
发布2018-03-30 11:29:57
7770
发布2018-03-30 11:29:57
举报
文章被收录于专栏:达观数据达观数据

1

docker简介

Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本! 使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

2

应用思路

文本服务,搜索服务,推荐服务,数据采集服务是达观数据的四个主要的服务方向,其中包括的小模块非常多,像基础的数据库群,缓存群,消息队列集群等,我们把业务模块也拆分到不同的容器中,这样方便各个模块之间灵活的配合。

主要的集群配置思路如下:

1.容器层:部署起来保证各个模块的稳定性,而且保持逻辑隔离,这样便于并发和复用。

2.网络层:建立集群独立网络层,经过指定的端口与外部网络通讯,保持网络层的隔离。

3.负载均衡:负载这边,使用docker自带的集群负载均衡策略。

4.服务守护:使用docker自带的服务守护与分发策略。

5.全局配置分发:采用docker 的secret作为加密策略。

下面我们用例子讲讲具体操作。

3

工具及前期准备

由于我们的目标是建立分布式的集群环境,所以要使用多机部署,并考虑水平扩展性。

我们此处使用20台阿里云的ecs来进行部署,centos 7.2镜像作为基础os环境来讲解。

(1)docker 安装

docker官网下载docker的centos7版本的docker安装文件,本文使用版本为docker-ce-17.03,docker的详细介绍见官网文档,此处不做赘述,

https://docs.docker.com/engine/docker-overview/

文件存放位置:/tmp

文件名称:

<1> docker-ce-selinux-17.03.1.ce-1.el7.centos.noarch.rpm

<2> docker-ce-17.03.1.ce-1.el7.centos.x86_64.rpm

(2)Docker-machine 安装

此处选用docker-machine进行docker集群的命令调试。官网下载docker-mashine,本文使用v0.10.0版本。

Docker-machine 详细介绍见官网文档,此处不做赘述,

https://docs.docker.com/machine/overview/

文件存放位置:/tmp

文件名称:docker-machine-Linux-x86_64

(3)ssh 秘钥

选取集群主机,生成ssh秘钥对,方便对各个机器进行操作,如对ssh不了解,请查看百度百科。

(4)fabric 镜像制作

由于机器数量较多并考虑水平扩展性,需选用一款集群命令、文件的分发工具,本文选用python的fabric进行多机控制、文件分发,如对fabric不了解,请查看官方文档http://www.fabfile.org

4

集群os配置及步骤

(1)主机安装docker,及docker-machine

cd /tmp

$ yum install ./docker-ce-selinux-17.03.1.ce-1.el7.centos.noarch.rpm

$ yum install ./docker-ce-17.03.1.ce-1.el7.centos.x86_64.rpm

$ chmod +x /tmp/docker-machine-Linux-x86_64

$ cp/tmp/docker-machine-Linux-x86_64 /usr/local/bin/docker-machine

(2)校验docker,docker-machine安装情况

$ docker version

$ docker-machine version

(3)制作docker的fabric镜像

这一步制作fabric镜像,来在容器中启动fabric,目的是命令和文件的分发,具体命令与文件规则见官方文档。

①制作Dockerfile,文件内容如下:

FROM centos:7.2.1511

LABEL maintainer"zhangpengzhong@datagrand.com"

ENV ENVIRONMENT production

RUN cd / && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

RUN yum update -y \

&& yum install -y wget gcc gcc-c++ python-devel bzip2 \

&& yum install -y epel-release \

&& yum install -ypython-pip \

&& yum clean all \

&& pip install --upgrade pip -i http://pypi.douban.com/simple/--trusted-host pypi.douban.com \

&& pip install setuptools==33.1.1 -ihttp://pypi.douban.com/simple/ --trusted-host pypi.douban.com \

&& pip install fabric -i http://pypi.douban.com/simple/--trusted-host pypi.douban.com

②制作镜像:

docker build -t fabric:v1 .

③启动fabric容器:

启动并将所需分发的文件即上文提到的/tmp 目录中的文件加入到容器中

docker run -itd -v /tmp:/tmp fabric:v1

查看容器:

docker ps

复制查询到的CONTAINER ID(上图第一列):

2f1dc61db184

进入容器:

docker exec -it 2f1dc61db184 /bin/bash

(4)容器内使用fabric分发sshkey

vi fabric.py

fabric.py如下:

#!/usr/bin/env python

# -- encoding: utf-8 --

from fabric.api import run, env

env.hosts=[’10.0.0.2’,’10.0.0.3’,’xxx.xxx.xxx.xxx’]

env.user='root'

env.password = '111'

def sshkey():

sk ='ssh-rsaAAAAB3NzaC1yc2EAAAADAQABAAABAQCfgSSubEyt39eouUNvGDpFlo/OwdIgIHsB0h9xDdX9cB6mqcmnC8f2EYheBgC0GPeZfAeRGAWmrQPGh7BzYmk93TBPM8L9SM8ewcFAlG9vKnA7myfjmg6HBfokkZ0vfDAQlApUbANtOZenjIhdrCNnk9MHI2DG8LuC9TPGwzOgMMETY28LRGTjEWwUGnf2kFPHNC4OUUltyEsRLC9IQV2+p8phPwLot8rbVPcOj9j07OVV5bwpkXjrMCut/xnVmz/p1J5hrfPaVyQy633R9Xr47hjT7UYs7RyC8gk/j9fHbbLIvxdXfAsHBcQZ4+2I6kZhOs/JQ54VBbiP4Froot@jcloud-daguan-mysql1'

run(‘cd')

run('mkdir .ssh')

run(' echo "' + sk + '"> .ssh/authorized_keys')

run('chmod 600 .ssh/authorized_keys')

run('chmod 700 -R .ssh’)

def putfile(path1='',path2=''):

put(path1,path2,mode=0755)

def docker_install():

with cd('/tmp'):

run('yum install -ydocker-ce-selinux-17.03.1.ce-1.el7.centos.noarch.rpm')

run('yum install -ydocker-ce-17.03.1.ce-1.el7.centos.x86_64.rpm')

启动fabric:

fab -f fabric.py sshkey

(5)分发docker相关安装文件

启动fabric:

fab -f fabric.pyputfile/tmp/docker-ce-selinux-17.03.1.ce-1.el7.centos.noarch.rpm/tmp/docker-ce-selinux-17.03.1.ce-1.el7.centos.noarch.rpm

(6)为集群每台机器安装docker

fab -f fabric.py docker_install

(7)退出容器

exit

(8)在外部校验sshkey是否设置成功

ssh root@10.0.0.2

(9)使用docker-machine配置集群:

docker-machine create -d generic --generic-ip-address=10.0.0.2 --generic-ssh-user=root worker1

docker-machine create -d generic --generic-ip-address=10.0.0.3 --generic-ssh-user=root worker2

依此类推:

docker-machine create -d generic --generic-ip-address=10.0.0.xxx --generic-ssh-user=root workerxxx

5

建立docker集群

(1)建立docker主机

docker swarm init --advertise-addr 本机ip

如下:

$ docker swarm init --advertise-addr 10.0.0.1

Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz)is now a manager.

To add a worker to this swarm, run the followingcommand:

dockerswarm join \

--tokenSWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c\

10.0.0.1:2377

To add a manager to this swarm, run 'docker swarmjoin-token manager' and follow the instructions.

(2)使用fabric将剩余所有机器加入集群

将上面一步生成的命令行复制,进入刚才的fabric容器修改fabric文件,相当于令主机外其他所有机器都执行一遍上一步生成的命令

def cluster_join():

run('docker swarm join—tokenSWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx1ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c10.0.0.1:2377

‘)

执行 fab -f fable.py cluster_join

(3)建立集群内部网络

docker network create -d overlay test_privite

可以用命令查询是否建立成功

docker network ls

6

启动docker业务容器

这里用mysql,redis,elasticsearch来举例

(1)mysql

此处我们选用版本mysql5.6,镜像来自docker hub

docker service create --name mysql_test --replicas 1 \

--network test_privite \

--mount type=bind,src=/data/mysql,dst=/var/lib/mysql \

--constraint 'node.hostname == workerx' \

-e MYSQL_ROOT_PASSWORD=xxx mysql:5.6 --character-set-server=utf8 --collation-server=utf8_general_ci

(2)redis

此处我们选用版本redis 3.2,镜像来自docker hub

docker service create --name redis_online \

--network test_privite \

--mount type=bind,src=/data/redis,dst=/data \

--constraint 'node.hostname == workerx' \

redis:3.2.8 redis-server /usr/local/etc/redis/redis.conf

(3)elasticsearch_master

此处我们选用版本elasticsearch5.3.0,镜像来自docker hub

docker service create --name elasticsearch_master --replicas 1 \

--network test_privite \

--publish mode=host,target=9200,published=9200 \

--constraint 'node.hostname == workerx' \

-e cluster.name=xxx \

-e "discovery.zen.ping.unicast.hosts=elasticsearch_master" \

docker.elastic.co/elasticsearch/elasticsearch:5.3.0

(4) elastic search client

docker service create --name elasticsearch_master --replicas n \

--network test_privite \

-e cluster.name=xxx \

-e "discovery.zen.ping.unicast.hosts=elasticsearch_master" \

docker.elastic.co/elasticsearch/elasticsearch:5.3.0

7

结束语

docker的应用大大减少了代码部署的工作量,有效的建立了规范化的服务架构,上面简单介绍的达观数据使用docker部署的一个例子,希望对您有所帮助。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-06-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 达观数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (1)docker 安装
  • (2)Docker-machine 安装
  • (3)ssh 秘钥
  • (4)fabric 镜像制作
  • 集群os配置及步骤
    • (1)主机安装docker,及docker-machine
      • (2)校验docker,docker-machine安装情况
        • (3)制作docker的fabric镜像
          • ②制作镜像:
          • ③启动fabric容器:
        • (4)容器内使用fabric分发sshkey
          • (5)分发docker相关安装文件
            • (6)为集群每台机器安装docker
              • (7)退出容器
                • (8)在外部校验sshkey是否设置成功
                  • (9)使用docker-machine配置集群:
                  • 建立docker集群
                    • (1)建立docker主机
                      • (2)使用fabric将剩余所有机器加入集群
                        • (3)建立集群内部网络
                        • 启动docker业务容器
                          • (1)mysql
                            • (2)redis
                              • (3)elasticsearch_master
                                • (4) elastic search client
                                • 结束语
                                相关产品与服务
                                容器镜像服务
                                容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档