windows下搭建Consul集群
Consul 是 HashiCorp 公司的一個(gè)用于實(shí)現(xiàn)分布式系統(tǒng)的服務(wù)發(fā)現(xiàn)與配置工具。Consul內(nèi)置了服務(wù)注冊(cè)與發(fā)現(xiàn)框 架、分布一致性協(xié)議實(shí)現(xiàn)、健康檢查、Key/Value存儲(chǔ)、多數(shù)據(jù)中心方案。由于出現(xiàn)得晚些,Consul具有功能完善、部署簡單、使用方便等特點(diǎn)。
安裝consul:
Consul由Go語言開發(fā),因此也繼承了Go語言跨平臺(tái),易安裝的特點(diǎn)??梢栽谄涔倬W(wǎng)https://www.consul.io/downloads.html下載,各個(gè)平臺(tái)的安裝包都提供了?;窘鈮壕涂梢允褂?。
這里以Windows平臺(tái)為例,我這里下載的是64位版本,解壓后就一個(gè)exe程序,直接以如下命令啟動(dòng):
consul agent-dev
這里有兩個(gè)參數(shù): agent表面啟動(dòng)了一個(gè)服務(wù)實(shí)例, -dev則是以快速開發(fā)的方式啟動(dòng)這個(gè)實(shí)例。這個(gè)參數(shù)包含了大多數(shù)常用的功能,可以比較方便我們演示后面的功能,但它不對(duì)服務(wù)進(jìn)行序列化,因此是不能應(yīng)用于生產(chǎn)環(huán)境的。
啟動(dòng)后,可以看到如下提示信息:
> consul agent –dev ==> Starting Consul agent... ==> Consul agent running! Version: 'v1.4.0' Node ID: 'e59c9885-c8df-608a-f870-dab9078f5c0d' Node name: 'Develop-PC1' Datacenter: 'dc1' (Segment: '<all>') Server: true (Bootstrap: false) Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: 8502, DNS: 8600) Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302) Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false
Web界面:
Consul自帶一個(gè)界面美觀,功能強(qiáng)大的,開箱即用的Web界面。通過該界面我們可以查看所有的服務(wù)以及節(jié)點(diǎn),查看所有的健康監(jiān)測(cè)及其當(dāng)前的狀態(tài),以及讀取和設(shè)置鍵/值數(shù)據(jù)。
該界面被映射到/ui上,和HTTP API使用相同的端口。默認(rèn)就是http://localhost:8500/ui。
如果你要在其它機(jī)器上訪問該Web界面,可以加上-client參數(shù)指定綁定的IP。
consul agent -dev -bind=192.168.2.210 -client 0.0.0.0
靜態(tài)配置服務(wù)
consul支持配置文件的方式靜態(tài)配置服務(wù),首先我們定義一個(gè)json格式的配置文件:
{ "service": { "name": "web", "tags": [ "rails" ], "port": 80 } }
配置文件主要指定的是服務(wù)名稱,地址,端口等信息。
然后用-config-dir指定配置文件目錄啟動(dòng)consul,consul會(huì)自動(dòng)加載該目錄下的所有json文件,每個(gè)文件作為一個(gè)靜態(tài)配置服務(wù)。
> consul agent -dev -bind=192.168.0.211 -config-dir ./services
==> Starting Consul agent... ==> Consul agent running! ... 2018/12/05 11:43:23 [DEBUG] agent: Node info in sync 2018/12/05 11:43:23 [DEBUG] agent: Service "web" in sync 2018/12/05 11:43:23 [DEBUG] agent: Node info in sync 2018/12/05 11:43:25 [DEBUG] agent: Skipping remote check "serfHealth" since it is managed automatically 2018/12/05 11:43:25 [DEBUG] agent: Service "web" in sync 2018/12/05 11:43:25 [DEBUG] agent: Node info in sync
從輸出信息中可以看到名為"web"的服務(wù)已經(jīng)同步進(jìn)來。
也可以在web界面上看到該服務(wù):
動(dòng)態(tài)注冊(cè)服務(wù)
除了靜態(tài)配置外,使用的最多的還是服務(wù)主動(dòng)注冊(cè)的方案。consul提供了一系列rest接口使得我們可以方便的注冊(cè)自己的服務(wù)。
創(chuàng)建服務(wù)
接口地址:http://localhost:8500/v1/agent/service/register
操作方式:PUT
{ "ID": "redis1", "Name": "redis", "Tags": [ "primary", "v1" ], "Address": "127.0.0.1", "Port": 8000, "EnableTagOverride": false, "Check": { "DeregisterCriticalServiceAfter": "90m", "Script": "/usr/local/bin/check_redis.py", "HTTP": "http://localhost:5000/health", "Interval": "10s" } }
刪除服務(wù)
接口地址:http://localhost:8500/v1/agent/service/deregister/redis1
操作方式:PUT
查詢指服務(wù)信息
接口地址: http://localhost:8500/v1/catalog/service/web
操作方式: GET
查看服務(wù)的健康狀態(tài)
接口地址: http://localhost:8500/v1/catalog/service/web?passing
操作方式: GET
更多接口
更多API使用可參考:https://www.consul.io/api/index.html
集群搭建
consul的集群拓?fù)浼軜?gòu)如下圖所示:
它主要具有如下兩種狀態(tài)的節(jié)點(diǎn):
Server: 有完整功能的代理,這些功能包括參與Raft選舉,維護(hù)集群狀態(tài),響應(yīng)RPC查詢,與其他數(shù)據(jù)中心交互WAN gossip和轉(zhuǎn)發(fā)查詢給leader或者遠(yuǎn)程數(shù)據(jù)中心。
Client:一個(gè)Client是一個(gè)轉(zhuǎn)發(fā)所有RPC到server的代理。這個(gè)client是相對(duì)無狀態(tài)的。client唯一執(zhí)行的后臺(tái)活動(dòng)是加入LAN gossip池。這有一個(gè)最低的資源開銷并且僅消耗少量的網(wǎng)絡(luò)帶寬。
consul的集群搭建本身涉及的內(nèi)容比較多,具體可參看文章Consul 集群部署。本文這里就介紹一個(gè)最簡單的拓?fù)淝闆r:1server + nclient的場景。
啟動(dòng)Server:
啟動(dòng)Server的指令一般如下:
consul agent -data-dir=./data -node=node0 -bind=192.168.0.211 -datacenter=dc1 -ui -client=0.0.0.0 -server -bootstrap-expect 1
這里用到了不少參數(shù),這里就簡單的介紹下:
-data-dir=./data 必須,指定數(shù)據(jù)文件存儲(chǔ)路徑
-node=node0 必須,指定了節(jié)點(diǎn)的名稱,該名稱在整個(gè)網(wǎng)絡(luò)中必須唯一。
-bind=192.168.0.211 多Ip地址機(jī)器上必須,指定了綁定的Ip地址
-datacenter=dc1 可選,指定了所屬的數(shù)據(jù)中心,默認(rèn)為dc1
-ui 可選,是否啟用web服務(wù)器
-client=0.0.0.0 可選,指定了可以訪問的客戶端范圍,默認(rèn)是127.0.0.1
-server 必須,表明了該節(jié)點(diǎn)是server節(jié)點(diǎn)
-bootstrap-expect 1 可選
有了上述知識(shí)后,在最簡單的場景下,一般可以簡化為如下形式:
consul agent -data-dir ./data -node=node0 -bind=192.168.0.211 -ui -server
啟動(dòng)Client:
啟動(dòng)Client的指令一般如下:
consul agent?-data-dir=./data?-node=node1?-bind=192.168.0.210?-datacenter=dc1?-ui?-client=0.0.0.0?-join?192.168.0.211
同樣,基于前面的介紹,我們也可以把啟動(dòng)客戶端指令簡化如下:
consul agent?-data-dir=./data?-node=node1?-bind=192.168.0.210?-ui?-join?192.168.0.211
相比啟動(dòng)Server的指令,少了一個(gè)-server,表明它是一個(gè)客戶端agent,同是,多了一個(gè)-join 192.168.0.211,表明了它需要連接到那個(gè)server。這個(gè)參數(shù)也可以不配置,通過命令行consul join 192.168.0.211手動(dòng)加入。
啟動(dòng)了client后,就可以通過consul members
指令查看成員了:
> consul members Node Address Status Type Build Protocol DC Segment node0 192.168.0.211:8301 alive server 1.4.0 2 dc1 <all> node1 192.168.0.210:8301 alive client 1.4.0 2 dc1 <default>
也可以通過Http接口查看:
http://localhost:8500/v1/catalog/nodes
[ { "ID": "4314607d-629c-24a0-9e6c-d787efebe8c9", "Node": "node0", "Address": "192.168.0.211", "Datacenter": "dc1", "TaggedAddresses": { "lan": "192.168.0.211", "wan": "192.168.0.211" }, "Meta": { "consul-network-segment": "" }, "CreateIndex": 5, "ModifyIndex": 6 }, { "ID": "0a59426a-1723-6389-8681-0a16b54965e4", "Node": "node1", "Address": "192.168.0.210", "Datacenter": "dc1", "TaggedAddresses": { "lan": "192.168.0.210", "wan": "192.168.0.210" }, "Meta": { "consul-network-segment": "" }, "CreateIndex": 456, "ModifyIndex": 457 } ]
同樣,也可以在web界面查看:
收拾到此這篇關(guān)于windows下搭建Consul集群的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用k8tz解決pod內(nèi)的時(shí)區(qū)問題(坑的解決)
時(shí)區(qū)的不一致,會(huì)帶來很多困擾。即使代碼與時(shí)區(qū)無關(guān),但容器日志與系統(tǒng)日志時(shí)間相關(guān)聯(lián)排查問題也會(huì)讓人頭疼,這篇文章主要介紹了使用k8tz優(yōu)雅的解決pod內(nèi)的時(shí)區(qū)問題,需要的朋友可以參考下2022-10-10玩客云內(nèi)置EMMC存儲(chǔ)刷入Armbian系統(tǒng)(圖文詳解)
Armbian是其他項(xiàng)目可以信賴的單板計(jì)算機(jī)(SBC)的基本操作系統(tǒng)平臺(tái),接下來通過本文給大家介紹玩客云內(nèi)置EMMC存儲(chǔ)刷入Armbian系統(tǒng),需要的朋友可以參考下2022-05-05云原生技術(shù)kubernetes調(diào)度單位pod的使用詳解
這篇文章主要介紹了云原生技術(shù)kubernetes調(diào)度單位pod的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用K8S,感興趣的朋友可以了解下2021-03-03CentOS 7.9 升級(jí)內(nèi)核 kernel-ml-5.6.14版本的方法
這篇文章主要介紹了CentOS 7.9 升級(jí)內(nèi)核 kernel-ml-5.6.14版本,默認(rèn)內(nèi)核版本為3.10.0,現(xiàn)升級(jí)到 5.6.14 版本,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10Spark實(shí)現(xiàn)K-Means算法代碼示例
這篇文章主要介紹了Spark實(shí)現(xiàn)K-Means算法代碼示例,簡單介紹了K-Means算法及其原理,然后通過具體實(shí)例向大家展示了用spark實(shí)現(xiàn)K-Means算法,需要的朋友可以參考下。2017-10-10Rainbond應(yīng)用分享與發(fā)布官方文檔說明
這篇文章主要為大家介紹了Rainbond應(yīng)用分享與發(fā)布的官方文檔說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04虛擬化技術(shù)概述 虛擬機(jī)安裝與管理手冊(cè)
這篇文章主要為大家詳細(xì)介紹了虛擬化技術(shù)原理,如何安裝與管理虛擬機(jī)virt-manger,virsh等,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10