这就是你日日夜夜想要的docker!!!---------docker+consul+ nginx集成分布式的服务发现与注册架构
文章目錄
- 一、Docker consul容器服務(wù)更新與發(fā)現(xiàn)理論
- 1、基本架構(gòu)
- 2、基于nginx和consul構(gòu)建高可用及自動發(fā)現(xiàn)的Docker服務(wù)架構(gòu)
- 3、Docker consul自動發(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、啟動template,指定template模板文件及生成路徑
- 9、反向代理服務(wù)器重新打開終端查看產(chǎn)生的配置文件
- 10、客戶端瀏覽器測試,結(jié)合nginx服務(wù)器日志驗(yàn)證
一、Docker consul容器服務(wù)更新與發(fā)現(xiàn)理論
Consul是一個分布式、高可用的系統(tǒng),是一個為了解決在生產(chǎn)環(huán)境中服務(wù)注冊,服務(wù)發(fā)現(xiàn),服務(wù)配置的一個工具,它有多個組件,提供如下幾個關(guān)鍵功能:
服務(wù)發(fā)現(xiàn): Consul的某些客戶端可以提供一個服務(wù),例如api或者mysql,其它客戶端可以使用Consul去發(fā)現(xiàn)這個服務(wù)的提供者。使用DNS或者HTTP,應(yīng)用可以很容易的找到他們所依賴的服務(wù)。
健康檢查: Consul客戶端可以提供一些健康檢查,這些健康檢查可以關(guān)聯(lián)到一個指定的服務(wù)(服務(wù)是否返回200 OK),也可以關(guān)聯(lián)到本地節(jié)點(diǎn)(內(nèi)存使用率是否在90%以下)。這些信息可以被一個操作員用來監(jiān)控集群的健康狀態(tài),被服務(wù)發(fā)現(xiàn)組件路由時用來遠(yuǎn)離不健康的主機(jī)。
鍵值存儲: 應(yīng)用可以使用Consul提供的分層鍵值存儲用于一些目的,包括動態(tài)配置、特征標(biāo)記、協(xié)作、leader選舉等等。通過一個簡單的HTTP API可以很容易的使用這個組件。
多數(shù)據(jù)中心: Consul對多數(shù)據(jù)中心有非常好的支持,這意味著Consul用戶不必?fù)?dān)心由于創(chuàng)建更多抽象層而產(chǎn)生的多個區(qū)域。
1、基本架構(gòu)
注冊中心: 每個服務(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)容如下:
2、基于nginx和consul構(gòu)建高可用及自動發(fā)現(xiàn)的Docker服務(wù)架構(gòu)
上方拓?fù)鋱D是基于Docker完成的,然后將consul、consul template、registrator和nginx組裝成一個值得信任且可擴(kuò)展的服務(wù)框架,此架構(gòu)可以靈活的、不需要重啟任何服務(wù)、不需要重寫任何配置的添加和移除服務(wù)
拓?fù)鋱D解釋
consul template:配置文件模板
registrator:注冊機(jī)制
consul server:consul服務(wù)
例如:當(dāng)后方增加了一個容器時,容器會注冊registrator,registrator發(fā)現(xiàn)增加了一個容器的時候,會通知consul server要更新,consul server使用consul template模板更新
3、Docker consul自動發(fā)現(xiàn)服務(wù)架構(gòu)的構(gòu)建
1、每個提供服務(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 \ '//提供一個代理存儲數(shù)據(jù)目錄' > -bind=192.168.233.132 \ '//綁定本地地址' > -client=0.0.0.0 \ '//面對的客戶端地址' > -node=consul-server01 &> /var/log/consul.log& ' //定義節(jié)點(diǎn)名稱,日志混合輸出到log,并且放到后臺運(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:83003、通過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 '//查看注冊的所有服務(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ù)卷,存儲信息' > --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)建容器,用來測試服務(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瀏覽器測試:192.168.110.132:8500
查看日志
5、反向代理服務(wù)器安裝consul-template,準(zhǔn)備模板文件
compose-template介紹
compose-template是一個守護(hù)進(jìn)程,用于實(shí)時查詢consul集群信息
并且運(yùn)維人員可以在consul服務(wù)器上,定制任意的模板,生成配置文件
compose可以查詢consul中的服務(wù)目錄、key、key-values等
這種強(qiáng)大的抽象功能和查詢語言模板使得consul-template特別適合動態(tài)的創(chuàng)建配置文件,也就是自動化增加服務(wù)
6、反向代理服務(wù)器編寫template nginx模板文件
此模板用于nginx反向代理模板
nginx.ctmpl跟nginx沒有直接關(guān)系,
consul是docker的一種自動管理機(jī)制
nginx.ctmpl中的參數(shù)以變量的形式寫入
7、反向代理服務(wù)器編譯安裝nginx
[root@localhost consul]# yum install gcc gcc-c++ make expat* pcre* perl* zlib* -y '//安裝環(huán)境報' [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 '/啟動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、啟動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=info9、反向代理服務(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、客戶端瀏覽器測試,結(jié)合nginx服務(wù)器日志驗(yàn)證
[root@localhost ~]# docker logs -f test-01 '//nginx服務(wù)器動態(tài)查看test-01日志' [root@localhost ~]# docker logs -f test-02 '//重新打開終端,動態(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訪問,查看日志會發(fā)現(xiàn)是輪詢出現(xiàn)的
測試consul-template自動在線更新
[root@localhost ~]# docker run -itd --name test-06 -p 2000:80 nginx 136853509dee16aeda4afe1b2d5bd5277341ef8157d6976745188005c69cb5c7 '//nginx服務(wù)器添加一個容器' [root@localhost consul]# cat /usr/local/nginx/conf/vhost/tang.conf總結(jié)
以上是生活随笔為你收集整理的这就是你日日夜夜想要的docker!!!---------docker+consul+ nginx集成分布式的服务发现与注册架构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硅芯思见:SystemVerilog中的
- 下一篇: 简单使用python进行图像打标