自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

達(dá)觀數(shù)據(jù):Docker集群部署實(shí)例

企業(yè)動(dòng)態(tài)
Docker是個(gè)劃時(shí)代的開源項(xiàng)目,它徹底釋放了計(jì)算虛擬化的威力,極大提高了應(yīng)用的運(yùn)行效率,降低了云計(jì)算資源供應(yīng)的成本! 使用Docker,可以讓應(yīng)用的部署、測(cè)試和分發(fā)都變得前所未有的高效和輕松!

一、docker簡(jiǎn)介

Docker 是個(gè)劃時(shí)代的開源項(xiàng)目,它徹底釋放了計(jì)算虛擬化的威力,極大提高了應(yīng)用的運(yùn)行效率,降低了云計(jì)算資源供應(yīng)的成本! 使用 Docker,可以讓應(yīng)用的部署、測(cè)試和分發(fā)都變得前所未有的高效和輕松!

[[190278]]

由于容器不需要進(jìn)行硬件虛擬以及運(yùn)行完整操作系統(tǒng)等額外開銷,Docker 對(duì)系統(tǒng)資源的利用率更高。無論是應(yīng)用執(zhí)行速度、內(nèi)存損耗或者文件存儲(chǔ)速度,都要比傳統(tǒng)虛擬機(jī)技術(shù)更高效。因此,相比虛擬機(jī)技術(shù),一個(gè)相同配置的主機(jī),往往可以運(yùn)行更多數(shù)量的應(yīng)用。

傳統(tǒng)的虛擬機(jī)技術(shù)啟動(dòng)應(yīng)用服務(wù)往往需要數(shù)分鐘,而 Docker 容器應(yīng)用,由于直接運(yùn)行于宿主內(nèi)核,無需啟動(dòng)完整的操作系統(tǒng),因此可以做到秒級(jí)、甚至毫秒級(jí)的啟動(dòng)時(shí)間。大大的節(jié)約了開發(fā)、測(cè)試、部署的時(shí)間。

二、應(yīng)用思路

文本服務(wù),搜索服務(wù),推薦服務(wù),數(shù)據(jù)采集服務(wù)是達(dá)觀數(shù)據(jù)的四個(gè)主要的服務(wù)方向,其中包括的小模塊非常多,像基礎(chǔ)的數(shù)據(jù)庫(kù)群,緩存群,消息隊(duì)列集群等,我們把業(yè)務(wù)模塊也拆分到不同的容器中,這樣方便各個(gè)模塊之間靈活的配合。

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

1.容器層:部署起來保證各個(gè)模塊的穩(wěn)定性,而且保持邏輯隔離,這樣便于并發(fā)和復(fù)用。

2.網(wǎng)絡(luò)層:建立集群獨(dú)立網(wǎng)絡(luò)層,經(jīng)過指定的端口與外部網(wǎng)絡(luò)通訊,保持網(wǎng)絡(luò)層的隔離。

3.負(fù)載均衡:負(fù)載這邊,使用docker自帶的集群負(fù)載均衡策略。

4.服務(wù)守護(hù):使用docker自帶的服務(wù)守護(hù)與分發(fā)策略。

5.全局配置分發(fā):采用docker 的secret作為加密策略。

下面我們用例子講講具體操作。

三、工具及前期準(zhǔn)備

由于我們的目標(biāo)是建立分布式的集群環(huán)境,所以要使用多機(jī)部署,并考慮水平擴(kuò)展性。

我們此處使用20臺(tái)阿里云的ecs來進(jìn)行部署,centos 7.2鏡像作為基礎(chǔ)os環(huán)境來講解。

1.docker 安裝

docker官網(wǎng)下載docker的centos7版本的docker安裝文件,本文使用版本為docker-ce-17.03,docker的詳細(xì)介紹見官網(wǎng)文檔,此處不做贅述,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進(jìn)行docker集群的命令調(diào)試

官網(wǎng)下載docker-mashine,本文使用v0.10.0,版本,

Docker-machine 詳細(xì)介紹見官網(wǎng)文檔,此處不做贅述,https://docs.docker.com/machine/overview/

文件存放位置:/tmp

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

3.ssh 秘鑰

選取集群主機(jī),生成ssh秘鑰對(duì),方便對(duì)各個(gè)機(jī)器進(jìn)行操作,如對(duì)ssh不了解,請(qǐng)查看百度百科

4.fabric 鏡像制作

由于機(jī)器數(shù)量較多并考慮水平擴(kuò)展性,需選用一款集群命令、文件的分發(fā)工具,本文選用python的fabric進(jìn)行多機(jī)控制、文件分發(fā),如對(duì)fabric不了解,請(qǐng)查看官方文檔http://www.fabfile.org

四、集群os配置及步驟

1.主機(jī)安裝docker,及docker-machine

  1. cd /tmp 
  2. $ yum install ./docker-ce-selinux-17.03.1.ce-1.el7.centos.noarch.rpm 
  3. $ yum install ./docker-ce-17.03.1.ce-1.el7.centos.x86_64.rpm 
  4. $ chmod +x /tmp/docker-machine-Linux-x86_64  
  5. $ cp /tmp/docker-machine-Linux-x86_64 /usr/local/bin/docker-machine 
  6. 2.校驗(yàn)docker,docker-machine安裝情況 
  7. $ docker version 
  8.  
  9. $ docker-machine version 

2.制作docker的fabric鏡像

這一步制作fabric鏡像,來在容器中啟動(dòng)fabric,目的是命令和文件的分發(fā),具體命令與文件規(guī)則見官方文檔。(張弸中 達(dá)觀數(shù)據(jù))

<1>制作Dockerfile,文件內(nèi)容如下:

  1. FROM centos:7.2.1511 
  2. LABEL maintainer "zhangpengzhong@datagrand.com" 
  3.  
  4. ENV ENVIRONMENT production 
  5. RUN cd / && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
  6.  
  7. RUN yum update -y \ 
  8.         && yum install -y wget gcc gcc-c++ python-devel  bzip2 \ 
  9.         && yum install -y epel-release \ 
  10.         && yum install -y python-pip \ 
  11.         && yum clean all \ 
  12.         && pip install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \ 
  13.         && pip install setuptools==33.1.1 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \ 
  14.         && pip install fabric -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 

<2>制作鏡像:

  1. docker build -t fabric:v1 . 

<3>啟動(dòng)fabric容器:

啟動(dòng)并將所需分發(fā)的文件即上文提到的/tmp 目錄中的文件加入到容器中

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

查看容器:

  1. docker ps 

復(fù)制查詢到的CONTAINER ID(上圖第一列):

  1. 2f1dc61db184 

進(jìn)入容器:

  1. docker exec -it 2f1dc61db184 /bin/bash 

3.容器內(nèi)使用fabric分發(fā)sshkey

  1. vi fabric.py 

fabric.py 如下:

  1. #!/usr/bin/env python 
  2. -- encoding: utf-8 -- 
  3.  
  4. from fabric.api import run, env 
  5.  
  6. env.hosts=[’10.0.0.2’,’10.0.0.3’,’xxx.xxx.xxx.xxx’] 
  7. env.user='root' 
  8. env.password = '111' 
  9.  
  10. def sshkey(): 
  11.     sk = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCfgSSubEyt39eouUNvGDpFlo/OwdIgIHsB0h9xDdX9cB6mqcmnC8f2EYheBgC0GPeZfAeRGAWmrQPGh7BzYmk93TBPM8L9SM8ewcFAlG9vKnA7myfjmg6HBfokkZ0vfDAQlApUbANtOZenjIhdrCNnk9MHI2DG8LuC9TPGwzOgMMETY28LRGTjEWwUGnf2kFPHNC4OUUltyEsRLC9IQV2+p8phPwLot8rbVPcOj9j07OVV5bwpkXjrMCut/xnVmz/p1J5hrfPaVyQy633R9Xr47hjT7UYs7RyC8gk/j9fHbbLIvxdXfAsHBcQZ4+2I6kZhOs/JQ54VBbiP4F root@jcloud-daguan-mysql1' 
  12.     run(‘cd')  
  13.     run('mkdir .ssh'
  14.     run(' echo "' + sk + '" > .ssh/authorized_keys'
  15.     run('chmod 600 .ssh/authorized_keys'
  16.     run('chmod 700 -R .ssh’) 
  17.  
  18. def putfile(path1='',path2=''): 
  19.     put(path1,path2,mode=0755) 
  20.  
  21. def docker_install(): 
  22.     with cd ('/tmp'): 
  23.         run('yum install -y docker-ce-selinux-17.03.1.ce-1.el7.centos.noarch.rpm'
  24.         run('yum install -y docker-ce-17.03.1.ce-1.el7.centos.x86_64.rpm'

啟動(dòng)fabric:

  1. fab -f fabric.py sshkey 

4.分發(fā)docker相關(guān)安裝文件

啟動(dòng)fabric:

  1. fab -f fabric.py putfile /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 

5.為集群每臺(tái)機(jī)器安裝docker

  1. fab -f fabric.py docker_install 

6.退出容器

  1. exit 

7.在外部校驗(yàn)sshkey是否設(shè)置成功

  1. ssh root@10.0.0.2 

8.使用docker-machine配置集群:

  1. docker-machine create -d generic --generic-ip-address=10.0.0.2 --generic-ssh-user=root worker1  
  2. 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

五、建立docker集群

1.建立docker主機(jī)

  1. docker swarm init --advertise-addr 本機(jī)ip 
  2. 如下: 
  3. $ docker swarm init --advertise-addr 10.0.0.1 
  4. Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager. 
  5.  
  6. To add a worker to this swarm, run the following command: 
  7.  
  8.     docker swarm join \ 
  9.     --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 
  10.     10.0.0.1:2377 
  11.  
  12. To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. 

2.使用fabric將剩余所有機(jī)器加入集群

將上面一步生成的命令行復(fù)制,進(jìn)入剛才的fabric容器修改fabric文件,相當(dāng)于令主機(jī)外其他所有機(jī)器都執(zhí)行一遍上一步生成的命令

  1. def cluster_join():  
  2. run('docker swarm join —token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx1ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 10.0.0.1:2377  
  3. ‘) 

執(zhí)行 fab -f fable.py cluster_join

3.建立集群內(nèi)部網(wǎng)絡(luò)

  1. docker network create -d overlay test_privite 

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

  1. docker network ls 

六、啟動(dòng)docker業(yè)務(wù)容器

這里用mysql,redis,elasticsearch來舉例

1.mysql

此處我們選用版本mysql5.6,鏡像來自docker hub

  1. docker service create --name mysql_test --replicas 1 \  
  2. --network test_privite \  
  3. --mount type=bind,src=/data/mysql,dst=/var/lib/mysql \  
  4. --constraint 'node.hostname == workerx' \  
  5. -e MYSQL_ROOT_PASSWORD=xxx mysql:5.6 --character-set-server=utf8 --collation-server=utf8_general_ci 

2.redis

此處我們選用版本redis 3.2,鏡像來自docker hub

  1. docker service create --name redis_online \ 
  2. --network test_privite \ 
  3. --mount type=bind,src=/data/redis,dst=/data \ 
  4. --constraint 'node.hostname == workerx' \ 
  5. redis:3.2.8 redis-server /usr/local/etc/redis/redis.conf 

3.elasticsearch_master

此處我們選用版本elasticsearch5.3.0,鏡像來自docker hub

  1. docker service create --name elasticsearch_master --replicas 1 \ 
  2. --network test_privite \ 
  3. --publish mode=host,target=9200,published=9200 \ 
  4. --constraint 'node.hostname == workerx' \ 
  5. -e cluster.name=xxx \ 
  6. -e "discovery.zen.ping.unicast.hosts=elasticsearch_master" \ 
  7. docker.elastic.co/elasticsearch/elasticsearch:5.3.0 

4 elastic search client

  1. docker service create --name elasticsearch_master --replicas n \ 
  2. --network test_privite \ 
  3. -e cluster.name=xxx \ 
  4. -e "discovery.zen.ping.unicast.hosts=elasticsearch_master" \ 
  5. docker.elastic.co/elasticsearch/elasticsearch:5.3.0 

七、結(jié)束語(yǔ)

docker的應(yīng)用大大減少了代碼部署的工作量,有效的建立了規(guī)范化的服務(wù)架構(gòu),上面簡(jiǎn)單介紹的達(dá)觀數(shù)據(jù)使用docker部署的一個(gè)例子,希望對(duì)您有所幫助。

【本文為51CTO專欄作者“達(dá)觀數(shù)據(jù)”的原創(chuàng)稿件,轉(zhuǎn)載可通過51CTO專欄獲取聯(lián)系】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2017-03-31 14:25:19

手動(dòng)docker swar集群

2024-10-28 15:40:26

2019-11-27 16:34:00

配置

2023-01-10 08:37:45

Docker開發(fā)架構(gòu)

2017-07-03 15:22:51

達(dá)觀數(shù)據(jù)技術(shù)研究

2015-08-03 16:15:53

Docker部署集群

2023-09-11 09:35:20

Docker程序

2024-09-13 15:32:18

2017-01-11 16:57:51

大數(shù)據(jù)大數(shù)據(jù)集群監(jiān)控

2017-04-28 09:18:39

webpackWeb搭建

2017-05-10 16:01:39

推薦系統(tǒng)算法實(shí)踐

2014-04-16 10:41:58

Spark

2012-11-15 09:27:21

2017-03-29 18:15:01

互聯(lián)網(wǎng)

2017-05-25 11:24:18

達(dá)觀數(shù)據(jù)NER系統(tǒng)

2018-07-25 12:00:21

2017-09-05 14:27:11

新用戶推薦利器

2017-11-20 16:43:40

高斯混合模型算法K-means

2017-05-04 08:48:36

達(dá)觀數(shù)據(jù)分析架構(gòu)

2021-06-26 07:40:45

Greenplum集群部署
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)