成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

微服務(wù)實踐專題系列(二):基于Docker swarm mode集群的consul集群部署

shaonbean / 1605人閱讀

摘要:簡介是微服務(wù)治理方案,提供注冊發(fā)現(xiàn)存儲健康檢查以及多數(shù)據(jù)中心部署的能力。重新設(shè)計架構(gòu)如下實施創(chuàng)建個虛擬機寫一個腳本批量創(chuàng)建創(chuàng)建個虛擬機給這個腳本授權(quán),并執(zhí)行后可以看到虛擬機創(chuàng)建完成。集群中的節(jié)點是自動加入網(wǎng)絡(luò)的。

consul簡介

consul是微服務(wù)治理方案,提供注冊/發(fā)現(xiàn)、k/v存儲、健康檢查以及多數(shù)據(jù)中心部署的能力。

單節(jié)點安裝如下:

docker pull consul:0.9.2

啟動consul:

docker run -it -p 8500:8500 consul:0.9.2

瀏覽器訪問:localhost:8500,可以看到consul的web UI。

consul可以作為server或client模式運行。

consul server:consul server之間彼此通信并選舉一個leader。

consul client:集群中的每個節(jié)點都有自己的consul client,它負責(zé)監(jiān)控運行在該節(jié)點上的服務(wù)的健康、與consul server通信。通常和應(yīng)用服務(wù)運行在一個節(jié)點中,一個consul client僅僅和某一個consul server通信。

集群中的所有client和server共享狀態(tài)信息:即當(dāng)一個應(yīng)用服務(wù)注冊到一個client,這個信息將在所有與它連接的client和server上都共享可用了。

本文著重描述consul集群方式部署,不熟悉docker也沒關(guān)系,本文也有很多docker概念講解。

基礎(chǔ)準(zhǔn)備

docker安裝包
docker for linux/mac ,此安裝包包含:

docker引擎

docker-machine:虛擬機管理

swarm mode:docker引擎內(nèi)置的容器編排功能,包括容器集群化和調(diào)度。

不要混淆swarm mode和docer swarm。 
swarm mode是1.12版提供的能力,集成在docker引擎中,沒有和machine、compose集成,內(nèi)置了k/v存儲,并集成了overlay networks支持。
而docker swarm是1.12版之前的集群方案,是獨立的工具。在docker1.12之前,創(chuàng)建docker集群是需要用docker swarm的,并且需要額外的k/v存儲(consul、etcd等)同步網(wǎng)絡(luò)配置,保證節(jié)點在一個容器中。

docker-compose:服務(wù)編排組件

virtualbox

雖然macOS自帶HyperKit虛擬解決方案,但因為docker 沒有HyperKit driver,所以需要用virtualbox,手動下載安裝或者docker早期解決方案Toolbox安裝過也可。

架構(gòu)設(shè)計

最初的架構(gòu)設(shè)計是這樣的:

這種架構(gòu)也能建成功,但考慮到對swarm集群的理解不要太狹隘,重新設(shè)計了另外的架構(gòu)。

雖然不是所有的服務(wù)都適合部署到swarm集群,但是consul是適合的,部署的方式是swarm 的manager節(jié)點和consul server重合,swarm的worker節(jié)點和consul client重合。

重新設(shè)計架構(gòu)如下:

實施

1、創(chuàng)建4個虛擬機
寫一個shell腳本crete_vms.sh批量創(chuàng)建:

#!/bin/sh
#創(chuàng)建4個虛擬機
set -e

vms=("vm1" "vm2" "vm3" "vm4")

for vm in ${vms[@]}
do
  docker-machine create 
    -d virtualbox 
    --virtualbox-memory "1024" 
    --virtualbox-cpu-count "1" 
    --virtualbox-disk-size "2000" 
    ${vm}
done

docker-machine ls   

 

給這個腳本授權(quán):sudo chmod a+x create_vms.sh,并執(zhí)行后可以看到虛擬機創(chuàng)建完成。

小提示:
docker-machine 會自動加載一個Boot2Docker ISO用于構(gòu)建docker容器運行環(huán)境。

2、構(gòu)建swarm集群

2.1 用swarm mode方式將這4臺虛擬機構(gòu)建成一個集群
首先需要在一臺機器上初始化swarm,這里在vm1上進行初始化,先綁定vm1環(huán)境:

eval $(docker-machine env vm1)

然后初始化:

docker swarm init --advertise-addr $(docker-machine ip vm1)

這時,vm1變成一個集群中的manager節(jié)點了。

2.2 接下來將vm2作為一個manager節(jié)點加入這個swarm
先查詢加入命令:

docker swarm join-token manager 

To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-64eiwxk3wzoau20f7iv56fw0apgsxsk0gnzwb1e6okbezd373b-eyhb3sbu3fkcj8uyzw1bigayj 192.168.99.100:2377

然后綁定vm2環(huán)境:

eval $(docker-machine env vm2)

執(zhí)行加入命令:

docker swarm join --token SWMTKN-1-64eiwxk3wzoau20f7iv56fw0apgsxsk0gnzwb1e6okbezd373b-eyhb3sbu3fkcj8uyzw1bigayj 192.168.99.100:2377

2.3 將vm3和vm4作為worker節(jié)點加入這個swarm
先查詢加入命令:

docker swarm join-token worker

To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-64eiwxk3wzoau20f7iv56fw0apgsxsk0gnzwb1e6okbezd373b-8ern27gy685jifwq7b9cjvhcn 192.168.99.100:2377

綁定vm3環(huán)境:

eval $(docker-machine env vm3)

執(zhí)行加入命令:

docker swarm join --token SWMTKN-1-64eiwxk3wzoau20f7iv56fw0apgsxsk0gnzwb1e6okbezd373b-8ern27gy685jifwq7b9cjvhcn 192.168.99.100:2377

綁定vm4環(huán)境:

eval $(docker-machine env vm4)

執(zhí)行加入命令:

docker swarm join --token SWMTKN-1-64eiwxk3wzoau20f7iv56fw0apgsxsk0gnzwb1e6okbezd373b-8ern27gy685jifwq7b9cjvhcn 192.168.99.100:2377

至此,swarm集群創(chuàng)建完成!
切換到manager 節(jié)點查看集群信息:

eval $(docker-machine env vm1)
docker node ls

MANAGER STATUS顯示為Reachable表示該節(jié)點是一個manager,空表示是一個worker。

可以在swarm manager節(jié)點環(huán)境下查看網(wǎng)絡(luò)信息:

docker network ls

可以看到ingress的網(wǎng)絡(luò)是屬于swarm的,其他的都是本地(local)。swarm集群中的節(jié)點是自動加入overlay網(wǎng)絡(luò)的。

小提示:
docker-machine env vm的作用是查看vm的環(huán)境變量,而eval $(docker-machine env vm)是執(zhí)行,即將當(dāng)前shell與指定的虛擬機配置環(huán)境進行綁定,關(guān)掉shell也就釋放了這種綁定的環(huán)境。這個命令的最好使用場景就是:虛擬機中不需要安裝docker compose、machine等、也不需要上傳配置文件到虛擬機,就可以在當(dāng)前shell中執(zhí)行虛擬機中不存在的命令和文件來操作虛擬機容器和服務(wù)。

如果要解綁,執(zhí)行解綁命令:

eval $(docker-machine env -u)

3、構(gòu)建consul集群

3.1 先創(chuàng)建一個consul server leader,寫個consul-server-init.yml文件:

version: "3.3"
services:
  consul-server:
    image: consul:0.9.2
    environment:
      - "CONSUL_LOCAL_CONFIG={"disable_update_check": true}"
      - "CONSUL_CLIENT_INTERFACE=eth0"
      - "CONSUL_BIND_INTERFACE=eth1" #容器啟動時自動綁定eth1端口的IP
    entrypoint:
      - consul
      - agent
      - -server
      - -bootstrap #作為一個集群啟動
      - -data-dir=/consul/data
      - -advertise={{ GetInterfaceIP "eth1" }}
      - -client=0.0.0.0 #consul服務(wù)偵聽地址提供HTTP、DNS、RPC等服務(wù),默認是127.0.0.1,對外提供服務(wù)需改成0.0.0.0
      - -ui
    ports:
      - 8300:8300 #server rpc address
      - 8301:8301 #CLuster Serf Addr LAN
      - 8301:8301/udp
      - 8302:8302 #Cluster Serf Addr WAN
      - 8302:8302/udp
      - 8400:8400 #cli rpc endpoint
      - 8500:8500 #Web UI, http api
      - 8600:53/udp #DNS服務(wù)
    network_mode: host #此處指定host模式才能綁定到eth1

切換到vm1 manager節(jié)點

eval $(docker-machine env vm1)
docker-compose -f consul-server-init.yml up -d

如果啟動報錯,可以通過docker logs container_id來查看錯誤信息,然后再docker-compose -f consul-server-init.yml down掉它。

3.2 再寫一個consul-server-join.yml用來創(chuàng)建consul server follower加入該集群。

version: "3.3"
services:
  consul-server:
    image: consul:0.9.2
    environment:
      - "CONSUL_LOCAL_CONFIG={"disable_update_check": true}"
      - "CONSUL_CLIENT_INTERFACE=eth0"
      - "CONSUL_BIND_INTERFACE=eth1" #容器啟動時自動綁定eth1端口的IP
    entrypoint:
      - consul
      - agent
      - -server
      - -data-dir=/consul/data
      - -retry-join=192.168.99.100 #加入一個集群
      - -advertise={{ GetInterfaceIP "eth1" }}
      - client=0.0.0.0
      - -ui
    ports:
      - 8300:8300 #server rpc address
      - 8301:8301 #CLuster Serf Addr LAN
      - 8301:8301/udp
      - 8302:8302 #Cluster Serf Addr WAN
      - 8302:8302/udp
      - 8400:8400 #cli rpc endpoint
      - 8500:8500 #Web UI, http api
      - 8600:53/udp #DNS服務(wù)
    network_mode: host #此處指定host(宿主機)模式才能綁定到eth1

切換到vm2環(huán)境

eval $(docker-machine env vm2)
docker-compose -f consul-server-join.yml up -d

3.3 寫一個consul-client.yml來創(chuàng)建consul client并加入集群

version: "3.3"  #第三版開始支持swarm mode集群的compose-file編排
services:
  consul-agent:
    image: consul:0.9.2
    environment:
      - "CONSUL_LOCAL_CONFIG={"disable_update_check": true}"
      - "CONSUL_CLIENT_INTERFACE=eth0"
      - "CONSUL_BIND_INTERFACE=eth1" #容器啟動時自動綁定eth1端口的IP
    entrypoint:
      - consul
      - agent
      - -data-dir=/consul/data
      - -advertise={{GetInterfaceIP "eth1"}}
      - -retry-join=192.168.99.100 #consul server的地址,以便使該client與            server組成同一個集群
      - -retry-join=192.168.99.101
    network_mode: host #此處指定host(宿主機)模式才能綁定到eth1

分別切換到vm3和vm4環(huán)境執(zhí)行創(chuàng)建:

eval $(docker-machine env vm3)
docker-compose -f consul-client.yml up -d

eval $(docker-machine env vm4)
docker-compose -f consul-client.yml up -d

到此為止,consul集群創(chuàng)建完成,查看集群信息:
docker exec -t consul members

這里我故意把vm3服務(wù)離開了。

小結(jié):
consul不適合用1.13的deploy部署,還是寫運維shell方式部署最省事,我上面為了講清楚很多概念一步一步描述的。
deploy部署的話默認會虛擬出一個集群vip,多個相同服務(wù)綁定到這個共同的vip上對外提供服務(wù)。

訪問http://192.168.99.100:8500,可以看到consul管理界面:

下一篇文章演示Registrator和應(yīng)用的部署。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/27033.html

相關(guān)文章

  • 個推基于Docker和Kubernetes微服務(wù)實踐

    摘要:個推針對服務(wù)場景,基于和搭建了微服務(wù)框架,提高了開發(fā)效率。三容器化在微服務(wù)落地實踐時我們選擇了,下面將詳細介紹個推基于的實踐。 2016年伊始Docker無比興盛,如今Kubernetes萬人矚目。在這個無比需要創(chuàng)新與速度的時代,由容器、微服務(wù)、DevOps構(gòu)成的云原生席卷整個IT界。個推針對Web服務(wù)場景,基于OpenResty和Node.js搭建了微服務(wù)框架,提高了開發(fā)效率。在微服...

    yibinnn 評論0 收藏0
  • 個推基于Docker和Kubernetes微服務(wù)實踐

    摘要:個推針對服務(wù)場景,基于和搭建了微服務(wù)框架,提高了開發(fā)效率。三容器化在微服務(wù)落地實踐時我們選擇了,下面將詳細介紹個推基于的實踐。 2016年伊始Docker無比興盛,如今Kubernetes萬人矚目。在這個無比需要創(chuàng)新與速度的時代,由容器、微服務(wù)、DevOps構(gòu)成的云原生席卷整個IT界。個推針對Web服務(wù)場景,基于OpenResty和Node.js搭建了微服務(wù)框架,提高了開發(fā)效率。在微服...

    genefy 評論0 收藏0
  • 微服務(wù)指南走北(四):你不愿意做微服務(wù)架構(gòu)十個理由

    摘要:微服務(wù)架構(gòu)模式使得每個微服務(wù)獨立部署,且每個服務(wù)獨立擴展,開發(fā)者不再需要協(xié)調(diào)其它服務(wù)部署對本服務(wù)的影響。微服務(wù)架構(gòu)模式使得持續(xù)化部署成為可能。所以使用微服務(wù)不是必須的,而是在適當(dāng)?shù)膶嶋H,架構(gòu)適應(yīng)應(yīng)用場景的一種改變。 近段時間離職,跟同事們講解我之前所做的微服務(wù)相關(guān)產(chǎn)品,對于同事們提出的問題,做了如下整理出來,加上自己的理解,分享出來跟大家一起探討下: 問題預(yù)覽 我為什么要換微服務(wù)?能...

    Seay 評論0 收藏0
  • 進軍Docker 1.12,將代理與Swarm完美整合

    摘要:其一將用于代理與面向公開的服務(wù)之間的通信。數(shù)據(jù)庫上線并開始運行后,我們接下來部署后端。現(xiàn)在,會幫助我們完成全部負載均衡工作。這樣所有來自代理的請求都將指向網(wǎng)絡(luò),并由后者跨越全部實例執(zhí)行負載均衡。 七夕大家過得怎么樣?今天數(shù)人云帶大家回歸技術(shù)和干貨。雖然我們能夠在Swarm集群當(dāng)中部署任意數(shù)量的服務(wù),但這并不代表各項服務(wù)全部可為用戶所訪問。而新的Swarm網(wǎng)絡(luò)使得各項服務(wù)之間能夠更為輕松...

    cartoon 評論0 收藏0
  • Docker Swarm前世今生

    摘要:當(dāng)然此時的局限性較大,比如沒有副本和負載均衡的概念,這導(dǎo)致服務(wù)無法高可用當(dāng)然也更不存在什么服務(wù)網(wǎng)絡(luò)管理和跨節(jié)點數(shù)據(jù)存儲這些東西沒有服務(wù)模型集群中服務(wù)間關(guān)系和啟動順序編排也很復(fù)雜于是就有了下面的的誕生。 showImg(https://segmentfault.com/img/remote/1460000015317037?w=1885&h=1153); 概述 在我的《Docker S...

    lemon 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<