SpringCloud consul安裝和使用,Windows Consul安裝和使用,Java consul服務中心安裝和使用
================================
©Copyright 蕃薯耀 2021-03-05
https://www.cnblogs.com/fanshuyao/
一、Consul下載下傳位址:
https://www.consul.io/downloads
Windows:consul_1.9.3_windows_amd64.zip
Linux:consul_1.9.3_linux_amd64.zip
二、Windows Consul安裝和使用
1、以windows為例,解壓 consul_1.9.3_windows_amd64.zip 到 D:\0soft\consul_1.9.3_windows_amd64,檔案夾有一個exe檔案(consul.exe)
2、配置環境變量,将Consul的路徑:D:\0soft\consul_1.9.3_windows_amd64配置到系統PATH路徑中
3、打開cmd指令視窗,在視窗輸入:consul -v或者consul --version檢視版本
consul -v
C:\Users\xxx> consul -v
Consul v1.9.3
Revision f55da9306
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)
4、打開cmd指令視窗,在視窗輸入:consul agent -dev啟動consul(開發模式)
consul agent -dev
5、consul的預設端口是8500,通過浏覽器打開:http://localhost:8500通路Consul管理背景
http://localhost:8500
6、通過cmd指令視窗檢視members
consul members
C:\Users\liqiongy>consul members
Node Address Status Type Build Protocol DC Segment
xxx-xxxxx-10 127.0.0.1:8301 alive server 1.9.3 2 dc1 <all>
7、關閉Consul指令:
consul leave
8、重載Consul指令:
consul reload
三、Consul在微服務項目中使用
1、在pom檔案中引入Consul依賴(服務提供者和消費者都需要引入)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
2、服務提供者,在application.properties檔案配置Consul
server.port=8631
spring.application.name=SPRINGCLOUD-CONSUL-CLIENT-SERVICE
#consul服務通路的位址:127.0.0.1或者localhost
spring.cloud.consul.host=127.0.0.1
#consul服務通路的端口,預設端口就是8500
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=${spring.application.name}
#設定執行個體id,預設是項目的名稱
spring.cloud.consul.discovery.instance-id=consul-8631
#顯示用戶端的ip位址
spring.cloud.consul.discovery.prefer-ip-address=true
3、服務提供者,服務請求
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConsulClientController {
@Value("${server.port}")
private String serverPort;
@RequestMapping("/consul")
public Result consul() {
return Result.ok("consul端口:" + serverPort);
}
}
4、服務消費者,在application.properties檔案配置Consul
server.port=8632
spring.application.name=SPRINGCLOUD-CONSUL-WEB
#consul服務通路的位址
spring.cloud.consul.host=127.0.0.1
#consul服務通路的端口
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=${spring.application.name}
5、服務消費者,服務請求
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class ConsulController {
//服務提供者的服務位址
private String serviceUrl = "http://SPRINGCLOUD-CONSUL-CLIENT-SERVICE";
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value="/getConsul", produces = MediaType.APPLICATION_JSON_VALUE)
public Result getConsul() {
Result result = restTemplate.getForObject(serviceUrl + "/consul", Result.class);
return result;
}
}
6、RestTemplate配置(服務消費者端)
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestConfig {
//@LoadBalanced注解實作負載均衡
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
四、測試服務消費者請求服務提供者的服務
浏覽器打開服務消費的請求位址:
http://127.0.0.1:8632/getConsul
請求傳回的結果:
{
"result": true,
"timestamp": "2021-03-04 15:14:17",
"msg": "操作成功。",
"datas": "consul端口:8631"
}
五、Linux yum安裝Consul,Linux yum安裝consul
1、安裝yum-utils
yum install -y yum-utils
2、配置consul的下載下傳倉庫:
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
必須要有此步,不然直接安裝會因為在預設倉庫找不到,導緻安裝失敗:
[root@host-14 bin]# yum -y install consul
已加載插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
沒有可用軟體包 consul。
錯誤:無須任何處理
3、Linux yum安裝consul(consul-1.9.3-1.x86_64.rpm),106M,下載下傳很慢
sudo yum -y install consul
安裝成功:
Running transaction
正在安裝 : consul-1.9.3-1.x86_64
驗證中 : consul-1.9.3-1.x86_64
已安裝:
consul.x86_64 0:1.9.3-1
完畢!
4、安裝完成後,consul檢查版本号
consul -v
[root@host-14 bin]# consul -v
5、Linux啟動consul:
最簡單的啟動(背景管理不能通路,沒啟動ui):
consul agent -dev
啟動2(建議使用這個啟動。0.0.0.0表示不綁定用戶端IP位址,不然隻能使用特定的IP通路):
consul agent -dev -ui -node=consul-dev-14 -client=0.0.0.0
啟動3:綁定client位址(Linux不能使用consul kv put my/aa aa指令插入資料,因為127.0.0.1通路不了)
mkdir -p /java/data/consul
consul agent -dev -ui -data-dir=/java/data/consul -node=consul-dev-14 -client=192.168.170.14
consul綁定client位址後出錯:dial tcp 127.0.0.1:8500: connect: connection refused
[root@host-14 ~]# consul kv put xxx/config/num 1
Error! Failed writing data: Put "http://127.0.0.1:8500/v1/kv/xxx/config/num": dial tcp 127.0.0.1:8500: connect: connection refused
常用參數:
-http-port 預設是8500
-client:用戶端模式,http dns,預設127.0.0.1,回環令牌網址
-data-dir:狀态資料存儲檔案夾,所有的節點都需要。檔案夾位置需要不收consul節點重新開機影響,必須能夠使用作業系統檔案鎖,unix-based系統下,檔案夾檔案權限為0600,注意做好賬戶權限控制,
-dev:開發模式,去掉所有持久化選項,記憶體伺服器模式。
-ui:内置web ui界面。
-bind:綁定的内部通訊位址,預設0.0.0.0,即,所有的本地位址,會将第一個可用的ip位址散播到叢集中,如果有多個可用的ipv4,則consul啟動報錯。[::]ipv6,TCP UDP協定,相同的端口。防火牆配置。
-bootstrap:啟動模式,此模式下,節點可以選舉自己為leader,一個資料中心隻能有一個此模式啟動的節點。機群啟動後,新啟動的節點不建議使用這種模式。
-bootstrap-expect:設定一個資料中心需要的服務節點數,可以不設定,設定的數字必須和實際的服務節點數比對。consul會等待直到資料中心下的服務節點滿足設定才會啟動叢集服務。初始化leader選舉,不能和bootstr- ap混用。必須配合-server配置。
6、測試consul啟動,打開Linux新視窗,輸入請求指令
curl localhost:8500/v1/catalog/nodes
或者浏覽器打開(注意:背景管理不相容IE浏覽器,請使用Chrome浏覽器打開):
http://192.168.170.14:8500/
或者檢視程序:
ps -ef | grep consul
傳回結果:
[root@host-14 ~]# curl localhost:8500/v1/catalog/nodes
[
{
"ID": "914be537-f613-27a4-497a-2e7f9706f50c",
"Node": "host-14",
"Address": "127.0.0.1",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "127.0.0.1",
"lan_ipv4": "127.0.0.1",
"wan": "127.0.0.1",
"wan_ipv4": "127.0.0.1"
},
"Meta": {
"consul-network-segment": ""
"CreateIndex": 11,
"ModifyIndex": 13
}
]
7、關閉Consul
consul leave
或者
kill -9 PID(Consul程序ID)
成功關閉結果:
[root@host-14 ~]# consul leave
Graceful leave complete
六、Consul使用KV指令
1、增加資料
consul kv put xxx/config/num 1
響應結果:
Success! Data written to: xxx/config/num
curl 192.168.170.14:8500/v1/kv/xxx/aa
覆寫之前的鍵增加(即修改):
consul kv put xxx/config/num 20
增加字元串資料
consul kv put xxx/config/str thisIsString
2、查詢資料
consul kv get xxx/config/num
查詢資料(詳情)
consul kv get -detailed xxx/config/num
查詢所有鍵資料
consul kv get -recurse
3、删除資料
consul kv delete xxx/config/str
删除所有以xxx開頭的鍵資料:
consul kv delete -recurse xxx
4、修改已經存在的資料,就是使用新資料覆寫之前的鍵
consul kv put xxx/config/num 30
七、Consul常用option選項指令
-bootstrap:啟動模式,此模式下,節點可以選舉自己為leader,一個資料中心隻能有一個此模式啟動的節點。機群啟動後,新啟動的節點不建議使用這種模式。
-bootstrap-expect:設定一個資料中心需要的服務節點數,可以不設定,設定的數字必須和實際的服務節點數比對。consul會等待直到資料中心下的服務節點滿足設定才會啟動叢集服務。初始化leader選舉,不能和bootstr- ap混用。必須配合-server配置。
-bind:綁定的内部通訊位址,預設0.0.0.0,即,所有的本地位址,會将第一個可用的ip位址散播到叢集中,如果有多個可用的ipv4,則consul啟動報錯。[::]ipv6,TCP UDP協定,相同的端口。防火牆配置。
-client:用戶端模式,http dns,預設127.0.0.1,回環令牌網址
-config-file:配置檔案位置
-config-dir:配置檔案所在檔案夾,會加載其下所有配置檔案,.json或者.hcl檔案,加載順序為字母表順序;可用配置多個此配置,進而加載多個檔案夾,子檔案夾的配置不會被加載。
-config-format:配置檔案格式,配置了,則加載相應個是的檔案。不配置,則consul自動識别。
-data-dir:狀态資料存儲檔案夾,所有的節點都需要。檔案夾位置需要不收consul節點重新開機影響,必須能夠使用作業系統檔案鎖,unix-based系統下,檔案夾檔案權限為0600,注意做好賬戶權限控制,
-datacenter:資料中心名稱,預設dc1,一個資料中心的所有節點都必須在一個LAN中。
-dev:開發模式,去掉所有持久化選項,記憶體伺服器模式。
-disable-host-node-id:不使用host資訊生成node ID,适用于同一台伺服器部署多個執行個體用于測試的情況。随機生成nodeID
-dns-port:v7.0以後,自定義dns 端口,覆寫預設8600
-enable-script-checks:是否允許使用腳本進行健康檢查,預設false,最好配置enable acl
-encrypt:consul網絡通訊加密key,base64加密,16比特;consul keygen産生。叢集中的每個執行個體必須提供相同的,隻需提供一次,然後會儲存到資料檔案。重新開機自動加載。consul節點啟動後提供,會被忽略。
-hcl:添加hcl格式配置,和已有的配置合并。可以使用多個此配置。
-http-port:http api端口,覆寫預設的8500。适用于雲環境指定。
-log-file:日志記錄檔案,如果沒有提供檔案名,則預設Consul-時間戳.log
-log-level:日志級别,預設info,包含:trace,debug,info,warn,err;consul monitor監控
-log-rotate-bytes:新日志檔案生成大小門檻值。
-log-rotate-rotation:新日志生成時間門檻值
-join:需要加入的其它節點位址,可以多次使用,加入多個節點。
-retry-join:會進行加入重試,适用于認定加入節點最終會正常的情況。ipv4,ipv6,dns
-retry-interval:上述,重試間隔,預設30s
-retry-max:重試次數,預設0,無限次重試
-join-wan, -retry-join-wan, -retry-interval-wan, -retry-max-wan
-node:節點名稱,預設主機名
-node-id:節點ID,
-pid-file:consul 存儲 pid 的檔案位置,用于主動發信号。如停止節點,重載配置等。
-protocol:使用的協定,更新時使用。consul -v檢視協定版本
-raft-protocol:使用raft協定版本,預設3
-raft-snapshot-threshold:raft執行快照,送出次數門檻值。一般不需要設定,io密集型應用可以調高。避免所有的節點同一時間快照。此值過大,會造成相應日志檔案變大,節點重新開機恢複會耗費更長時間。1.1.0後,預設1- 6384,之前8192.
-raft-snapshot-interval:執行快照間隔,影響類似上個配置,1.1.0後預設30s,之前5s。
-rejoin:節點會嘗試重新加入叢集。
-server:服務端節點模式。
-server-port:服務端RPC端口,v1.2.2後提供。
-non-voting-server:服務節點不參與選舉,接受日志複制,用于橫向擴充,服務查詢請求。(類比zookeeper 觀察者節點)
-syslog:linux OSX系統,配置日志輸出到系統日志。
-ui:内置web ui界面。
-ui-dir:web ui 資源檔案夾,使用此配置,則不需也不能使用再-ui配置
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcucDM0MTN5MTM20CO0ATNwcjM2EjNwEDMwIDMy0CMzMTM4ATMvwVMwAjMwIzLcBzMzEDOwEzLcd2bsJ2Lc12bj5ycn9Gbi52YugTMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
(時間寶貴,分享不易,捐贈回饋,^_^)
今天越懶,明天要做的事越多。