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