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 數據中心中預期的服務器數 有關
瀏覽
踩坑點:防火牆。。。