Docker學習(二)-Docker搭建Consul集群


1.環境准備

Linux機器三台 網絡互通配置可以參考 https://www.cnblogs.com/woxpp/p/11858257.html

192.168.50.21

192.168.50.22

192.168.50.23

 關閉三台機器防火牆,如果是一台機器則沒有關系,多台機器需要關閉。

systemctl stop firewalld.service            #停止firewall
systemctl disable firewalld.service        #禁止firewall開機啟動

 

2.安裝Docker

每台機器上安裝下Docker,如果鏡像比較慢可以開啟阿里雲的docker鏡像下載器。參考https://www.cnblogs.com/atuotuo/p/6264800.html

1. 安裝docker:

yum install -y docker

 

2. 啟動docker: 

service docker start

 

3. 驗證docker是否安裝成功:

docker version

2.安裝Consul鏡像

 1. 在三台機器上安裝consul鏡像(默認安裝最新版本)

docker pull consul

 

 2. 驗證安裝

docker images

 

3.啟動Consul

1.啟動參數詳解

–net=host docker參數, 使得docker容器越過了net namespace的隔離,免去手動指定端口映射的步驟
-server consul支持以server或client的模式運行, server是服務發現模塊的核心, client主要用於轉發請求
-advertise 將本機私有IP傳遞到consul
-retry-join 指定要加入的consul節點地址,失敗后會重試, 可多次指定不同的地址
-client 指定consul綁定在哪個client地址上,這個地址可提供HTTP、DNS、RPC等服務,默認是>127.0.0.1
-bind 綁定服務器的ip地址;該地址用來在集群內部的通訊,集群內的所有節點到地址必須是可達的,>默認是0.0.0.0
allow_stale 設置為true則表明可從consul集群的任一server節點獲取dns信息, false則表明每次請求都會>經過consul的server leader
-bootstrap-expect 數據中心中預期的服務器數。指定后,Consul將等待指定數量的服務器可用,然后>啟動群集。允許自動選舉leader,但不能與傳統-bootstrap標志一起使用, 需要在server模式下運行。
-data-dir 數據存放的位置,用於持久化保存集群狀態
-node 群集中此節點的名稱,這在群集中必須是唯一的,默認情況下是節點的主機名。
-config-dir 指定配置文件,當這個目錄下有 .json 結尾的文件就會被加載,詳細可參考https://www.consul.io/docs/agent/options.html#configuration_files
-enable-script-checks 檢查服務是否處於活動狀態,類似開啟心跳
-datacenter 數據中心名稱
-ui 開啟ui界面
-join 指定ip, 加入到已有的集群中

2.端口詳解 

8500 : http 端口,用於 http 接口和 web ui訪問;
8300 : server rpc 端口,同一數據中心 consul server 之間通過該端口通信;
8301 : serf lan 端口,同一數據中心 consul client 通過該端口通信; 用於處理當前datacenter中LAN的gossip通信;
8302 : serf wan 端口,不同數據中心 consul server 通過該端口通信; agent Server使用,處理與其他datacenter的gossip通信;
8600 : dns 端口,用於已注冊的服務發現;

3. 啟動consul服務,192.168.50.21

如果是一台機器可以在以下代碼中加入 -p 替換默認端口,-p 8501:8500

docker run -d --name consul21 -h=consul21 --net=host -e CONSUL_BIND_INTERFACE=ens33 consul agent -server=true -client=0.0.0.0 -bind=192.168.50.21 -ui -bootstrap-expect=3

4.啟動consul服務,192.168.50.22,加入21

docker run -d --name consul22 -h=consul22 --net=host -e CONSUL_BIND_INTERFACE=ens33 consul agent -server=true -client=0.0.0.0 -join=192.168.50.21 -ui

5.啟動consul服務,192.168.50.23,加入21

docker run -d --name consul22 -h=consul22 --net=host -e CONSUL_BIND_INTERFACE=ens33 consul agent -server=true -client=0.0.0.0 -join=192.168.50.21 -ui

6.檢查每台機器的consul運行狀態

docker ps

 如果出現  Exited 9 seconds ago,則關閉所有機器防火牆后試試

docker rm -f consul22  #刪除容器

systemctl stop firewalld.service            #停止firewall
systemctl disable firewalld.service        #禁止firewall開機啟動

 

7.查看consul運行日志

docker logs consul22

日志中出現 

2019/11/15 05:58:44 [WARN] raft: no known peers, aborting election
2019/11/15 05:58:46 [ERR] agent: failed to sync remote state: No cluster leader

三台機器重啟好后,則不會報錯,與啟動時參數 -bootstrap-expect=3 數據中心中預期的服務器數 有關

 

瀏覽

http://192.168.50.21:8500/ui/ 

http://192.168.50.22:8500/ui/

http://192.168.50.23:8500/ui/

踩坑點:防火牆。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM