Consul入門


簡介

為什么要用consul,這里就不詳細介紹了,本文重點是Consul的搭建和使用過程。

Consul搭建

參考文獻:http://tonybai.com/2015/07/06/implement-distributed-services-registery-and-discovery-by-consul/

  1. 下載consul和consul UI

  官方地址:https://www.consul.io/,就一個consul執行文件

  2.  在consul執行文件的目錄下打開命令

  3.  創建server方式

  consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n1 -bind=你的ip -dc=dc1

  

  相關配置信息說明

    a.  –server指定創建服務端

    b. –boostrap-expect 關於服務leader投票等相關的level設定

    c. –data-dir相關信息的文件路徑,不指定的話,就在consul目錄下生成

    d. –node節點名稱

    e. –bind綁定的你服務器的IP

    f. –dc數據中心名稱

    更多的配置信息說明,請參考官方內容,地址:https://www.consul.io/docs/agent/options.html

  4.  創建client方式

  如上,只是刪掉了-server

  consul agent  -data-dir /tmp/consul -node=n3 -bind=你的ip  -dc=dc1

  5.  以配置文件形式創建

  命令后面加 -config-file=./conf

  consul agent  -data-dir /tmp/consul -node=n3 -bind=你的ip  -dc=dc1 -config-file=./conf

  ./conf目錄下包含json格式的配置信息,將配置的設置都存放在該文件下,可以注冊服務和healthCheck等等

{
  "log_level": "TRACE",
  "encrypt": "7TnJPB4lKtjEcCWWjN6jSA==",
  "service": {
    "name": "web3",
    "tags": ["master"],
    "address": "127.0.0.1",
    "port": 58807,
    "checks": [
      {
        "http": "http://127.0.0.1:60143/healthcheck",
        "interval": "10s"
      }
    ]
  }
}

  6.  搭建服務集群(服務器之間關聯)

  Consul join 其中一個服務器的ip,如: consul join 10.5.133.144

  7.  配置web ui的方式

  Web ui是consul提供的可視化的服務web界面,可以對key/value和服務、節點進行操作

    a. 將下載好的web ui文件內容(包含一個html和一個static文件件)拷貝到consul所在目錄下dist(自己創建)文件夾下

  

    ps. 在原來創建server或者client的時候,需要設置-ui-dir ./dist

    如: consul agent  -data-dir /tmp/consul -node=n3 -bind=你的ip  -dc=dc1 -config-file=./conf -ui-dir ./dist

    b. 打開127.0.0.1:8500 就可以打開界面了。

  8.  常見的consul 命令

  Consul members 查看服務集群的所有服務器

  Consul info 查看當前服務器的狀況

  Consul leave 退出當前服務集群

服務注冊

  1. 通過Consul的服務注冊HTTP API,由服務自身在啟動后調用API注冊自己(可以自定義服務客戶端,調用api進行操作)
  2. 通過在配置文件中定義服務的方式進行注冊
{
  "service": {
    "name": "web3",
    "tags": ["master"],
    "address": "127.0.0.1",
    "port": 10000,
    "checks": [
      {
        "http": "http://localhost:10000/health",
        "interval": "10s"
      }
    ]
  }
}

 

  以上注冊了一個服務名稱為web3地址127.0.0.1端口10000,同時還注冊了一個healthcheck。

服務發現

  1. 通過HTTP API查看存在哪些服務(自定義服務發現客戶端)
  2. 通過consul agent內置的DNS服務(如果是windows系統可以下載dig工具,發現dns服務,ps. Windows系統不建議作為server)

  可以根據服務check的實時狀態動態調整available服務節點列表

  dig @127.0.0.1 -p 8600 web3.service.consul SRV

服務發現HTTP API

http://www.codeweblog.com/%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0%E7%B3%BB%E7%BB%9Fconsul-http-api/  

api 提供增刪改查nodes、services、checks、configuration。

以下consul 的http api,距離,查看所有服務,打開地址如下:127.0.0.1:8500/v1/agent/services,就可以查看所有服務的信息

如上圖,找到了一個名為"web3"的服務。

  1. api包含以下幾部分內容

  kv - Key/Value存儲

  agent - Agent控制

  catalog - 管理nodes和services

  health - 管理健康監測

  session - Session操作

  acl - ACL創建和管理

  event - 用戶Events

  status - Consul系統狀態

  2. agent的api

  和本地agent交互,用於服務注冊和檢查注冊

/v1/agent/checks : 返回本地agent注冊的所有檢查(包括配置文件和HTTP接口)
/v1/agent/services : 返回本地agent注冊的所有 服務
/v1/agent/members : 返回agent在集群的gossip pool中看到的成員
/v1/agent/self : 返回本地agent的配置和成員信息
/v1/agent/join/<address> : 觸發本地agent加入node
/v1/agent/force-leave/<node>>: 強制刪除node
/v1/agent/check/register : 在本地agent增加一個檢查項,使用PUT方法傳輸一個json格式的數據
/v1/agent/check/deregister/<checkID> : 注銷一個本地agent的檢查項
/v1/agent/check/pass/<checkID> : 設置一個本地檢查項的狀態為passing
/v1/agent/check/warn/<checkID> : 設置一個本地檢查項的狀態為warning
/v1/agent/check/fail/<checkID> : 設置一個本地檢查項的狀態為critical
/v1/agent/service/register : 在本地agent增加一個新的服務項,使用PUT方法傳輸一個json格式的數據
/v1/agent/service/deregister/<serviceID> : 注銷一個本地agent的服務項

  3. catalog 的api

  注冊、注銷nodes、services、checks

/v1/catalog/register : Registers a new node, service, or check
/v1/catalog/deregister : Deregisters a node, service, or check
/v1/catalog/datacenters : Lists known datacenters
/v1/catalog/nodes : Lists nodes in a given DC
/v1/catalog/services : Lists services in a given DC
/v1/catalog/service/<service> : Lists the nodes in a given service
/v1/catalog/node/<node> : Lists the services provided by a node

  4. health

  查詢相關的健康信息

/v1/health/node/<node>: 返回node所定義的檢查,可用參數?dc=
/v1/health/checks/<service>: 返回和服務相關聯的檢查,可用參數?dc=
/v1/health/service/<service>: 返回給定datacenter中給定node中service
/v1/health/state/<state>: 返回給定datacenter中指定狀態的服務,state可以是"any", "unknown", "passing", "warning", or "critical",可用參數?dc=
  1. session

增刪改查session信息

/v1/session/create: Creates a new session
/v1/session/destroy/<session>: Destroys a given session
/v1/session/info/<session>: Queries a given session
/v1/session/node/<node>: Lists sessions belonging to a node
/v1/session/list: Lists all the active sessions

  5. acl

  增刪改查acl信息

/v1/acl/create: Creates a new token with policy
/v1/acl/update: Update the policy of a token
/v1/acl/destroy/<id>: Destroys a given token
/v1/acl/info/<id>: Queries the policy of a given token
/v1/acl/clone/<id>: Creates a new token by cloning an existing token
/v1/acl/list: Lists all the active tokens

  6. event

  觸發event和查詢已有event

/v1/event/fire/<name>: 觸發一個新的event,用戶event需要name和其他可選的參數,使用PUT方法
/v1/event/list: 返回agent知道的events

  7. status

  consul 集群的信息

/v1/status/leader : 返回當前集群的Raft leader
/v1/status/peers : 返回當前集群中同事

服務發現客戶端

從nuget上下載consul包,里面包含consul的所有操作。

源碼地址:https://github.com/PlayFab/consuldotnet/

舉例通過key獲取value

1. 在UI添加一個key/value的內容(也可以在程序中添加)

2. 獲取value代碼如下

static void Main(string[] args)
        {
            Console.WriteLine(HelloConsul().GetAwaiter().GetResult());
            Console.ReadLine();
        }
        public static async Task<string> HelloConsul()
        {
            using (var client = new ConsulClient())
            {

                var getPair = await client.KV.Get("hello1");
                return Encoding.UTF8.GetString(getPair.Response.Value, 0,
                    getPair.Response.Value.Length);
            }   
        }

3. 結果如下:

更多服務發現客戶端的內容,后續補上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM