摘要:同時(shí)注冊中心也會(huì)檢查注冊的服務(wù)是否可用,不可用則剔除。服務(wù)消費(fèi)者即在注冊中心注冊的服務(wù),他們之間不再通過具體地址訪問,而是通過服務(wù)名訪問其他在冊服務(wù)的資源。方法是在配置文件里加上信息,保證了,如果服務(wù)已停止,則從注冊中心中移除。
近期新聞
css宣布支持三角函數(shù)
ES10即將來臨
注冊中心: 每個(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ù)的資源。
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 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命令創(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ù)器。效果如下:
我們停止一個(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
摘要:前兩個(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)說明了。后...
摘要:注冊器監(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入門第二篇:使部署...
摘要:個(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ā)效率。在微服...
摘要:個(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ā)效率。在微服...
閱讀 3619·2021-09-27 14:02
閱讀 1769·2019-08-30 15:56
閱讀 1737·2019-08-29 18:44
閱讀 3269·2019-08-29 17:21
閱讀 477·2019-08-26 17:15
閱讀 1169·2019-08-26 13:57
閱讀 1234·2019-08-26 13:56
閱讀 2874·2019-08-26 11:30