consul是google開源的一個使用go語言開發的服務發現、配置管理中心服務。內置了服務註冊與發現框 架、分佈一致性協議實現、健康檢查、Key/Value存儲、多數據中心方案,再也不須要依賴其餘工具(好比ZooKeeper等)。服務部署簡單,只有一個可運行的二進制的包。每一個節點都須要運行agent,他有兩種運行模式server和client。每一個數據中心官方建議須要3或5個server節點以保證數據安全,同時保證server-leader的選舉可以正確的進行。node
1.安裝linux
mkdir -p /opt/consul cd /opt/consul/ wget https://releases.hashicorp.com/consul/1.2.0/consul_1.2.0_linux_amd64.zip unzip consul_1.2.0_linux_amd64.zip
2.啓動consulgit
mkdir -p /opt/consul/config mkdir -p /opt/consul/data #啓用Gossip加密方式,只須要在啓動Agent時設置加密密鑰。經過encrypt參數設置密鑰:設置的值是包含密鑰的配置文件。 $ ./consul keygen xZpdVT6DUTzQrYyf2B2uCQ== vim /opt/consul/config/config.json { "advertise_addr": "192.168.2.161", "bind_addr": "192.168.2.161", "client_addr": "0.0.0.0", "domain": "consul", "bootstrap_expect": 3, "server": true, "datacenter": "dc1", "data_dir": "/opt/consul/data", "encrypt": "xZpdVT6DUTzQrYyf2B2uCQ==", "ui": true, "enable_syslog": true, "performance": { "raft_multiplier": 1 }, "dns_config": { "allow_stale": true, "max_stale": "15s" }, "retry_join": [ "192.168.2.162", "192.168.2.163" ], "retry_interval": "10s", "skip_leave_on_interrupt": true, "leave_on_terminate": false, "rejoin_after_leave": true } #啓動節點1(server模式) nohup ./consul agent -config-dir /opt/consul/config -node node1 &
命令 | 解釋 | 示例 |
---|---|---|
agent | 運行一個consul agent | consul agent -dev |
join | 將agent加入到consul集羣 | consul join IP |
members | 列出consul cluster集羣中的members | consul members |
leave | 將節點移除所在集羣 | consul leave |
consul agent 命令的經常使用選項github
-data-dir 做用:指定agent儲存狀態的數據目錄,這是全部agent都必須的,對於server尤爲重要,由於他們必須持久化集羣的狀態算法
-config-dir 做用:指定service的配置文件和檢查定義所在的位置,一般會指定爲」某一個路徑/consul.d」(一般狀況下,.d表示一系列配置文件存放的目錄)json
-config-file 做用:指定一個要裝載的配置文件,該選項能夠配置屢次,進而配置多個配置文件(後邊的會合並前邊的,相同的值覆蓋)bootstrap
-dev 做用:建立一個開發環境下的server節點,該參數配置下,不會有任何持久化操做,即不會有任何數據寫入到磁盤,這種模式不能用於生產環境(由於第二條)vim
-bootstrap-expect 做用:該命令通知consul server咱們如今準備加入的server節點個數,該參數是爲了延遲日誌複製的啓動直到咱們指定數量的server節點成功的加入後啓動。瀏覽器
-node 做用:指定節點在集羣中的名稱,該名稱在集羣中必須是惟一的(默認採用機器的host),推薦:直接採用機器的IP安全
-bind 做用:指明節點的IP地址,有時候不指定綁定IP,會報Failed to get advertise address: Multiple private IPs found. Please configure one. 的異常
-server 做用:指定節點爲server,每一個數據中心(DC)的server數推薦至少爲1,至多爲5,全部的server都採用raft一致性算法來確保事務的一致性和線性化,事務修改了集羣的狀態,且集羣的狀態保存在每一臺server上保證可用性,server也是與其餘DC交互的門面(gateway)
-client 做用:指定節點爲client,指定客戶端接口的綁定地址,包括:HTTP、DNS、RPC,默認是127.0.0.1,只容許迴環接口訪問,若不指定爲-server,其實就是-client
-join 做用:將節點加入到集羣
-datacenter 做用:指定機器加入到哪個數據中心中 -ui 做用:使得客戶端能夠直接經過url訪問服務端的consul ui
#啓動節點2-3(server模式) #更改advertise_addr、bind_addr、retry_join 參數,啓動節點2-3 nohup ./consul agent -config-dir /opt/consul/config -node node2 & nohup ./consul agent -config-dir /opt/consul/config -node node3 &
打開瀏覽器,輸入http://192.168.2.161:8500/ui/
#查看下集羣的狀態 [root@node1 consul]# ./consul members Node Address Status Type Build Protocol DC Segment node1 192.168.2.161:8301 alive server 1.2.0 2 dc1 <all> node2 192.168.2.162:8301 alive server 1.2.0 2 dc1 <all> node3 192.168.2.163:8301 alive server 1.2.0 2 dc1 <all>
2.安裝git2consul
原生的Consul不支持Git來作,須要藉助Consul 社區提供的另一個工程git2consul
配置以下:
{ "version":"1.0", "local_store": "本地倉庫備份地址", "logger":{ "name":"git2consul", "streams":[ { "level":"trace", "type":"rotating-file", "path":"生成日誌路徑/git2consul.log" } ] }, "repos":[ { "name":"pig-config", "url":"遠程倉庫地址", "include_branch_name" : true, //分支信息是否包含到請求中,建議使用 "branches":[ "dev" ], "hooks":[ { "type" : "polling", //更新策略定時刷新的 "interval" : "1" //1分鐘 } ] } ] }
個人配置:
{ "version": "1.0", "local_store": "/opt/git2consul/git2consul_cache", "logger" : { "name" : "git2consul", "streams" : [{ "level": "trace", "stream": "process.stdout" }, { "level": "debug", "type": "rotating-file", "path": "/opt/git2consul/logs/git2consul.log" }] }, "repos" : [{ "name" : "woqu_configuration", "url" : "https://github.com/zhangorrin/woqu.git", "branches" : ["master"], "hooks": [{ "type" : "polling", "interval" : "1" }] }] }
啓動時候指定上邊的腳本:
./git2consul --config-file git2consul.json
啓動後能夠在key/value中看到githup上的配置文件
至此,consul服務端安裝已經完成,後續在實際項目中講解如何使用consul client