国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

consul+docker實(shí)現(xiàn)服務(wù)注冊

Scholer / 1392人閱讀

摘要:同時(shí)注冊中心也會(huì)檢查注冊的服務(wù)是否可用,不可用則剔除。服務(wù)消費(fèi)者即在注冊中心注冊的服務(wù),他們之間不再通過具體地址訪問,而是通過服務(wù)名訪問其他在冊服務(wù)的資源。方法是在配置文件里加上信息,保證了,如果服務(wù)已停止,則從注冊中心中移除。

近期新聞

css宣布支持三角函數(shù)
ES10即將來臨

基本架構(gòu)


注冊中心: 每個(gè)服務(wù)提供者向注冊中心登記自己的服務(wù),將服務(wù)名與主機(jī)Ip,端口等一些附加信息告訴注冊中心,注冊中心按服務(wù)名分類組織服務(wù)清單。如A服務(wù)運(yùn)行在192.168.1.82:3000,192.168.1.83:3000實(shí)例上。那么維護(hù)的內(nèi)容如下:

簡單來說,服務(wù)中心會(huì)維護(hù)一份,在冊的服務(wù)名與服務(wù)ip的映射關(guān)系。同時(shí)注冊中心也會(huì)檢查注冊的服務(wù)是否可用,不可用則剔除。
服務(wù)消費(fèi)者:即在注冊中心注冊的服務(wù),他們之間不再通過具體地址訪問,而是通過服務(wù)名訪問其他在冊服務(wù)的資源。

技術(shù)說明

Consul:采用Go開發(fā)的高可用的服務(wù)注冊與配置服務(wù),本文的注冊中心采用Consul實(shí)現(xiàn)。
Docker:基于Go語言的開源應(yīng)用容器引擎。
Registor:Go語言編寫,針對docker使用的,通過檢查本機(jī)容器進(jìn)程在線或者停止運(yùn)行狀態(tài),去注冊服務(wù)的工具。這里主要用作對服務(wù)消費(fèi)者的監(jiān)控。
示例環(huán)境: 系統(tǒng):macos; docker: 17.09.1-ce; docker-compose:1.17.1。

docker命令創(chuàng)建注冊中心
docker run -h node1  --name consul -d --restart=always
    -p  8400 
    -p   8500:8500 
progrium/consul -server 
-bootstrap-expect 1 -advertise 127.0.0.1

下面來解釋下各個(gè)參數(shù)
-h 節(jié)點(diǎn)名字
--name 容器(container)名稱,后期用來方便啟動(dòng)關(guān)閉,看日志等,這個(gè)一定要寫
-d 后臺運(yùn)行
-v /data:/data 使用宿主機(jī)的/data目錄映射到容器內(nèi)部的/data,用于保存consul的注冊信息,要不docker 一重啟,數(shù)據(jù)是不保留的。
--restart=always 這個(gè)可以活得長一點(diǎn)
下面幾個(gè)參數(shù)都是consul集群用的,非集群模式可以不使用。

-p   8500:8500 

progrium/consul 鏡像名稱,本地沒有就自動(dòng)從公共docker庫下載
后面的都是consul的參數(shù):
-server 以服務(wù)節(jié)點(diǎn)啟動(dòng)
-bootstrap-expect 3 預(yù)期的啟動(dòng)節(jié)點(diǎn)數(shù)3,最少是3,要不達(dá)不到cluster的效果
-advertise 127.0.0.1 告訴集群,我的ip是什么,就是注冊集群用的

使用docker-compose創(chuàng)建注冊中心

使用docker命令創(chuàng)建注冊中心比較麻煩,并且不好維護(hù),這里使用docker-compose來實(shí)現(xiàn)。
docker-compose:
compose是 Docker 容器進(jìn)行編排的工具,定義和運(yùn)行多容器的應(yīng)用,可以一條命令啟動(dòng)多個(gè)容器,使用Docker Compose不再需要使用shell腳本來啟動(dòng)容器。

Compose 通過一個(gè)配置文件來管理多個(gè)Docker容器,在配置文件中,所有的容器通過services來定義,然后使用docker-compose腳本來啟動(dòng),停止和重啟應(yīng)用,和應(yīng)用中的服務(wù)以及所有依賴服務(wù)的容器,非常適合組合使用多個(gè)容器進(jìn)行開發(fā)的場景。
首先看下docker-compose配置文件:

version: "3.0"

services:
    # consul server,對外暴露的ui接口為8500,只有在2臺consul服務(wù)器的情況下集群才起作用
    consulserver:
        image: progrium/consul:latest
        hostname: consulserver
        ports:
            - "8300"
            - "8400"
            - "8500:8500"
            - "53"
        command: -server -ui-dir /ui -data-dir /tmp/consul --bootstrap-expect=3

    # consul server1在consul server服務(wù)起來后,加入集群中
    consulserver1:
        image: progrium/consul:latest
        hostname: consulserver1
        depends_on:
            - "consulserver"
        ports:
            - "8300"
            - "8400"
            - "8500"
            - "53"
        command: -server -data-dir /tmp/consul -join consulserver

    # consul server2在consul server服務(wù)起來后,加入集群中
    consulserver2:
        image: progrium/consul:latest
        hostname: consulserver2
        depends_on:
            - "consulserver"
        ports:
            - "8300"
            - "8400"
            - "8500"
            - "53"
        command: -server -data-dir /tmp/consul -join consulserver

這里consulserver,consulserver1等是服務(wù)名,image定義鏡像名,depends_on定義依賴容器,command可以覆蓋容器啟動(dòng)后默認(rèn)命令。詳細(xì)的配置項(xiàng)介紹及compose命令,可查看這里。
下面進(jìn)入模版目錄,運(yùn)行

docker-compose up -d

瀏覽器輸入http://127.0.0.1:8500,可以看到consul server服務(wù)已啟動(dòng)。效果如下:

接下來,添加registrator。方法是在配置文件里加上registrator信息,registrator保證了,如果服務(wù)已停止,則從注冊中心中移除。

    registrator:
        image: gliderlabs/registrator:master
        hostname: registrator
        depends_on:
            - "consulserver"
        volumes:
            - "/var/run/docker.sock:/tmp/docker.sock"
        command: -internal consul://consulserver:8500

注冊中心已經(jīng)建好了,接下來我們創(chuàng)建需要注冊在consul server上的服務(wù)。

搭建service web服務(wù)

首先我們創(chuàng)建一個(gè)服務(wù)的本地鏡像,用來創(chuàng)建服務(wù)容器。
創(chuàng)建server.js,這里用express框架創(chuàng)建node服務(wù),端口3000。

var express = require("express");
var PORT = 3000;
var app = express();
const ip = require("ip");
app.get("/getRemoteIp", (req, res) => {
    res.send({ ip: ip.address() });
});
app.get("/", function(req, res) {
    res.send("Helloworld
");
});
app.listen(PORT);
console.log("Running on http://localhost:" + PORT);

再創(chuàng)建package.json定義依賴。
創(chuàng)建鏡像最重要的是Dockerfile。

FROM node:alpine
RUN mkdir -p /home/Service
WORKDIR /home/Service 
COPY . /home/Service
RUN npm install
EXPOSE 3000
CMD npm start

FROM:構(gòu)建鏡像的基礎(chǔ)源鏡像
WORKDIR:容器的工作目錄
COPY:將本地的東西拷貝到容器的指定目錄下
EXPOSE:將容器內(nèi)的某個(gè)端口導(dǎo)出給主機(jī),用于我們訪問
CMD:每次容器啟動(dòng)的時(shí)候執(zhí)行的命令
詳細(xì)配置項(xiàng)信息可以看這里。

接著就可以創(chuàng)建鏡像了:

docker build -t client-server .

建成后使用docker images查看鏡像,也可以運(yùn)行鏡像,驗(yàn)證是否創(chuàng)建成功。

docker run -d -p 3000:3000 client-server

下面可以創(chuàng)建consul client了,配置文件如下。

version: "3.0"
# 啟動(dòng)node-service-web節(jié)點(diǎn)服務(wù)
services:
    web:
        image: client-server:latest
        environment:
            SERVICE_3000_NAME: service-web
        ports:
            - "3000"

這里client-server就是剛創(chuàng)建的鏡像。
運(yùn)行docker-compose -f docker-compose.web.yml up -d --scale web=3啟動(dòng)服務(wù),--scale web=3表示啟動(dòng)三臺服務(wù)器。效果如下:

驗(yàn)證Registrator功能

我們停止一個(gè)service-web 服務(wù),看下Registrator是否會(huì)將無效的服務(wù)移除。
首先看下當(dāng)前服務(wù) docker ps

再停止一個(gè)服務(wù)

docker stop de8848a31fe7

接著登錄http://localhost:8500/ui/#/dc1/services/consul,看到service-web變?yōu)閮蓚€(gè),說明Registrator會(huì)移除下線服務(wù)。

參考文檔:
https://zhuanlan.zhihu.com/p/...
https://www.jianshu.com/p/d16...
https://www.jianshu.com/p/ab7...
https://www.cnblogs.com/bossm...

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/27906.html

相關(guān)文章

  • React搭建個(gè)人博客(二)consul-template+nginx+docker實(shí)現(xiàn)負(fù)載均衡

    摘要:前兩個(gè)數(shù)據(jù)業(yè)務(wù)相關(guān)的服務(wù)即下圖的,第三個(gè)項(xiàng)目就是的實(shí)現(xiàn)的負(fù)載均衡。這里后臺,前臺項(xiàng)目各啟動(dòng)了三個(gè)實(shí)例,用戶訪問的時(shí)候,就會(huì)根據(jù)配置的負(fù)載均衡的策略,訪問其中一個(gè)。這一部分與之前我轉(zhuǎn)發(fā)的實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)及網(wǎng)關(guān)其實(shí)也只是差了個(gè)網(wǎng)關(guān)和負(fù)載均衡。 一.簡介 上一篇只講了博客的前端問題,這一篇講一下后端的微服務(wù)搭建。項(xiàng)目的后端使用的thinkjs框架,在我之前的博客中已經(jīng)寫過,這里就不重點(diǎn)說明了。后...

    Coding01 評論0 收藏0
  • 如何使用DockerDocker-Compose和Rancher搭建部署Pipeline(四)

    摘要:注冊器監(jiān)視每個(gè)守護(hù)進(jìn)程的事件,并在生命周期事件期間自動(dòng)更新。條件可以包括親和規(guī)則否定至軟強(qiáng)制意味著盡可能地避免。當(dāng)使用通用標(biāo)記如或部署服務(wù)時(shí),可能會(huì)出現(xiàn)意外的后果。月日,北京海航萬豪酒店,容器技術(shù)大會(huì)即將舉行。 在這篇文章中,我們將討論如何用Rancher實(shí)現(xiàn)consul的服務(wù)發(fā)現(xiàn)。 如果你還沒有準(zhǔn)備好,推薦你閱讀本系列中先前的文章:第一篇:CI /CD和Docker入門第二篇:使部署...

    13651657101 評論0 收藏0
  • 個(gè)推基于Docker和Kubernetes的微服務(wù)實(shí)踐

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

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

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

    genefy 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<