Docker中執行consul叢集

前言

這篇部落格主要依賴上一篇文章,在阿里雲ECS中已經構建了consul映象,同樣的步驟,可以在騰訊雲中構建consul映象,用阿里雲和騰訊雲的主要原因就是新註冊使用者可以免費用一段時間的伺服器。

DNS設定

修改Docker守護程序的DNS查詢設定為:

  • 本地docker的IP地址,這樣可以使用consul來解析DNS
  • Google的DNS伺服器
  • 指定Consul的查詢指定搜尋域
    首先,先找到docker介面docker0的IP地址,如下:
ip addr show docker0

輸出內容如下:

docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:79:f7:f6:36 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 scope global docker0 valid_lft forever preferred_lft forever

這個介面地址就是172.17.0.1,使用這個地址,我們把/etc/default/docker檔案中的docker啟動項DOCKER_POTS修改為:

DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

我把阿里雲的伺服器叫做larry,騰訊雲的伺服器叫做curely。
在larry和curely中進行同樣的設定,如下:

DOCKER_OPTS="--dns 172.17.0.1 --dns 8.8.8.8 --dns-search service .consul"

然後重啟larry伺服器

service docker restart

同樣,重啟curely伺服器。

啟動自啟動consul節點

consul映象已經存在larry和curely伺服器中了,把larry伺服器做為自啟動的節點,執行以下命令:

docker run -d -h larry -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -p 53:53/udp --name larry_agent chenpeihai/consul -server -advertise 101.132.146.94 -bootstrap-expect 2

-server告訴代理執行在伺服器模式,-advertise 告訴代理通過101.132.146.94廣播自己,-bootstrap-expect告訴consul叢集中有多少代理。
larry需要在阿里雲的安全組中開啟對應的埠
這裡寫圖片描述

啟動curely節點

sudo docker run -d -h curly -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -p 53:53/udp --name curly_agent chenpeihai/consul -server -advertise 122.152.199.200 -join 101.132.146.94

-join 告訴consul連線101.132.146.94指定的larry主機的IP所在的叢集。

檢視consul節點日誌

docker logs larry_agent

可以看到日誌如下:

這裡寫圖片描述

sudo docker logs curely_agent

這裡寫圖片描述
可以看到選舉了larry為leader。

檢視consul控制檯

分別檢視larry和consul控制,可以看到叢集已經成功執行。
這裡寫圖片描述
這裡寫圖片描述
這樣就執行成功了。