Docker 容器部署 Consul 集群

2021-08-27 22:06:55 字數 2558 閱讀 5121

consul 提供了分布式系統的服務發現和配置的解決方案。基於go語言實現。並且在git上開放了原始碼。consul還包括了分布式一致協議的實現,健康檢查和管理ui。docker 的簡單介紹,可以參考前面一篇文章。配合docker來做應用容器,用consul 來做集群的服務發現和健康檢查,並且還可以輕量級得做到水平和垂直可擴充套件。

通過執行 consul agent 命令,可以通過後台守護程序的

方式執行在所有consul集群節點中。並且可以以server或者client 模式執行。並且以http或者dns 介面方式,負責執行檢查和服務同步。server模式的agent負責維護consul集群狀態,相應rpc查詢,並且還要負責和其他資料中心進行wan gossips交換。client 節點是相對無狀態的,client的唯一活動就是**請求給server節點,以保持低延遲和少資源消耗。

如下圖,是官網的乙個典型系統結構,consul建議我們每個datacenter的server的節點最好在3到5個之間,以方便在失敗以及資料複製的效能。client的數量可以任意。圖中,最重要的兩個概念乙個是gossip協議,乙個是consensus 協議。datacenter的所有節點都會參與到gossip協議。client 到server 會通過lan gossip。所有的節點都在gossip pool中,通過訊息層來實現節點之間的通訊以達到故障檢測的目的,並且不需要給client配置server的位址。而server節點還會參與到wan gossip池中。這樣,通過server節點就可以讓datacenter之間做簡單的服務發現。比如增加乙個datacenter就只需要讓server節點參與到gossip pool中。並且,datacneter之間的通訊和服務請求就可以通過wan gossip 來隨機請求另外乙個datacenter的server節點,然後被請求的server 會再把請求foword到本datacenter的leader節點。server leader的選舉是通過consul的raft 演算法實現。leader 節點需要負責所有請求和處理,並且這些請求也必須複製給所有的其他非leader的server節點。同樣,非leader節點接收到rpc請求的時候也會foward 到leader節點。

這裡試驗一下8600(dns) 介面,然後我們就用dig的方式可以互動和訪問了。

用bootstrap-expect 3 來啟動三個服務節點,並且繫結到容器的同乙個ip

docker@boot2docker:~$ docker run -d --name node1 -h node1 progrium/consul -server -bootstrap-expect 3

docker@boot2docker:~$ join_ip="$(docker inspect -f '}' node1)」

docker@boot2docker:~$ docker run -d --name node2 -h node2 progrium/consul -server -join $join_ip

docker@boot2docker:~$ docker run -d --name node3 -h node3 progrium/consul -server -join $join_ip

docker@boot2docker:~$ docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node4 progrium/consul -join $join_ip

檢視容器資訊:

我們可以進入容器來檢視一下consul是如何管理agent節點,以及選舉server 的leader的。

server node3 節點如下:

這個時候我們關掉server節點,容器name是node1的 d7a68580a730 容器,再觀察

node3節點資訊如下:

server node2 節點如下:

client 節點node4如下:

用consul還可以做docker容器內部的健康監測, dns docker container 以及執行時配置管理。

container重啟乙個節點的時候並且暴露相同的埠的時候會造成心跳檢測失敗。如下:

此時,需要等上3分鐘左右再重啟或者手動清空arp表的快取。

Docker多容器部署

docker的大名相信大家已經耳熟能詳,這個已經風靡了2年 的神器,今天我們也來把玩下.這裡必須貼下docker的標誌性logo,雖然有過幾次變遷,但貨櫃沒變,這艘鯨魚般的大船也沒變,裝 build 載 ship 運 run 的核心必須沒變。這裡必須澄清下這艘只裝載貨櫃的大船,其實排水量並不大,這裡...

docker 部署portaine 容器管理

一 單機模式部署 docker pull docker.io portainer portainer 2 執行映象 docker run d p 9000 9000 restart always v var run docker.sock var run docker.sock name prtai...

docker容器安裝和部署

最近太忙了,公司一直在忙著新版發布上線,所以一直都沒有分享。今天,要分享的內容是docker容器化部署伺服器環境,之前的專案有用到過,發現這個容器部署在集群和多伺服器統一管理上很是方便,所以就研究了一下,不過,對於一些新手來說,可能比較麻煩,因為docker應用,相當於是在各種軟體和服務的基礎上又封...