一、簡介
Consul([ˈkɒnsl],康搜)是注冊中心,服務提供者、服務消費者等都要注冊到Consul中,這樣就可以實現服務提供者、服務消費者的隔離。除了Consul之外,還有Eureka、Zookeeper等類似軟件。consul是存儲服務名稱與IP和端口對應關系的服務器
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協議管理成員關系、廣播消息到整個集群,他有兩個gossip pool(LAN pool和WAN pool),LAN pool是同一個數據中心內部通信的,WAN pool是多個數據中心通信的,LAN pool有多個,WAN pool只有一個。
二、安裝
consul官網:https://www.consul.io/
1)下載
wget https://releases.hashicorp.com/consul/1.3.0/consul_1.3.0_linux_amd64.zip
2)解壓
unzip consul_1.3.0_linux_amd64.zip
3)拷貝到usr目錄下
mv consul /usr
4)查看是否安裝成功
./consul

5)啟動
./consul agent -dev -ui -node=consul-dev -client=192.168.*.** #虛擬機ip
6) 后在瀏覽器中輸 http://192.168*.**:8500 就可以訪問了
二、創建集群
1)准備四台服務器
192.168.45.98 server
192.168.45.99 server
192.168.45.147 server
192.168.45.203 client
2)配置節點
Agent 節點
./consul agent -dev -ui -data-dir=data -node=n4 -bind=192.168.45.203 -client=0.0.0.0 #如果在后面加 "&"符號則是后天運行
Server節點
./consul agent -server -bootstrap-expect 3 -data-dir=data -node=n1 -bind=192.168.45.99 -client=0.0.0.0 #如果在后面加 "&"符號則是后天運行
./consul agent -server -bootstrap-expect 3 -data-dir=data -node=n2 -bind=192.168.45.203 -client=0.0.0.0 #如果在后面加 "&"符號則是后天運行
./consul agent -server -bootstrap-expect 3 -data-dir=data -node=n3 -bind=192.168.45.147 -client=0.0.0.0 #如果在后面加 "&"符號則是后天運行
-server 表示是server模式 -bootstrap-expect=3 表示是集群中有3台服務器 bootstrap該模式node可以指定自己作為leader ,如果是非leader可不加該參數 -data-dir=/tmp/consul 目錄 -node=n2 該服務器節點名 -bind=192.168.45.99 節點綁定的ip -ui 非必須 webui的路徑 用web來管理consul
3)加入集群,集群已 192.168.45.147位leader。如果加入失敗,則開啟端口
./consul join 192.168.45.98 ./consul join 192.168.45.99 ./consul join 192.168.45.203
4)查看集群
./consul members

5)查看三台服務器打印的數據,說明配置成功
consul: New leader elected: n4
6)在瀏覽器中查看

7)查看集群信息
./consul operator raft list-peers
8)清理集群信息,直接殺死線程
