日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

这就是你日日夜夜想要的docker!!!---------docker+consul+ nginx集成分布式的服务发现与注册架构

發(fā)布時(shí)間:2024/1/8 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 这就是你日日夜夜想要的docker!!!---------docker+consul+ nginx集成分布式的服务发现与注册架构 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 一、Docker consul容器服務(wù)更新與發(fā)現(xiàn)理論
    • 1、基本架構(gòu)
    • 2、基于nginx和consul構(gòu)建高可用及自動(dòng)發(fā)現(xiàn)的Docker服務(wù)架構(gòu)
    • 3、Docker consul自動(dòng)發(fā)現(xiàn)服務(wù)架構(gòu)的構(gòu)建
  • 二、部署單節(jié)點(diǎn)consul
    • 1、拓?fù)鋱D如下
    • 2、nginx代理服務(wù)器部署consul服務(wù)
    • 3、通過HTTP api獲取集群信息
    • 4、web服務(wù)器上連接consul,創(chuàng)建nginx容器服務(wù)
    • 5、反向代理服務(wù)器安裝consul-template,準(zhǔn)備模板文件
    • 6、反向代理服務(wù)器編寫template nginx模板文件
    • 7、反向代理服務(wù)器編譯安裝nginx
    • 8、啟動(dòng)template,指定template模板文件及生成路徑
    • 9、反向代理服務(wù)器重新打開終端查看產(chǎn)生的配置文件
    • 10、客戶端瀏覽器測(cè)試,結(jié)合nginx服務(wù)器日志驗(yàn)證

一、Docker consul容器服務(wù)更新與發(fā)現(xiàn)理論

Consul是一個(gè)分布式、高可用的系統(tǒng),是一個(gè)為了解決在生產(chǎn)環(huán)境中服務(wù)注冊(cè),服務(wù)發(fā)現(xiàn),服務(wù)配置的一個(gè)工具,它有多個(gè)組件,提供如下幾個(gè)關(guān)鍵功能:

服務(wù)發(fā)現(xiàn): Consul的某些客戶端可以提供一個(gè)服務(wù),例如api或者mysql,其它客戶端可以使用Consul去發(fā)現(xiàn)這個(gè)服務(wù)的提供者。使用DNS或者HTTP,應(yīng)用可以很容易的找到他們所依賴的服務(wù)。
健康檢查: Consul客戶端可以提供一些健康檢查,這些健康檢查可以關(guān)聯(lián)到一個(gè)指定的服務(wù)(服務(wù)是否返回200 OK),也可以關(guān)聯(lián)到本地節(jié)點(diǎn)(內(nèi)存使用率是否在90%以下)。這些信息可以被一個(gè)操作員用來監(jiān)控集群的健康狀態(tài),被服務(wù)發(fā)現(xiàn)組件路由時(shí)用來遠(yuǎn)離不健康的主機(jī)。
鍵值存儲(chǔ): 應(yīng)用可以使用Consul提供的分層鍵值存儲(chǔ)用于一些目的,包括動(dòng)態(tài)配置、特征標(biāo)記、協(xié)作、leader選舉等等。通過一個(gè)簡(jiǎn)單的HTTP API可以很容易的使用這個(gè)組件。
多數(shù)據(jù)中心: Consul對(duì)多數(shù)據(jù)中心有非常好的支持,這意味著Consul用戶不必?fù)?dān)心由于創(chuàng)建更多抽象層而產(chǎn)生的多個(gè)區(qū)域。

1、基本架構(gòu)


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

2、基于nginx和consul構(gòu)建高可用及自動(dòng)發(fā)現(xiàn)的Docker服務(wù)架構(gòu)


上方拓?fù)鋱D是基于Docker完成的,然后將consul、consul template、registrator和nginx組裝成一個(gè)值得信任且可擴(kuò)展的服務(wù)框架,此架構(gòu)可以靈活的、不需要重啟任何服務(wù)、不需要重寫任何配置的添加和移除服務(wù)

拓?fù)鋱D解釋

consul template:配置文件模板

registrator:注冊(cè)機(jī)制

consul server:consul服務(wù)

例如:當(dāng)后方增加了一個(gè)容器時(shí),容器會(huì)注冊(cè)registrator,registrator發(fā)現(xiàn)增加了一個(gè)容器的時(shí)候,會(huì)通知consul server要更新,consul server使用consul template模板更新

3、Docker consul自動(dòng)發(fā)現(xiàn)服務(wù)架構(gòu)的構(gòu)建

1、每個(gè)提供服務(wù)的節(jié)點(diǎn)上都要部署和運(yùn)行consul的agent

2、consul agent有兩種運(yùn)行模式:server和client

3、server和client只是consul集群層面的區(qū)分,與搭建在cluster之上的應(yīng)用服務(wù)無關(guān)

二、部署單節(jié)點(diǎn)consul

1、拓?fù)鋱D如下

2、nginx代理服務(wù)器部署consul服務(wù)

[root@localhost ~]# mkdir /consul [root@localhost ~]# cd /consul/ [root@localhost consul]# rz -E '//上傳壓縮包' rz waiting to receive. [root@localhost consul]# unzip consul_0.9.2_linux_amd64.zip -d /usr/bin '//解壓' Archive: consul_0.9.2_linux_amd64.zipinflating: /usr/bin/consul [root@localhost consul]# consul agent \ '//設(shè)置代理' > -server \ '//服務(wù)功能' > -bootstrap \ '//參與選舉' > -ui \ '//提供web界面' > -data-dir=/var/lib/consul-data \ '//提供一個(gè)代理存儲(chǔ)數(shù)據(jù)目錄' > -bind=192.168.233.132 \ '//綁定本地地址' > -client=0.0.0.0 \ '//面對(duì)的客戶端地址' > -node=consul-server01 &> /var/log/consul.log& ' //定義節(jié)點(diǎn)名稱,日志混合輸出到log,并且放到后臺(tái)運(yùn)行' [1] 2173 [root@localhost consul]# jobs [1]+ 運(yùn)行中 consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.110.132 -client=0.0.0.0 -node=consul-server01 &>/var/log/consul.log & [root@localhost consul]# consul members '//查看集群信息' Node Address Status Type Build Protocol DC consul-server01 192.168.110.132:8301 alive server 0.9.2 2 dc1 [root@localhost consul]# consul info |grep leader '//查看管理信息'leader = trueleader_addr = 192.168.110.132:8300

3、通過HTTP api獲取集群信息

curl 127.0.0.1:8500/v1/status/peers '/查看集群server成員'curl 127.0.0.1:8500/v1/status/leaders '//查看集群Raf leader'curl 127.0.0.1:8500/v1/catalog/services '//查看注冊(cè)的所有服務(wù)'curl 127.0.0.1:8500/v1/catalog/nginx '//查看nginx服務(wù)的信息'curl 127.0.0.1:8500/v1/catalog/nodes '//集群節(jié)點(diǎn)詳細(xì)信息'

4、web服務(wù)器上連接consul,創(chuàng)建nginx容器服務(wù)

[root@localhost ~]# docker run -d \ > --name=registrator \ '//定義容器名稱' > --net=host \ '定義網(wǎng)絡(luò)' > -v /var/run/docker.sock:/tmp/docker.sock \ '指定數(shù)據(jù)卷,存儲(chǔ)信息' > --restart=always \ > gliderlabs/registrator:latest \ '定義鏡像' > -ip=192.168.233.133 \ '指定本地地址' > consul://192.168.233.132:8500 '指定consul管理節(jié)點(diǎn)地址、端口' [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 703ee87d399d gliderlabs/registrator:latest "/bin/registrator -i…" 2 minutes ago Restarting (1) 31 seconds ago registrator [root@localhost ~]# docker run -itd -p 83:80 --name test -h test nginx '//創(chuàng)建容器,用來測(cè)試服務(wù)發(fā)現(xiàn)功能是否正常' [root@localhost ~]# docker run -itd -p 84:80 --name test-02 -h test02 nginx [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES eb5045196611 httpd "httpd-foreground" 7 seconds ago Up 7 seconds 0.0.0.0:86->80/tcp test-04 03473a1137bd httpd "httpd-foreground" 10 seconds ago Up 9 seconds 0.0.0.0:85->80/tcp test-03 2e2cee1e6494 nginx "nginx -g 'daemon of…" 39 seconds ago Up 38 seconds 0.0.0.0:84->80/tcp test-02 87a47780cfd1 nginx "nginx -g 'daemon of…" 12 minutes ago Up 12 minutes 0.0.0.0:83->80/tcp test-01 [root@localhost consul]# firewall-cmd --get-active-zones publicinterfaces: ens33 [root@localhost consul]# firewall-cmd --zone=public --add-port=8500/tcp '//設(shè)置防火墻規(guī)則或者關(guān)閉防火墻' success

瀏覽器測(cè)試:192.168.110.132:8500


查看日志

[root@localhost ~]# docker logs -f test-01 192.168.233.1 - - [27/Apr/2020:02:43:43 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" "-" '//發(fā)現(xiàn)訪問IP是物理網(wǎng)卡的網(wǎng)關(guān)' [root@localhost consul]# curl 127.0.0.1:8500/v1/catalog/services {"consul":[],"httpd":[],"nginx":[]} '//再次查看祖冊(cè)的所有服務(wù)'

5、反向代理服務(wù)器安裝consul-template,準(zhǔn)備模板文件

compose-template介紹

compose-template是一個(gè)守護(hù)進(jìn)程,用于實(shí)時(shí)查詢consul集群信息
并且運(yùn)維人員可以在consul服務(wù)器上,定制任意的模板,生成配置文件
compose可以查詢consul中的服務(wù)目錄、key、key-values等
這種強(qiáng)大的抽象功能和查詢語言模板使得consul-template特別適合動(dòng)態(tài)的創(chuàng)建配置文件,也就是自動(dòng)化增加服務(wù)

[root@localhost consul]# rz -E '//上傳consul-template軟件包' rz waiting to receive. [root@localhost consul]# ls consul-template_0.19.3_linux_amd64.zip [root@localhost consul]# unzip consul-template_0.19.3_linux_amd64.zip -d /usr/bin Archive: consul-template_0.19.3_linux_amd64.zipinflating: /usr/bin/consul-template

6、反向代理服務(wù)器編寫template nginx模板文件

此模板用于nginx反向代理模板
nginx.ctmpl跟nginx沒有直接關(guān)系,
consul是docker的一種自動(dòng)管理機(jī)制
nginx.ctmpl中的參數(shù)以變量的形式寫入

[root@localhost consul]# mkdir /var/log/nginx [root@localhost consul]# vim nginx.ctmpl upstream http_backend {{{range service "nginx"}}server {{.Address}}:{{.Port}};{{end}} }server {listen 88;server_name localhost 192.168.110.132;access_log /var/log/nginx/tang.cn-access.log;index index.html index.php;location / {proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Client-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://http_backend;} }

7、反向代理服務(wù)器編譯安裝nginx

[root@localhost consul]# yum install gcc gcc-c++ make expat* pcre* perl* zlib* -y '//安裝環(huán)境報(bào)' [root@localhost consul]# rz -E '//上傳源碼包并編譯' rz waiting to receive. [root@localhost consul]# ls consul-template_0.19.3_linux_amd64.zip nginx-1.12.2.tar.gz nginx.ctmpl [root@localhost consul]# tar zxf nginx-1.12.2.tar.gz [root@localhost consul]# ls consul-template_0.19.3_linux_amd64.zip nginx-1.12.2 nginx-1.12.2.tar.gz nginx.ctmpl [root@localhost consul]# cd nginx-1.12.2 [root@localhost nginx-1.12.2]# ./configure --prefix=/usr/local/nginx [root@localhost nginx-1.12.2]# make && make install [root@localhost nginx-1.12.2]# mkdir /usr/local/nginx/conf/vhost/ '//創(chuàng)建虛擬主機(jī)目錄' [root@localhost nginx-1.12.2]# vim /usr/local/nginx/conf/nginx.conf '//編輯配置文件,添加目錄'#user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;events {worker_connections 1024; }http {include mime.types;include vhost/*.conf; '//添加路徑'default_type application/octet-stream;...省略內(nèi)容 [root@localhost nginx-1.12.2]# /usr/local/nginx/sbin/nginx '/啟動(dòng)nginx' [root@localhost nginx-1.12.2]# netstat -natp | grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5819/nginx: master [root@localhost nginx-1.12.2]# firewall-cmd --zone=public --add-port=80/tcp '//防火墻規(guī)則設(shè)置80端口'

8、啟動(dòng)template,指定template模板文件及生成路徑

[root@localhost consul]# consul-template -consul-addr 192.168.110.132:8500 -template "/root/nginx.ctmpl:/usr/local/nginx/conf/vhost/shang.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info

9、反向代理服務(wù)器重新打開終端查看產(chǎn)生的配置文件

[root@consul ~]# vim /usr/local/nginx/conf/vhost/shang.conf upstream http_backend {server 192.168.110.133:84;server 192.168.110.133:83;}server {listen 88;server_name localhost 192.168.110.132;access_log /var/log/nginx/tang.cn-access.log;index index.html index.php;location / {proxy_set_header HOST $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Client-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://http_backend;} }

10、客戶端瀏覽器測(cè)試,結(jié)合nginx服務(wù)器日志驗(yàn)證

[root@localhost ~]# docker logs -f test-01 '//nginx服務(wù)器動(dòng)態(tài)查看test-01日志' [root@localhost ~]# docker logs -f test-02 '//重新打開終端,動(dòng)態(tài)查看test-02日志' [root@localhost ~]# firewall-cmd --zone=public --add-port=88/tcp '//主節(jié)點(diǎn)設(shè)置防火墻規(guī)則,放通88端口' success

瀏覽器使用192.168.110.132:88訪問,查看日志會(huì)發(fā)現(xiàn)是輪詢出現(xiàn)的

測(cè)試consul-template自動(dòng)在線更新

[root@localhost ~]# docker run -itd --name test-06 -p 2000:80 nginx 136853509dee16aeda4afe1b2d5bd5277341ef8157d6976745188005c69cb5c7 '//nginx服務(wù)器添加一個(gè)容器' [root@localhost consul]# cat /usr/local/nginx/conf/vhost/tang.conf

總結(jié)

以上是生活随笔為你收集整理的这就是你日日夜夜想要的docker!!!---------docker+consul+ nginx集成分布式的服务发现与注册架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。