成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何部署Docker+Consul+registrator架構實現(xiàn)服務發(fā)現(xiàn)

假設我們寫的代碼會調用 REST API 或者 Thrift API 的服務。為了完成一次請求,代碼需要知道服務實例的網絡位置(IP 地址和端口)。

成都創(chuàng)新互聯(lián)公司擁有網站維護技術和項目管理團隊,建立的售前、實施和售后服務體系,為客戶提供定制化的成都網站設計、網站建設、網站維護、服務器托管解決方案。為客戶網站安全和日常運維提供整體管家式外包優(yōu)質服務。我們的網站維護服務覆蓋集團企業(yè)、上市公司、外企網站、商城網站建設、政府網站等各類型客戶群體,為全球上1000家企業(yè)提供全方位網站維護、服務器維護解決方案。

運行在物理硬件上的傳統(tǒng)應用中,服務實例的網絡位置是相對固定的,代碼能從一個偶爾更新的配置文件中讀取網絡位置。

對于基于云端的、現(xiàn)代化的微服務應用而言,這卻是一大難題。將容器應用部署到集群時,其服務地址是由集群系統(tǒng)動態(tài)分配的。那么,當我們需要訪問這個服務時,如何確定它的地址呢?這時就需要服務發(fā)現(xiàn)(Service Discovery)了。

Docker+Consul+registrator實現(xiàn)服務發(fā)現(xiàn)
實驗環(huán)境
Docker01    192.168.2.10
Docker02    192.168.2.20
Docker03    192.168.2.30
關閉防火墻和selinux。consul_1.5.1_linux_amd64.zip
[root@docker01 ~]# unzip consul_1.5.1_linux_amd64.zip
[root@docker01 ~]# mv consul /usr/local/bin/
[root@docker01 ~]# chmod +x /usr/local/bin/consul
[root@docker01 ~]# consul --help    ##確認命令可用
1)在docker01上啟動consul服務
//啟動consul
[root@docker01 ~]# consul agent -server -bootstrap \

-ui -data-dir=/var/lib/consul-data \
-bind=192.168.2.10 \
-client=0.0.0.0 \
-node=master
后臺運行
[root@docker01 ~]# nohup consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.2.10 -client=0.0.0.0 -node=master &
[1] 17633
[root@docker01 ~]# nohup: 忽略輸入并把輸出追加到"nohup.out
PS://-bootstrap:加入這個選項時,一般都在server單節(jié)點的時候用,自選舉為leader。
-ui:開啟內部的web頁面      -data-dir:key/volum數據存儲位置
-bind:指定開啟服務的IP
-client:指定訪問的客戶端    
-node:指定集群內通信使用的名稱。默認是主機名
PS:開啟的端口
8300    集群節(jié)點
8301    集群內部的訪問
8302    跨數據中心的通信
8500    web ui 界面
8600    使用DNS協(xié)議查看節(jié)點信息的端口
//查看consul的信息
[root@docker01 ~]# consul info
leader_addr = 192.168.2.10:8300
//查看集群內成員的信息
[root@docker01 ~]# consul members
Node   Address           Status  Type   Build  Protocol  DC   Segment
master  192.168.2.10:8301  alive   server  1.5.1  2         dc1  <all>
2)docker02、docker03,加入consul集群
這里我們采用容器的方式去運行consul服務。myprogrium-consul.tar
docker load < myprogrium-consul.tar  
報錯重啟docker:
Systemctl restart docker
[root@docker02 ~]# docker run -d --name consul -p 8301:8301 -p 8301:8301/udp -p 8500:8500 -p 8600:8600/udp --restart always progrium/consul:latest -join 192.168.2.10 -advertise 192.168.2.20 -client 0.0.0.0 -node=node01
[root@docker03 ~]# docker run -d --name consul -p 8301:8301 -p 8301:8301/udp -p 8500:8500 -p 8600:8600/udp --restart always progrium/consul:latest -join 192.168.2.10 -advertise 192.168.2.30 -client 0.0.0.0 -node=node02
[root@docker01 ~]# consul members       ##可查詢到3臺主機
如何部署Docker+Consul+registrator架構實現(xiàn)服務發(fā)現(xiàn)

瀏覽器訪問本機的8500端口
如何部署Docker+Consul+registrator架構實現(xiàn)服務發(fā)現(xiàn)

3)下載部署consul-template
consul-template_0.19.5_linux_amd64.zip  
[root@docker01 ~]# unzip consul-template_0.19.5_linux_amd64.zip
[root@docker01 ~]# mv consul-template /usr/local/bin/
[root@docker01 ~]# chmod +x /usr/local/bin/consul-template
4)docker02、docker03上部署registrator服務
registrator是一個能自動發(fā)現(xiàn)docker container提供的服務,并在后端服務注冊中心注冊服務或取消服務的工具,后端注冊中心支持conusl、etcd、skydns2、zookeeper等。
myregistrator.tar  
[root@docker02 ~]# docker load < myregistrator.tar
[root@docker02 ~]# docker run -d \

--name registrator \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart always \
gliderlabs/registrator \
consul://192.168.2.20:8500
[root@docker03 ~]# docker load < myregistrator.tar
[root@docker03 ~]# docker run -d \
--name registrator \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart always \
gliderlabs/registrator \
consul://192.168.2.30:8500
Docker2上創(chuàng)建一個nginx容器
[root@docker02 ~]# docker run -d -P --name test nginx
驗證conusl上的nginx服務
如何部署Docker+Consul+registrator架構實現(xiàn)服務發(fā)現(xiàn)

5)docker01部署一個ngixn服務
[root@docker01 ~]# yum -y install gcc openssl openssl-devel zlib zlib-devel pcre pcre-devel
[root@docker01 ~]# useradd -M -s /sbin/nologin nginx
[root@docker01 ~]# tar zxf nginx-1.14.0.tar.gz
[root@docker01 ~]# cd nginx-1.14.0/
nginx-1.14.0.tar.gz  
[root@docker01 nginx-1.14.0]# ./configure --user=nginx --group=nginx \

--with-http_stub_status_module --with-http_realip_module --with-pcre --with-http_ssl_module
[root@docker01 nginx-1.14.0]# make && make install
[root@docker01 nginx-1.14.0]# ln -s /usr/local/nginx/sbin/* /usr/local/bin/
[root@docker01 nginx-1.14.0]# nginx -t
[root@docker01 nginx-1.14.0]# nginx
PS:這里nginx作為反向代理,代理后端docker02、docker03上nginx的容器服務,所以我們先去docker02、docker03上部署一些服務,為了方便等會回看到負載的效果,所以,我們運行完成容器之后,做一個主界面內容的區(qū)分
Docker02:web01 web02
[root@docker02 ~]# docker run -itd --name web01 -P nginx:latest
[root@docker02 ~]# docker exec -it web01 /bin/bash
root@b47619f3f7ae:/# echo The web container in docker02-web01 > /usr/share/nginx/html/index.html
[root@docker02 ~]# docker run -itd --name web02 -P nginx:latest
[root@docker02 ~]# docker exec -it web02 /bin/bash
root@89cc41040e33:/# echo The web container in docker02-web02 > /usr/share/nginx/html/index.html
Docker03:web03 web04
[root@docker03 ~]# docker run -itd --name web03 -P nginx:latest
[root@docker03 ~]# docker exec -it web03 /bin/bash
root@3f0d20853b0b:/# echo The web container in docker03-web03 > /usr/share/nginx/html/index.html
[root@docker03 ~]# docker run -itd --name web04 -P nginx:latest
[root@docker03 ~]# docker exec -it web04 /bin/bash
root@79168d0aa77f:/# echo The web container in docker03-web04 > /usr/share/nginx/html/index.html
更改nginx服務的配置文件
[root@docker01 ~]# cd /usr/local/nginx/
[root@docker01 nginx]# mkdir consul
[root@docker01 nginx]# cd consul/
[root@docker01 consul]# vim nginx.ctmpl
upstream http_backend {
{{range service "nginx"}}
server {{ .Address }}:{{ .Port }};
{{ end }}
}

server {
listen 8000;
server_name localhost;
location / {
proxy_pass http://http_backend;
}
}
[root@docker01 nginx]# cd ../conf/
[root@docker01 conf]# vim nginx.conf

include /usr/local/nginx/consul/*.conf;
//是nginx的主配置文件能夠識別到新的
[root@docker01 conf]# consul-template -consul-addr 192.168.2.10:8500 -template "/usr/local/nginx/consul/nginx.ctmpl:/usr/local/nginx/consul/vhost.conf:/usr/local/bin/nginx -s reload"
后臺運行
[root@docker01 conf]# nohup consul-template -consul-addr 192.168.2.10:8500 -template "/usr/local/nginx/consul/nginx.ctmpl:/usr/local/nginx/consul/vhost.conf:/usr/local/bin/nginx -s reload" &
[root@docker01 conf]# nohup: 忽略輸入并把輸出追加到"nohup.out"
[root@docker01 consul]# pwd
/usr/local/nginx/consul
[root@docker01 consul]# ls      ##生成一個vhost.conf文件
nginx.ctmpl  vhost.conf
[root@docker01 consul]# cat vhost.conf
如何部署Docker+Consul+registrator架構實現(xiàn)服務發(fā)現(xiàn)

查看8000端口是否起來
[root@docker01 consul]# ss -lnt
沒起來,重啟nginx
[root@docker01 consul]# nginx -s reload
訪問本機的8000端口
[root@docker01 ~]# curl 127.0.0.1:8000
如何部署Docker+Consul+registrator架構實現(xiàn)服務發(fā)現(xiàn)
當然:這時不管后端是新添加nginx的web容器,或是刪除,新生產的配置文件都會實時的更新,這是我們在運行consul-template這條命令添加的模板。

名稱欄目:如何部署Docker+Consul+registrator架構實現(xiàn)服務發(fā)現(xiàn)
網頁鏈接:http://jinyejixie.com/article12/jopegc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供App設計微信公眾號、品牌網站建設、網站改版、標簽優(yōu)化Google

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都做網站
涞水县| 玉田县| 景德镇市| 汕尾市| 长泰县| 谢通门县| 当阳市| 禹城市| 驻马店市| 禹州市| 阜南县| 驻马店市| 贺州市| 通许县| 海城市| 吉木萨尔县| 翁牛特旗| 阿鲁科尔沁旗| 根河市| 基隆市| 尤溪县| 舟曲县| 尉氏县| 合阳县| 繁昌县| 石棉县| 东乡族自治县| 通江县| 金塔县| 长子县| 凤凰县| 嘉义县| 浮山县| 涟水县| 惠东县| 成都市| 金平| 昌吉市| 普格县| 鄂州市| 大余县|