創建自定義網絡
sudo docker network create my-consul
獲取consul鏡像
sudo docker search consul
sudo docker pull consul
創建consul服務器
sudo docker run -d --name node1 -h node1 --net my-consul consul agent -server -bootstrap-expect 3 -datacenter dc001
-bootstrap-expect 在一個datacenter中期望提供的server節點數目,當該值提供的時候,consul一直等到達到指定sever數目的時候才會引導整個集群,該標記不能和bootstrap公用(推薦使用的方式)
獲取node1的ip地址
JOIN_IP="$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' node1)"
JOIN_IP 設置節點1的ip,方便后面使用
繼續創建其他服務器
sudo docker run -d --name node2 -h node2 --net my-consul consul agent -server -join $JOIN_IP -datacenter=dc001
sudo docker run -d --name node3 -h node3 --net my-consul consul agent -server -join=$JOIN_IP -datacenter=dc001
consul后的參數用等於或者空格都可以比如上面我寫的
-datacenter dc001,這里我寫的-datacenter=dc001
-server 此參數表明是創建服務器,不加就是創建客戶端
啟動consul客戶端
sudo docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp --name node4 -h node4 --net my-consul consul agent -ui -client=0.0.0.0 -join=$JOIN_IP -datacenter=dc001
-ui 在端口8500上啟動Consul的Web UI
-client 將Consul的客戶端綁定到指定ip,默認為127.0.0.1,這里設置為0.0.0.0,即不限制ip,讓容器外也能訪問到
更多參數
-advertise:通知展現地址用來改變我們給集群中的其他節點展現的地址,默認情況下-bind地址就是展現地址,然而也存在一些路由地址是不能受約束的,這時候會激活一個不同的地址來供應,如果這個地址不能路由,這個路由將不能被加入集群
-bootstrap:用來控制一個server是否在bootstrap模式,在一個datacenter中只能有一個server處於bootstrap模式,當一個server處於bootstrap模式時,可以自己選舉為raft leader,在一個節點的模式下這種方式很重要,否則在集群中的一致性不能保證,不推薦在集群中應用這個標識
-bootstrap-expect:在一個datacenter中期望提供的server節點數目,當該值提供的時候,consul一直等到達到指定sever數目的時候才會引導整個集群,該標記不能和bootstrap公用(推薦使用的方式)
-bind:該地址用來在集群內部的通訊,集群內的所有節點到地址都必須是可達的,默認是0.0.0.0,這意味着Consulo會使用第一個可用的私有IP地址,Consul可以使用TCP和UDP並且可以使用共同的端口,如果存在防火牆,這兩者協議必須是允許的。
-client:consul綁定在哪個client地址上,這個地址提供HTTP、DNS、RPC等服務,默認是127.0.0.1,只允許回路連接。RPC地址用於Consul命令,比如Consul members可以查詢當前運行的Consul代理
-config-file:明確的指定要加載哪個配置文件,文件下的所有配置會合並在一起進行加載
-config-dir:配置文件目錄,里面所有以.json結尾的文件都會被加載
-data-dir:提供一個目錄用來存放agent的狀態,所有的agent允許都需要該目錄,該目錄必須是穩定的,系統重啟后都繼續存在
-dc:該標記控制agent運行的datacenter的名稱,默認是dc1
-encrypt:指定secret key,使consul在通訊時進行加密,key可以通過consul keygen生成,同一個集群中的節點必須使用相同的key
-http-port:HTTP API偵聽端口,默認端口8500,可以在環境變量中進行設置,非常有用,可以用於與Consul進行通訊
-join:加入一個已經啟動的agent的ip地址,可以多次指定多個agent的地址。如果consul不能加入任何指定的地址中,則agent會啟動失敗,默認agent啟動時不會加入任何節點。
-retry-join:和join類似,但是允許你在第一次失敗后進行嘗試。
-retry-interval:兩次join之間的時間間隔,默認是30s
-retry-max:嘗試重復join的次數,默認是0,也就是無限次嘗試
-log-level:consul agent啟動后顯示的日志信息級別。默認是info,可選:trace、debug、info、warn、err。跟蹤 調試 詳情 警告 錯誤,可以通過Consul monitor使用任何級別,也可以通過重啟加載新的配置級別
-node:節點在集群中的名稱,在一個集群中必須是唯一的,默認是該節點的主機名(代表一個機器)
-pid-file:提供一個路徑來存放pid文件,可以使用該文件進行SIGINT/SIGHUP(關閉/更新)agent
-protocol:consul使用的協議版本 consul -v
-rejoin:使consul忽略先前的離開,在再次啟動后仍舊嘗試加入集群中。
-server:定義agent運行在server模式還是Client模式,提供時即為Server端,每個集群至少有一個server並且每台機器上不要超過5個dataceter.所有服務器采用一致性算法Raft保證數據一致,確保在故障的情況下的可用性。
-syslog:開啟系統日志功能,只在linux/osx上生效
-ui-dir:提供存放web ui資源的路徑,該目錄必須是可讀的
