docker consul 容器的自動發(fā)現(xiàn)與注冊。
什么叫做微服務(容器)注冊與發(fā)現(xiàn)
是一種分布式管理系統(tǒng),定位服務的方法。
在傳統(tǒng)架構中,應用程序之間直連到已知的服務,設備提供的網絡:ip網絡,基于tcp/ip:端口
由于現(xiàn)代微服務部署,服務的動態(tài)性,數(shù)量增加了,傳統(tǒng)的基于ip+端口的形式已經不太適用。
服務注冊以及發(fā)現(xiàn):微服務的位置信息(ip+端口+健康狀況)統(tǒng)一注冊到一個中心化的服務注冊表中。
可以允許其他服務動態(tài)的查詢和發(fā)現(xiàn)這些服務
服務注冊:當一個服務啟動時,會把自己的元數(shù)據(ip 端口 服務名稱 健康狀態(tài))注冊到服務注冊表中。
這個注冊表的服務(consul,zookeeper),也可以在云平臺部署。
服務發(fā)現(xiàn):其他服務需要和這個服務通信時,只需要向注冊表查詢服務位置信息(ip+端口),這樣的話可以直接在服務注冊表中,直接獲取我要的信息,不需要到靜態(tài)配置查看了。
服務注冊于發(fā)現(xiàn)的有點:
- 動態(tài)性,可以在運行時動態(tài)添加和移除服務,不需要額外的人工操縱和配置。
- 彈性:一旦某個服務不可用,服務注冊表可以及時更新,通知其他服務避免請求的失敗。
- 可擴展:適應不斷變化的服務數(shù)量。
- 服務方調用時,透明性,前段和后端實現(xiàn)解耦
服務注冊與發(fā)現(xiàn)機制和其他的工具配合使用,負載均衡,健康檢查,配置管理(一鍵同步)。
微服務架構中非常重要的組件。
consul:
consul是HashiCrop公司開發(fā)的一套工具,用于實現(xiàn)服務發(fā)現(xiàn)與注冊,配置管理,分布式的系統(tǒng)協(xié)調。
consul的主要特點:
1.服務發(fā)現(xiàn)與自動注冊,位置信息(ip+端口+服務名稱)
2.健康檢查,服務注冊到consul,一并加入系統(tǒng)的還有他的健康狀態(tài),定期發(fā)送一個心跳檢查,如果服務掛了,consul會自動移除。
3.分布式鎖: consul提供了一個分布式鎖的功能,協(xié)調多個節(jié)點之間的操作,防止競爭條件和數(shù)據沖突。
每一個服務的發(fā)現(xiàn)和注冊都是一個會話session
微服務在注冊到consul的時候,consul會和這個服務的會話創(chuàng)建一個鎖,鎖用來標識具體的服務器。會話和鎖之間關聯(lián)。
獲取鎖:微服務2,建立會話,獲取鎖,如果申請的鎖沒有被使用,客戶端成功獲取,如果已經存在.表示已有其他的服務在占用,會給你分配一個新的鎖(KV存儲)
釋放鎖:任務完成或者服務斷開了連接,會把鎖釋放,刪除會話和鎖之間的關系。刪除與鎖關聯(lián)的鍵。實現(xiàn)資源的釋放。
4.KV存儲:key-value分布式的鍵值對存儲系統(tǒng),存儲配置信息,鎖,特性。應用程序可以使用consul的鍵值對信息來動態(tài)的獲取配置信息。
5.多數(shù)據中心支持,consul可以在多個地域部署,可以數(shù)據中心之間的發(fā)現(xiàn)和注冊功能。
6.DNS和IHTTP APl: Consul支持DNS接口,通過域名解析定位服務的位置,htte api:通過APL應用接口,可以調用consul的信息。服務信息.,健康檢查等等
7.事件通知,如有關鍵信息可以隨時獲取通知。
docker-consul部署和搭建
ocker1 ?20.0.0.41 ?docker-ce nginx二進制 ?consul-template(自動發(fā)現(xiàn)和自動配置)
docker2 ?20.0.0.42 ?registrator 運行注冊機制和微服務容器服務
docker3 ?20.0.0.43 ?consul多節(jié)點服務器加入到consul集群中
docker1
mkdir consul
cp consul_0.9.2_linux_amd64.zip consul/
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/local/bin/
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=20.0.0.41 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
#-server:指定集群當中的服務器節(jié)點,consul的RAFT算法實現(xiàn)分布式結構中節(jié)點的一致性。集群當中的成員.直接成為集群的leader,后續(xù)加入的服務都是follower
#-bootstrap:表示該節(jié)點是引導接待你,引導選組過程,以及為后續(xù)加入的server做引導,加入集群。
#-ui:啟動圖形化界面
#-data-dir=/var/lib/consul-data:指定consul存儲數(shù)據的路徑
#-bind=20.0.0.41:指定consul服務端綁定的IP地址,實現(xiàn)在節(jié)點中通信
#-client=0.0.0.0:客戶端的地址0.0.0.0:表示所有主機都可以和server建立通信。(生產中是指定的服務器)
#-node=consul-server01:指定consul節(jié)點的名稱。在集群當中consul節(jié)點的名稱都是唯一的不可以重復的。
# &> /var/log/consul.log:重定向混合的方式保存到log文件
#&:后臺運行
netstat -antp | grep consul
#8300:raft協(xié)議的端口,保持分布式集群的一致性,端口處理復制和領導者選舉
#8301:LAN Gossip的端口,局域網內部進行節(jié)點的通信和信息傳播的協(xié)議
#8302:Wan Gossip的端口。廣域網內節(jié)點的通信和信息傳播的協(xié)議
#8500:webui的端口。用來訪問consul的圖形化界面
#8600:DNS解析的端口。
consul members
#查看集群信息
consul operator raft list-peers
curl 127.0.0.1:8500/v1/status/peers
#查看集群的server成員
curl 127.0.0.1:8500/v1/status/leader
#查看集群中的領導者
curl 127.0.0.1:8500/v1/catalog/services
#查看以及被集權發(fā)現(xiàn)和注冊的服務
curl 127.0.0.1:8500/v1/catalog/nodes
#查看集群節(jié)點的詳細信息。
consul info | grep leader
#查看領導者是否工作
docker2服務端
創(chuàng)建自動發(fā)現(xiàn)和注冊的容器
docker run -d \
--name=registrator \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=20.0.0.42 \
consul://20.0.0.41:8500
#-v /var/run/docker.sock:/tmp/docker.sock:docker.sock的是docker守護進程的UNIX的套接字文件,把他映射到容器當中,registrator容器可以監(jiān)聽docker的所有事件,并且完成自動注冊服務。
#--ip=20.0.0.42:注冊consul的ip地址
#consul://20.0.0.41:8500:所有發(fā)現(xiàn)的服務都會注冊到指定的server節(jié)點。
如果網頁查看不到可以使用這個命令
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=20.0.0.42 \
consul://20.0.0.41:8500
docker run -itd -p 81:80 --name tets-1 -h test1 nginx
docker run -itd -p 82:80 --name tets-2 -h test2 httpd
到頁面訪問測試:20.0.0.41:8500
docker1
mkdir consul
cp consul_0.9.2_linux_amd64.zip consul/
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/local/bin/
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=20.0.0.41 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
#-server:指定集群當中的服務器節(jié)點,consul的RAFT算法實現(xiàn)分布式結構中節(jié)點的一致性。集群當中的成員.直接成為集群的leader,后續(xù)加入的服務都是follower
#-bootstrap:表示該節(jié)點是引導接待你,引導選組過程,以及為后續(xù)加入的server做引導,加入集群。
#-ui:啟動圖形化界面
#-data-dir=/var/lib/consul-data:指定consul存儲數(shù)據的路徑
#-bind=20.0.0.41:指定consul服務端綁定的IP地址,實現(xiàn)在節(jié)點中通信
#-client=0.0.0.0:客戶端的地址0.0.0.0:表示所有主機都可以和server建立通信。(生產中是指定的服務器)
#-node=consul-server01:指定consul節(jié)點的名稱。在集群當中consul節(jié)點的名稱都是唯一的不可以重復的。
# &> /var/log/consul.log:重定向混合的方式保存到log文件
#&:后臺運行
netstat -antp | grep consul
#8300:raft協(xié)議的端口,保持分布式集群的一致性,端口處理復制和領導者選舉
#8301:LAN Gossip的端口,局域網內部進行節(jié)點的通信和信息傳播的協(xié)議
#8302:Wan Gossip的端口。廣域網內節(jié)點的通信和信息傳播的協(xié)議
#8500:webui的端口。用來訪問consul的圖形化界面
#8600:DNS解析的端口。
consul members
#查看集群信息
consul operator raft list-peers
curl 127.0.0.1:8500/v1/status/peers
#查看集群的server成員
curl 127.0.0.1:8500/v1/status/leader
#查看集群中的領導者
curl 127.0.0.1:8500/v1/catalog/services
#查看以及被集權發(fā)現(xiàn)和注冊的服務
curl 127.0.0.1:8500/v1/catalog/nodes
#查看集群節(jié)點的詳細信息。
consul info | grep leader
#查看領導者是否工作
docker2服務端
創(chuàng)建自動發(fā)現(xiàn)和注冊的容器
docker run -d \
--name=registrator \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=20.0.0.42 \
consul://20.0.0.41:8500
#-v /var/run/docker.sock:/tmp/docker.sock:docker.sock的是docker守護進程的UNIX的套接字文件,把他映射到容器當中,registrator容器可以監(jiān)聽docker的所有事件,并且完成自動注冊服務。
#--ip=20.0.0.42:注冊consul的ip地址
#consul://20.0.0.41:8500:所有發(fā)現(xiàn)的服務都會注冊到指定的server節(jié)點。
如果網頁查看不到可以使用這個命令
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=20.0.0.42 \
consul://20.0.0.41:8500
docker run -itd -p 81:80 --name tets-1 -h test1 nginx
docker run -itd -p 82:80 --name tets-2 -h test2 httpd
到頁面訪問測試:20.0.0.41:8500
docker2
實現(xiàn)自動化更新文件
是HashiCrop公司開發(fā)的一個工具,用于consul集成,自定更新配置文件,實現(xiàn)配置管理的自動化。
作用:
1.動態(tài)的配置更新。consul-template監(jiān)控consul當中key-vlaue的存儲鍵值對,鍵值對發(fā)生變化,會自動更新配置文件。無需重啟服務
2.支持多種后端的模版: nginx配置,ETCD等等
docker2
回到docker1查看外部服務信息
瀏覽器訪問
負載均衡實現(xiàn)
docker3
回到docker1
回到docker2
回到頁面查看
總結:
docker consul的核心就是是發(fā)現(xiàn),微服務,可以動態(tài)的管理
docker-consul:查,看,元數(shù)據:ip 端口健康狀態(tài)服務名
consul-template:自動化管理配置文件的工具,獲取consul當中注冊的服務信息,可以自動的添加到配置文件當中,及時生效,無須重啟服務文章來源:http://www.zghlxwxcb.cn/news/detail-820072.html
consul的多節(jié)點:一旦選舉出了leader,后續(xù)的服務器都是follower.server的名稱不能重復,唯一.但是可以在一個數(shù)據中心。文章來源地址http://www.zghlxwxcb.cn/news/detail-820072.html
到了這里,關于Docker-consul容器服務自動發(fā)現(xiàn)與注冊的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!