.netcore consul實現服務註冊與發現-單節點部署

一、Consul的基礎介紹


    Consul是HashiCorp公司推出的開源工具,用於實現分佈式系統的服務發現與配置。與其他分佈式服務註冊與發現的方案,比如 Airbnb的SmartStack等相比,Consul的方案更“一站式”,內置了服務註冊與發現框 架、分佈一致性協議實現、健康檢查、Key/Value存儲、多數據中心方案,不再需要依賴其他工具(比如ZooKeeper等),使用起來也較 爲簡單。Consul用Golang實現,因此具有天然可移植性(支持Linux、windows和Mac OS X);安裝包僅包含一個可執行文件,方便部署,與Docker等輕量級容器可無縫配合。

關於Consul的更多介紹,比如優點,這裏就不再贅述了,上網一搜就可以隨處找到了。但是,必須貼一個和其他類似軟件的對比:

二、Consul安裝前的理解


    Consul Agent有兩種運行模式:ServerClient。這裏的Server和Client只是Consul集羣層面的區分,與搭建在Cluster之上的應用服務無關, 以Server模式運行的Consul Agent節點用於維護Consul集羣的狀態,官方建議每個Consul Cluster至少有3個或以上的運行在Server Mode的Agent,Client節點不限。

 

    Consul支持多數據中心,每個數據中心的Consul Cluster都會在運行於Server模式下的Agent節點中選出一個Leader節點,這個選舉過程通過Consul實現的raft協議保證,多個 Server節點上的Consul數據信息是強一致的。處於Client Mode的Consul Agent節點比較簡單,無狀態,僅僅負責將請求轉發給Server Agent節點。

    這裏我們會演示兩種情況的安裝:一種單節點部署,二種集羣部署,由簡單到複雜的部署會更容易理解。

三、Consul正式安裝(單節點)


1、下載Consul

官網地址:https://www.consul.io/downloads.html,下載對應的版本即可

確認好版本好,下載到我們的本機目錄命令:  

> wget -P /opt/consul/  https://releases.hashicorp.com/consul/1.2.2/consul_1.2.2_linux_amd64.zip

2、安裝Consul

#先解壓Consul文件

> unzip consul_1.2.2_linux_amd64.zip

#將Consul文件拷貝到執行目錄

> mv consul /usr/local/bin/

注:如果找不到unzip命令請安裝,命令如:yum install -y unzip

3、測試Consul是否安裝成功

> consul

如下圖表示成功:

4、啓動與配置Consul服務

consul agent -server -ui -bootstrap-expect=1 -data-dir=/tmp/consul  -node=consul-1 -client=0.0.0.0  -bind=172.16.1.174 -datacenter=dc1

如下圖表示啓動成功:

輸入地址查看服務狀態:目前Consul正常運行

進一步查看server的情況與角色狀態

查看各個server的情況

> consul members

查看目前全部的consul的角色狀態:

> consul operator raft list-peers

5、通過配置文件來註冊服務(也可以從consul api 接口添加服務註冊,他會自動持久化

vi /etc/consul/services_config.json

{

    "services":[

        {

            "id": "CLIENT_SERVICE_01",

            "name" : "MVCClientService",

            "tags": [

                "urlprefix-/MVCClientService01"

            ],

            "address": "172.16.1.110",

            "port": 5000,

            "checks": [

                {

                    "name": "clientservice_check",

                    "http": "http://172.16.1.110:5000",

                    "interval": "10s",

                    "timeout": "5s"

                }

            ]

        },

         {

            "id": "CLIENT_SERVICE_02",

            "name" : "APIClientService",

            "tags": [

                "urlprefix-/APIClientService02"

            ],

            "address": "172.16.1.110",

            "port": 5000,

            "checks": [

                {

                    "name": "clientservice_check",

                    "http": "http://172.16.1.110:5001/api/values",

                    "interval": "10s",

                    "timeout": "5s"

                }

            ]

        }

     ]

}

重新運行命令:

consul agent -server -ui -bootstrap-expect=1 -config-dir=/etc/consul -data-dir=/tmp/consul -node=consul-1 -client=0.0.0.0 -bind=172.16.1.174 -datacenter=dc1

注:一定要保證後端服務正常運行:端口5000,5001

運行成功後,如下圖:

以上操作都是在Consul Server 端進行操作的,按官方說明:Consul Server與Consul Client要進行區分,後端的服務應該部署在Consul Client上,他們分別處理自己的事情就好。

下一篇文章已更新:.netcore consul實現服務註冊與發現-集羣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章