Web基礎配置篇(十五): Consul單機、集羣的安裝使用及作爲配置中心使用

Web基礎配置篇(十五): Consul單機、集羣的安裝使用及作爲配置中心使用

一、概述

Consul是一個服務網格(微服務間的 TCP/IP,負責服務之間的網絡調用、限流、熔斷和監控)解決方案,它是一個一個分佈式的,高度可用的系統,而且開發使用都很簡便。它提供了一個功能齊全的控制平面,主要特點是:服務發現、健康檢查、鍵值存儲、安全服務通信、多數據中心。

consul之所以廣爲JAVA開發知,要歸功於SpringCloud,SpringCloud可以基於Consul實現服務註冊發現,也可以基於Consul實現配置中心動態配置功能。

《SpringCloud技術指南系列(四)服務註冊發現之Consul服務註冊》《SpringCloud技術指南系列(八)配置管理之Consul配置中心》一文中,已經介紹了SpringCloud如何使用consul做註冊中心和配置中心。

本篇重點介紹下consul的安裝、配置、集羣建立方式,並介紹Consul的接口,教你如何脫離SpringCloud使用consul。

首發地址:

  品茗IT: https://www.pomit.cn/p/2288575659993601

如果大家正在尋找一個java的學習環境,或者在開發中遇到困難,可以加入我們的java學習圈,點擊即可加入,共同學習,節約學習時間,減少很多在學習中遇到的難題。

二、準備工作

2.1 Consul下載

在這裏插入圖片描述

2.2 解壓

  • windows解壓後就一個consul.exe文件;
  • Linux解壓後就一個consul文件;
  • 文件可以直接運行。

三、Consul單機

3.1 開發者模式

運行命令:

consul agent -dev

然後就啓動了,就這麼簡單,可以通過http://127.0.0.1:8500來訪問這個consul的ui界面。

但是,這種模式一般是自己開發的時候用的,因爲它不帶記憶功能,也不能與其他consul互通。

3.3 Client模式

Consul 的 Client模式,就是客戶端模式。是 Consul 節點的一種模式,這種模式下,所有註冊到當前節點的服務會被轉發到
Server,本身是不持久化這些信息。

Client模式不能脫離Server單獨運行,因此無法實現單機模式

3.3 Server模式

Consul 的 Server 模式,表明這個 Consul 是個 Server ,這種模式下,功能和 Client
都一樣,唯一不同的是,它會把所有的信息持久化的本地,這樣遇到故障,信息是可以被保留的。

運行命令:

consul agent -server -bootstrap-expect 1 -data-dir /soft/data/consul -node=consulServer1 -bind=10.247.63.210 -ui -rejoin -config-dir=/soft/config/consul/ -client 0.0.0.0

然後就啓動了,就這麼簡單。

可以通過http://10.247.63.210:8500來訪問這個consul的ui界面。

  • -server : 定義agent運行在server模式
  • -bootstrap-expect :在一個datacenter中期望提供的server節點數目,當該值提供的時候,consul一直等到達到指定sever數目的時候纔會引導整個集羣,該標記不能和bootstrap共用
  • -bind:該地址用來在集羣內部的通訊,集羣內的所有節點到地址都必須是可達的,默認是0.0.0.0
  • -node:節點在集羣中的名稱,在一個集羣中必須是唯一的,默認是該節點的主機名
  • -ui: 開啓consul的界面;
  • -rejoin:使consul忽略先前的離開,在再次啓動後仍舊嘗試加入集羣中。
  • -config-dir:配置文件目錄,裏面所有以.json結尾的文件都會被加載
  • -client:consul服務偵聽地址,這個地址提供HTTP、DNS、RPC等服務,默認是127.0.0.1所以不對外提供服務,如果你要對外提供服務改成0.0.0.0

Server模式可以單獨運行,實現單機模式,bootstrap-expect爲1即可。

四、Consul集羣

集羣和單機的啓動方式是一樣的,只需要指定並接入到其他Server即可。

4.1 集羣Server

我這裏使用3臺機器作爲集羣測試,兩臺在linux上,一臺在windows上。

Server1:

consul agent -server -bootstrap-expect 3 -data-dir /soft/data/consul -node=consulServer1 -bind=10.247.63.210 -ui -rejoin -config-dir=/soft/config/consul/ -client 0.0.0.0

Server2:

consul agent -server -bootstrap-expect 3 -data-dir /soft/data/consul -node=consulServer2 -bind=10.247.62.76 -ui -rejoin -config-dir=/soft/config/consul/ -client 0.0.0.0 -join 10.247.63.210

Server3:

consul.exe agent -server -bootstrap-expect 3 -data-dir E:/data/consul/data/ -node=consulServer3 -bind=10.247.62.91 -ui -rejoin -config-dir=E:/data/consul/config/ -client 0.0.0.0 -join 10.247.63.210

注意:上面命令在windows上不能使用powershell啓動consul,用cmd就可以。

在這裏插入圖片描述

我停掉windows的consul:

在這裏插入圖片描述

如上圖所示,用consul members命令查看consul集羣狀態,有三個consul。

上圖中failed的那個consul是我停掉的windows的consul。停掉以後,另外兩個server仍然不斷重連:

在這裏插入圖片描述

4.1 集羣Client

將停掉的server改爲client加入到集羣中去。

consul.exe agent -data-dir E:/data/consul/data/ -node=cc1 -bind=10.247.62.91 -ui -config-dir=E:/data/consul/config/ -client 0.0.0.0 -join 10.247.63.210

在這裏插入圖片描述

可以看到,停掉的server還是failed。另外,其他兩個server仍然不斷重連停掉的server3.

client的ui打開後是啥也沒有的:

在這裏插入圖片描述

server的consul打開之後是能看到service等內容的。

五、Consul的API列表

consul的主要接口是RESTful HTTP API,該API可以用來增刪查改nodes、services、checks、configguration。所有的endpoints主要分爲以下類別:

kv - Key/Value存儲
agent - Agent控制
catalog - 管理nodes和services
health - 管理健康監測
session - Session操作
acl - ACL創建和管理
event - 用戶Events
status - Consul系統狀態

5.1 agent

agent endpoints用來和本地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的服務項

5.2 catalog

catalog endpoints用來註冊/註銷nodes、services、checks:

/v1/catalog/register : 註冊一個node, service, check
/v1/catalog/deregister : 註銷node, service, check
/v1/catalog/datacenters : 列出所有dc
/v1/catalog/nodes : 列出某節點的dc
/v1/catalog/services : 列出某dc的服務
/v1/catalog/service/<service> : 列出某服務的所有節點
/v1/catalog/node/<node> : 列出某節點的所有服務

5.3 health

health endpoints用來查詢健康狀況相關信息,該功能從catalog中單獨分離出來:

/v1/healt/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"

5.4 session

session endpoints用來create、update、destory、query sessions.

/v1/session/create: 創建一個session
/v1/session/destroy/<session>: 銷燬session
/v1/session/info/<session>: 查詢session
/v1/session/node/<node>: 列出某節點所有session
/v1/session/list:  列出所有session

5.5 event

event endpoints用來fire新的events、查詢已有的events:

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

5.6 status

status endpoints用來或者consul 集羣的信息:

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

六、配置中心

打開consul的界面,如:http://10.247.63.210:8500

  • 點擊 Key/Value, 新建config目錄(新建目錄和新建文件是一樣的,只不過新建目錄後面要加/);

  • 然後在config目錄下新建consulConfig目錄(上面的spring.cloud.consul.config.defaultContext)。;

  • 然後在consulConfig目錄下新建data文件,寫入yaml配置。

在這裏插入圖片描述

比如這裏寫了個welcom.value配置。

welcom:
   value: vbvcbbb

注意:直接在網頁上寫配置,可能會有問題,建議在yaml編輯器裏寫好了粘貼過來。

七、脫離SpringCloud使用服務註冊發現

在我的開源項目consul-proxyhttps://www.pomit.cn/consul-proxy 中,就脫離了SpringCloud使用服務註冊發現。

7.1 依賴

可以使用ecwid.consul對consul進行操作,其實就是對上面的consul的api列表進行操作。

<dependency>
	<groupId>com.ecwid.consul</groupId>
	<artifactId>consul-api</artifactId>
	<version>${consul.version}</version>
</dependency>

7.2 服務註冊

首先,組裝服務信息,主要是地址、端口、名稱信息,然後使用ConsulClient的agentServiceRegister註冊相應的服務即可。

ConsulClient client = new ConsulClient(consulProperties.getHost(), consulProperties.getPort());
NewService service = new NewService();
service.setId(consulProperties.getInstanceId());
service.setAddress(consulProperties.getHostname());
service.setName(consulProperties.getApplicationName());
service.setTags(createTags());

service.setPort(consulProperties.getApplicationPort());
setCheck(service);
try {
	client.agentServiceRegister(service);
	log.info("服務已註冊:{}", service);
} catch (ConsulException e) {
	log.warn("Error registering service with consul: " + service, e);

	log.info("重新提交註冊:{}", service);
	client.agentServiceRegister(service);
}

7.3 服務發現

使用ConsulClient的getHealthServices獲取健康服務即可。

ConsulClient client = new ConsulClient(consulProperties.getHost(), consulProperties.getPort());
Response<List<HealthService>> catalogServiceList = client.getHealthServices(serviceId, true, null);
List<HealthService> list = catalogServiceList.getValue();

這裏只是查出來所有可用的節點,如果需要使用負載均衡服務調用,需要另外的組件進行配合,比如ribbon。

品茗IT-博客專題:https://www.pomit.cn/lecture.html彙總了Spring專題Springboot專題SpringCloud專題web基礎配置專題。

快速構建項目

Spring項目快速開發工具:

一鍵快速構建Spring項目工具

一鍵快速構建SpringBoot項目工具

一鍵快速構建SpringCloud項目工具

一站式Springboot項目生成

Mysql一鍵生成Mybatis註解Mapper

Spring組件化構建

SpringBoot組件化構建

SpringCloud服務化構建

喜歡這篇文章麼,喜歡就加入我們一起討論Java Web吧!
品茗IT交流羣

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