5分钟看懂微服务架构下的Consul 特性及搭建
一、前言
雖然說牛逼的公司都有那么幾個牛逼的運維團隊,牛逼的運維團隊都有著神秘黑科技般敲代碼的姿勢;本人雖然不是一個運維工程師,但是自己比較愛倒騰這些東西,會那么一點點運維姿勢,雖然不算專業,但是還是可以在linux平臺下敲一敲代碼。去年由于自己業余時間搞了一個app項目,當時自己兼任后端開發,又同時兼任運維,經過多少個夜晚才把后端API網關 搭建起來,當時技術選型主要使用微服務架構,說到微服務架構,也就少不了分布式集群,那就更少不了Consul 。今天搭建Consul 服務也是為了自己后面的學習和分享使用(之前在生產環境搭建過,本來可以直接拿來用,只是后面應用停掉了,服務器也就下掉了),故特意把前幾天阿里云活動價買的服務器用起來,準備再次搭建Consul服務,以供后續方便拿來即用。
二、概念
什么是Consul?
Consul是HashiCorp公司推出的開源工具,Consul由Go語言開發,部署起來非常容易,只需要極少的可執行程序和配置文件,具有綠色、輕量級的特點。Consul是分布式的、高可用的、 可橫向擴展的用于實現分布式系統的服務發現與配置。
Consul具有哪些特點?
服務發現(Service Discovery):Consul提供了通過DNS或者HTTP接口的方式來注冊服務和發現服務。一些外部的服務通過Consul很容易的找到它所依賴的服務。
健康檢查(Health Checking):Consul的Client可以提供任意數量的健康檢查,既可以與給定的服務相關聯(“webserver是否返回200 OK”),也可以與本地節點相關聯(“內存利用率是否低于90%”)。操作員可以使用這些信息來監視集群的健康狀況,服務發現組件可以使用這些信息將流量從不健康的主機路由出去。
Key/Value存儲:應用程序可以根據自己的需要使用Consul提供的Key/Value存儲。Consul提供了簡單易用的HTTP接口,結合其他工具可以實現動態配置、功能標記、領袖選舉等等功能。
安全服務通信:Consul可以為服務生成和分發TLS證書,以建立相互的TLS連接。意圖可用于定義允許哪些服務通信。服務分割可以很容易地進行管理,其目的是可以實時更改的,而不是使用復雜的網絡拓撲和靜態防火墻規則。
多數據中心:Consul支持開箱即用的多數據中心. 這意味著用戶不需要擔心需要建立額外的抽象層讓業務擴展到多個區域。
Consul 架構圖
讓我們把這幅圖分解描述。首先,我們可以看到有兩個數據中心,分別標記為“1”和“2”。Consul擁有對多個數據中心的一流支持,這是比較常見的情況。
在每個數據中心中,我們都有客戶機和服務器。預計將有三到五臺服務器。這在故障情況下的可用性和性能之間取得了平衡,因為隨著添加更多的機器,一致性會逐漸變慢。但是,客戶端的數量沒有限制,可以很容易地擴展到數千或數萬。
Consul 實現多個數據中心都依賴于gossip protocol協議。這樣做有幾個目的:首先,不需要使用服務器的地址來配置客戶端;服務發現是自動完成的。其次,健康檢查故障的工作不是放在服務器上,而是分布式的。這使得故障檢測比單純的心跳模式更具可伸縮性。為節點提供故障檢測;如果無法訪問代理,則節點可能經歷了故障。
每個數據中心中的服務器都是一個筏對等集的一部分。這意味著它們一起工作來選舉單個leader,一個被選中的服務器有額外的職責。領導負責處理所有的查詢和事務。事務還必須作為協商一致協議的一部分復制到所有對等方。由于這個需求,當非leader服務器接收到RPC請求時,它會將其轉發給集群leader。
Consul的使用場景
Consul的應用場景包括服務發現、服務隔離、服務配置:
服務發現場景中consul作為注冊中心,服務地址被注冊到consul中以后,可以使用consul提供的dns、http接口查詢,consul支持health check。
服務隔離場景中consul支持以服務為單位設置訪問策略,能同時支持經典的平臺和新興的平臺,支持tls證書分發,service-to-service加密。
服務配置場景中consul提供key-value數據存儲功能,并且能將變動迅速地通知出去,借助Consul可以實現配置共享,需要讀取配置的服務可以從Consul中讀取到準確的配置信息。
Consul可以幫助系統管理者更清晰的了解復雜系統內部的系統架構,運維人員可以將Consul看成一種監控軟件,也可以看成一種資產(資源)管理系統。
比如:docker實例的注冊與配置共享、coreos實例的注冊與配置共享、vitess集群、SaaS應用的配置共享、Consul與confd服務集成,動態生成nginx和haproxy配置文件或者Consul結合nginx構建高可用可擴展的Web服務。
三、安裝
我這里直接安裝Consul 最新版本 1.7.2 官網地址:https://www.consul.io/
1. 下載
我這里進入我的用戶目錄 /home下面進行下載consul安裝壓縮包,命令如下:
wget https://releases.hashicorp.com/consul/1.7.2/consul_1.7.2_linux_amd64.zip下載如下圖:下載完我們通過 ls -a 查看下目錄,如下圖:
2. 解壓
unzip consul_1.7.2_linux_amd64.zip3. 拷貝到usr目錄下
我這里事先在usr目錄中單獨創建了service 文件,可以通過mkdir 命令來完成,不過不一定要安裝在這個目錄下面,我這里就選擇安裝在usr目錄里
mv consul /usr/service4. 查看 安裝是否成功
./consul查看如下圖:已經安裝完成了, 現在我們開始啟動
5. 啟動
這是最關鍵的時候,安裝就是為了啟動 這里我整理了下啟動的相關參數如下:參數參考 可以訪問 https://www.cnblogs.com/sunsky303/p/9209024.html 地址,我這里就簡單的通過使用到的參數進行啟動
-server 表示是server模式-bootstrap-expect=3 表示是集群中有3臺服務器 bootstrap該模式node可以指定自己作為leader ,如果是非leader可不加該參數-data-dir=/tmp/consul 目錄-node=n2 該服務器節點名-bind=127.0.0.1 節點綁定的ip-ui 非必須 webui的路徑 用web來管理consul啟動命令如下(默認是8500端口):
./consul agent -server -bootstrap-expect 1 -data-dir=/tmp/consul -node=n1 -bind=127.0.0.1 -client=0.0.0.0 -ui啟動后結果如下:現在我再來訪問Consul UI管理界面,如下圖:現在Consul 已經完整的啟動成功了,啟動成功是不是想要來試一試,我這里直接使用我之前寫的一篇【.net core】電商平臺升級之微服務架構應用實戰(core-grpc) 文章中寫的Demo 注冊到Consul 中來,看看是否正常注冊,如下圖:好了,正常的注冊進來了,完美,現在已經搭建完成了
Consul 開機自啟動
1. 路徑/usr/lib/systemd/system/,新建一個service命名為,consul.service
[Unit] Description=consul-serviceAfter=network.target[Service] Type=forking PIDFile=/run/consul-service.pid ExecStart=/usr/service/consul.start.sh ExecReload=/bin/kill -SIGHUP $MAINPID ExecStop=/bin/kill -SIGINT $MAINPID[Install] WantedBy=multi-user.target graphical.target上面的ExecStart 是啟動的腳本,我之前把consul 是安裝在/user/service 下面,
2. 創建啟動腳本
我們再service 目錄中創建Consul開機自啟動的腳本文件consul.start.sh
#!/bin/bash /usr/service/consul agent -server -bootstrap-expect 1 -node=127.0.0.1 -data-dir=/usr/service/data/ -log-file=/usr/service/log/consul_log-$(date +%Y-%m-%d--%H-%M) -bind=127.0.0.13. 重新加載配置
systemctl daemon-reload4. 設置開機自啟動
systemctl enable consul.serviceConsul 啟動
systemctl start consulConsul 停止
systemctl stop consul上面創建開機自啟動腳本實踐的時候大家可能會發現 通過systemctl start consul 無法啟動問題,這時候可以通過status 來查詢狀態,命令如下
systemctl status consul查詢創建的自啟動腳本執行過程中出現code=exited, status=203/EXEC異常錯誤信息,這個信息一般有如下幾個原因造成:
錯誤的腳本路徑
腳本的權限無效
服務用戶沒有讀取腳本的權限
腳本未標記為可執行
根據上面三種情況去排查解決,基本上就可以完美解決自啟動腳本無法啟動問題
結束語:這里Consul 介紹及安裝搭建已經完成,Consul也可以搭建集群,大家可以去嘗試自己搭建,比較簡單,后續我會陸續把使用到的各種工具服務搭建起來,以方便后續的文章實戰分享和學習,不過大佬就可以直接跳過...
Consul 參考資料:
1.可以參考Consul的官方網站和其他網站上提供的信息。本文列舉一些可用參考的資源如下:2.Consul官方網站 https://www.consul.io/ 3.Consul Github地址 https://github.com/hashicorp/consul 4.Consul-template Github地址 https://github.com/hashicorp/consul-template 5.Consul官方介紹 https://www.consul.io/intro/index.html 6.Consul 系統架構 https://www.consul.io/docs/internals/architecture.html 7.Consul與其他開源軟件或解決方案的對比 https://www.consul.io/intro/vs/ 8.Dubbo用戶指南 http://dubbo.io/Home-zh.htm 通過此指南可以了解Dubbo是什么,能做什么 9.借助 Consul 和 Docker 支持即插即用的服務發現 (service discovery) http://www.ibm.com/developerworks/cn/cloud/library/cl-plug-and-play-service-discovery-with-consul-and-docker-bluemix/ 10.使用Terraform與Consul自動化現代數據中心 http://www.infoq.com/cn/news/2015/05/hashimoto-modern-datacenter 11.基於swarm+consul+nginx達到HA和auto scaling的架構 http://genchilu-blog.logdown.com/posts/317095-based-on-swarm-and-consul-ha-and-dynamically-extensible-architectures 12.使用Docker、Registrator、Consul、Consul Template和Nginx實現高可擴展的Web框架 http://dockone.io/article/272 13.Consul多數據中心配置 https://www.consul.io/docs/guides/datacenters.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的5分钟看懂微服务架构下的Consul 特性及搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这一次,终于弄懂了协变和逆变
- 下一篇: ASP.NET Core分布式项目实战(