Consul 原理和使用简介
說明
本文介紹了一個服務發(fā)現(xiàn)和配置共享的軟件,簡單介紹了 Consul 的原理和使用, 一篇小文拋磚引玉,希望能吸引感興趣的童鞋一起探討研究。
Consul 是什么
Consul 是一個支持多數(shù)據(jù)中心分布式高可用的服務發(fā)現(xiàn)和配置共享的服務軟件,由 HashiCorp 公司用 Go 語言開發(fā), 基于 Mozilla Public License 2.0 的協(xié)議進行開源. Consul 支持健康檢查,并允許 HTTP 和 DNS 協(xié)議調用 API 存儲鍵值對.
命令行超級好用的虛擬機管理軟件 vgrant 也是 HashiCorp 公司開發(fā)的產(chǎn)品.
一致性協(xié)議采用 Raft 算法,用來保證服務的高可用. 使用 GOSSIP 協(xié)議管理成員和廣播消息, 并且支持 ACL 訪問控制.
Consul 的使用場景
- docker 實例的注冊與配置共享
- coreos 實例的注冊與配置共享
- vitess 集群
- SaaS 應用的配置共享
- 與 confd 服務集成,動態(tài)生成 nginx 和 haproxy 配置文件
Consul 的優(yōu)勢
- 使用 Raft 算法來保證一致性, 比復雜的 Paxos 算法更直接. 相比較而言, zookeeper 采用的是 Paxos, 而 etcd 使用的則是 Raft.
- 支持多數(shù)據(jù)中心,內外網(wǎng)的服務采用不同的端口進行監(jiān)聽。 多數(shù)據(jù)中心集群可以避免單數(shù)據(jù)中心的單點故障,而其部署則需要考慮網(wǎng)絡延遲, 分片等情況等. zookeeper 和 etcd 均不提供多數(shù)據(jù)中心功能的支持.
- 支持健康檢查. etcd 不提供此功能.
- 支持 http 和 dns 協(xié)議接口. zookeeper 的集成較為復雜, etcd 只支持 http 協(xié)議.
- 官方提供web管理界面, etcd 無此功能.
綜合比較, Consul 作為服務注冊和配置管理的新星, 比較值得關注和研究.
Consul 的角色
client: 客戶端, 無狀態(tài), 將 HTTP 和 DNS 接口請求轉發(fā)給局域網(wǎng)內的服務端集群.
server: 服務端, 保存配置信息, 高可用集群, 在局域網(wǎng)內與本地客戶端通訊, 通過廣域網(wǎng)與其他數(shù)據(jù)中心通訊. 每個數(shù)據(jù)中心的 server 數(shù)量推薦為 3 個或是 5 個.
?
<img src="https://www.consul.io/assets/images/consul-arch-b2478674.png" alt="consul-arch" class="bubble-markdown-image" target="_blank" rel="nofollow" "="" style="text-size-adjust: none; -webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); outline: 0px; max-width: 99%; height: auto; vertical-align: top; border: 1px solid rgb(222, 232, 239); margin: 10px 0px;">
?
安裝 Consul
mac os x:
brew cask?install?consul
Linux 64bit:
wget https://dl.bintray.com/mitchellh/consul/0.4.1_linux_amd64.zip unzip 0.4.1_linux_amd64.zip sudo mv consul /bin其他系統(tǒng)的安裝步驟,請參考官網(wǎng)文檔.
初體驗
啟動:
consul agent -server -bootstrap-expect?1?-data-dir /tmp/consul -node Litao-MacBook-Pro -dc sz-1
查看成員:
consul members
查看節(jié)點:
curl?127.0.0.1:8500/v1/catalog/nodes
使用DNS協(xié)議查看節(jié)點信息:
dig @127.0.0.1?-p?8600?Litao-MacBook-Pro.node.consul
注冊服務
注冊兩個 Mysql 服務的實例, 數(shù)據(jù)中心在 sz-1, 端口都是 3306. 具體為以下命令:
curl -X PUT -d '{"Datacenter": "sz-1", "Node": "mysql-1", "Address": \ "mysql-1.node.consul","Service": {"Service": "mysql", "tags": ["master","v1"], \ "Port": 3306}}' http://127.0.0.1:8500/v1/catalog/register curl -X PUT -d '{"Datacenter": "sz-1", "Node": "mysql-2", "Address": \ "mysql-2.node.consul","Service": {"Service": "mysql", "tags": ["slave","v1"],\ "Port": 3306}}' http://127.0.0.1:8500/v1/catalog/registercurl?http://127.0.0.1:8500/v1/catalog/service/mysql
[{"Address": "mysql-1.node.consul","Node": "mysql-1","ServiceID": "mysql","ServiceName": "mysql","ServicePort": 3306,"ServiceTags": ["master","v1"]},{"Address": "mysql-2.node.consul","Node": "mysql-2","ServiceID": "mysql","ServiceName": "mysql","ServicePort": 3306,"ServiceTags": ["slave","v1"]} ]dig @127.0.0.1?-p?8600?mysql.service.consul SRV
; <<>> DiG 9.10.0-P2 <<>> @127.0.0.1 -p 8600 mysql.service.consul SRV ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12821 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2 ;; WARNING: recursion requested but not available;; QUESTION SECTION: ;mysql.service.consul. IN SRV;; ANSWER SECTION: mysql.service.consul. 0 IN SRV 1 1 3306 mysql-2.node.sz-1.consul. mysql.service.consul. 0 IN SRV 1 1 3306 mysql-1.node.sz-1.consul.;; ADDITIONAL SECTION: mysql-2.node.sz-1.consul. 0 IN CNAME mysql-2.node.consul. mysql-1.node.sz-1.consul. 0 IN CNAME mysql-1.node.consul.;; Query time: 0 msec ;; SERVER: 127.0.0.1#8600(127.0.0.1) ;; WHEN: Tue Dec 02 16:42:38 CST 2014 ;; MSG SIZE rcvd: 280參考鏈接
https://www.consul.io
http://txt.fliglio.com/2014/05/encapsulated-services-with-consul-and-confd/
總結
以上是生活随笔為你收集整理的Consul 原理和使用简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入SpringBoot:自定义Endp
- 下一篇: zuul重连配置