安装consul
概述
consul是google開源的一個使用go語言開發的服務發現、配置管理中心服務。內置了服務注冊與發現框架、分布一致性協議實現、健康檢查、Key/Value存儲、多數據中心方要依賴其他工具(比如ZooKeeper等)。服務部署簡單,只有一個可運行的二進制的包。每個節點都需要運行agent,他有兩種運行模式server和client。每個數據中心官方建議需要3或5個server節點以保證數據安全,同時保證server-leader的選舉能夠正確的進行。
client
CLIENT表示consul的client模式,就是客戶端模式。是consul節點的一種模式,這種模式下,所有注冊到當前節點的服務會被轉發到SERVER,本身是不持久化這些信息。
server
SERVER表示consul的server模式,表明這個consul是個server,這種模式下,功能和CLIENT都一樣,唯一不同的是,它會把所有的信息持久化的本地,這樣遇到故障,信息是可以被保留的。
server-leader
中間那個SERVER下面有LEADER的字眼,表明這個SERVER是它們的老大,它和其它SERVER不一樣的一點是,它需要負責同步注冊的信息給其它的SERVER,同時也要負責各個節點的健康監測。
raft
server節點之間的數據一致性保證,一致性協議使用的是raft,而zookeeper用的paxos,etcd采用的也是taft。
服務發現協議
consul采用http和dns協議,etcd只支持http
服務注冊
consul支持兩種方式實現服務注冊,一種是通過consul的服務注冊http API,由服務自己調用API實現注冊,另一種方式是通過json個是的配置文件實現注冊,將需要注冊的服務以json格式的配置文件給出。consul官方建議使用第二種方式。服務發現
consul支持兩種方式實現服務發現,一種是通過http API來查詢有哪些服務,另外一種是通過consul agent 自帶的DNS(8600端口),域名是以NAME.service.consul的形式給出,NAME即在定義的服務配置文件中,服務的名稱。DNS方式可以通過check的方式檢查服務。
服務間的通信協議
Consul使用gossip協議管理成員關系、廣播消息到整個集群,他有兩個gossippool(LAN pool和WAN pool),LAN pool是同一個數據中心內部通信的,WAN pool是多個數據中心通信的,LAN pool有多個,WAN pool只有一個
?
安裝consul-server集群
下載鏡像
docker pull docker.io/consul:latest
創建consul配置:
vim /opt/platform/consul/config/server.json {"datacenter": "xxx-consul","data_dir": "/consul/data","server": true,"ui": true,"bind_addr": "172.29.150.25","client_addr": "0.0.0.0","bootstrap_expect": 3,"retry_join": ["172.29.150.25","172.29.150.26","172.29.150.27"],"retry_interval": "10s","rejoin_after_leave": true,"skip_leave_on_interrupt": true }
配置說明:
1. datacenter:數據中心名稱(庫名)
2. data_dir:數據存儲目錄
3. server:運行在server模式
4. ui:使用UI界面
5. bind_addr:內部集群通信綁定的地址。默認是宿主機ip,如果有多塊網卡,需要指定,
否則啟動報錯
6. client_addr:客戶端接口綁定的地址,默認是‘0.0.0.0’;
7. bootstrap_expect:集群預期的server個數,這里我們有3臺server,設置為3;不能和bootstrap參數一同使用。這里需要說明下:bootstrap_expect指定的個數代表了server加入到集群之后,集群中的機器必須=>3的情況才開始選舉server-leader,而如果配置bootstrap的節點,則啟動的時候默認自己為leader。
8. retry_join:重新加入集群
9. retry_interval:重試時間
10. rejoin_after_leave:在離開集群之后才重試加入
11. skip_leave_on_interrupt :在啟動后,是否ctrl+C優雅退出,我們是容器模式,所以不用管,直接true就好了。
額外配置說明(可有可無)
1. start_join:這個參數是在啟動的時候選擇加入到哪個集群,但是官方推薦retry_join取代他,因為效果更好。
2. enable_syslog:啟用則consul的日志會寫進系統的syslog里,但是如果是在windows上配置改參數就會報錯。
3. enable_script_checks:是否啟用監控檢測腳本,這里沒有對consul集群做監控,略。
默認端口說明
1. 8300:consul agent服務relplaction、rpc(client-server)
2. 8301:lan gossip
3. 8302:wan gossip
4. 8500:http api及UI端口
5. 8600:DNS服務端口
?
啟動consul-server
docker run -d \ --net=host \ --name consul \ -v /opt/platform/consul/config:/consul/config \ -v /opt/platform/consul/data:/consul/data \ consul agentweb訪問
瀏覽器訪問http://172.16.150.25:8500/ui
只要是server端開啟了UI,任何一個server都能訪問web界面
?
安裝consul-client
創建calico配置文件:
mkdir -p /opt/platform/consul/config/ /opt/platform/consul/data vim /opt/platform/consul/config/client.json {"datacenter": "xxx-test-consul","data_dir": "/consul/data","server": false,"ui": false,"bind_addr": "172.16.5.45","client_addr": "0.0.0.0","bootstrap_expect": 0,"retry_join": ["172.16.150.25","172.16.150.26","172.16.150.27"],"retry_interval": "10s","rejoin_after_leave": true,"skip_leave_on_interrupt": true }這里client不需要開啟UI及server,所以均為false,以及bootstrap_expect設為0不參與leader節點競爭。
啟動consul-client
docker run -d \ --net=host \ --name consul \ -v /opt/platform/consul/config:/consul/config \ -v /opt/platform/consul/data:/consul/data \ consul agent
查看節點身份
docker exec consul consul info
問題解決:
通過瀏覽器訪問http://172.29.150.202:8500/ui 發現某個node下已經刪除的容器IP還存在,需要找到對應的node刪除/opt/platform/consul/data下所有數據, 重啟consul-client
?
轉載于:https://www.cnblogs.com/cjsblogs/p/9146492.html
總結
- 上一篇: java-number2
- 下一篇: Codeforces 785 D.Ant