Consul是什么
Consul是一個服務(wù)網(wǎng)格(微服務(wù)間的 TCP/IP吱七,負(fù)責(zé)服務(wù)之間的網(wǎng)絡(luò)調(diào)用、限流羡洛、熔斷和監(jiān)控)解決方案挂脑,它是一個一個分布式的,高度可用的系統(tǒng)欲侮,而且開發(fā)使用都很簡便崭闲。它提供了一個功能齊全的控制平面,主要特點(diǎn)是:服務(wù)發(fā)現(xiàn)威蕉、健康檢查刁俭、鍵值存儲、安全服務(wù)通信韧涨、多數(shù)據(jù)中心牍戚。
安裝Consul
這里提供兩臺Centos:local12,local13
安裝方式:
[root@local13 ~]# wget https://releases.hashicorp.com/consul/1.2.2/consul_1.2.2_linux_amd64.zip
[root@local13 ~]# unzip consul_1.2.2_linux_amd64.zip
[root@local13 ~]# ./consul
Usage: consul [--version] [--help] <command> [<args>]
# local12同上
運(yùn)行Agent
安裝Consul后必須運(yùn)行Agent氓奈,可以選擇服務(wù)器或客戶端模式翘魄。每個數(shù)據(jù)中心至少有一個服務(wù)器(推薦3~5個服務(wù)器集群)。
簡單起見舀奶,先啟動一個Agent的開發(fā)模式:
# Agent的開發(fā)模式
[root@local13 ~]# ./consul agent -dev
==> Starting Consul agent...
==> Consul agent running!
# 查看集群成員
[root@local13 ~]# ./consul members
Node Address Status Type Build Protocol DC Segment
local13 127.0.0.1:8301 alive server 1.2.2 2 dc1 <all>
# 使用 HTTP API 查看
[root@local13 ~]# curl localhost:8500/v1/catalog/nodes
[
{
"ID": "796b14fe-1332-4aa0-d96f-8f287a4ccc7e",
"Node": "local13",
"Address": "127.0.0.1",
"Datacenter": "dc1",
"TaggedAddresses": {
"lan": "127.0.0.1",
"wan": "127.0.0.1"
},
"Meta": {
"consul-network-segment": ""
},
"CreateIndex": 9,
"ModifyIndex": 10
}
]
# 還可以使用 DNS 接口來查詢節(jié)點(diǎn)(默認(rèn)端口:8600)
[root@local13 ~]# yum install bind-utils
[root@local13 ~]# dig @127.0.0.1 -p 8600 local13.node.consul
...
;; QUESTION SECTION:
;local13.node.consul. IN A
;; ANSWER SECTION:
local13.node.consul. 0 IN A 127.0.0.1
...
注冊服務(wù)
1暑竟、定義一個服務(wù)
[root@local13 ~]# mkdir /etc/consul.d
[root@local13 ~]# echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' | sudo tee /etc/consul.d/web.json
[root@local13 ~]# ./consul agent -dev -config-dir=/etc/consul.d
2、查詢一個服務(wù)
# 使用 DNS API
[root@local13 ~]# dig @127.0.0.1 -p 8600 web.service.consul
...
;; QUESTION SECTION:
;web.service.consul. IN A
;; ANSWER SECTION:
web.service.consul. 0 IN A 127.0.0.1
# 使用 DNS API 查找 SRV 記錄
[root@local13 ~]# dig @127.0.0.1 -p 8600 web.service.consul SRV
...
;; QUESTION SECTION:
;web.service.consul. IN SRV
;; ANSWER SECTION:
web.service.consul. 0 IN SRV 1 1 80 local13.node.dc1.consul.
;; ADDITIONAL SECTION:
local13.node.dc1.consul. 0 IN A 127.0.0.1
...
# 使用 HTTP API 查詢
[root@local13 ~]# curl http://localhost:8500/v1/catalog/service/web
# 健康檢查
[root@local13 ~]# curl 'http://localhost:8500/v1/health/service/web?passing'
Consul集群
1育勺、創(chuàng)建node1但荤,consul server
[root@local12 ~]# ./consul agent -server -bootstrap-expect=1 \
-data-dir=/tmp/consul \
-node=agent-one -bind=192.168.56.112 \
-enable-script-checks=true -config-dir=/etc/consul.d \
-client 0.0.0.0 -ui
# -node:節(jié)點(diǎn)的名稱
# -bind:綁定的一個地址,用于節(jié)點(diǎn)之間通信的地址涧至,可以是內(nèi)外網(wǎng)腹躁,必須是可以訪問到的地址
# -server:這個就是表示這個節(jié)點(diǎn)是個SERVER
# -bootstrap-expect:這個就是表示期望提供的SERVER節(jié)點(diǎn)數(shù)目,數(shù)目一達(dá)到南蓬,它就會被激活纺非,然后就是LEADER了
# -dc:指明數(shù)據(jù)中心的名字
# -client 0.0.0.0 -ui:啟動UI(為了方便后續(xù)的UI訪問)
2、創(chuàng)建node2,consul client
[root@local13 ~]# ./consul agent -data-dir=/tmp/consul \
-node=agent-two \
-bind=192.168.56.113 -enable-script-checks=true \
-config-dir=/etc/consul.d \
-ui
3赘方、加入集群
[root@local13 ~]# ./consul join 192.168.56.112
Successfully joined cluster by contacting 1 nodes.
[root@local13 ~]# ./consul members
Node Address Status Type Build Protocol DC Segment
agent-one 192.168.1.13:8301 alive server 1.2.2 2 dc1 <all>
agent-two 192.168.1.12:8301 alive client 1.2.2 2 dc1 <default>
4烧颖、查詢節(jié)點(diǎn)
[root@local13 ~]# dig @127.0.0.1 -p 8600 agent-two.node.consul
...
;; QUESTION SECTION:
;agent-two.node.consul. IN A
;; ANSWER SECTION:
agent-two.node.consul. 0 IN A 192.168.1.12
KV數(shù)據(jù)
類似Redis,一般也就用來做服務(wù)配置窄陡。
簡單了解下命令就好:
consul kv put redis/config/minconns 1
consul kv put redis/config/minconns 2 # 更新
consul kv get redis/config/minconns
consul kv delete redis/config/minconns
consul kv delete -recurse redis # 批量刪除
WEB UI
訪問下:http://192.168.56.112:8500/ui
欄目解析:就是上面操作生成的一些東西
1炕淮、services:放置服務(wù)
2、nodes:放置consul節(jié)點(diǎn)
3跳夭、key/value:放置一些配置信息
4涂圆、dc1:配置數(shù)據(jù)中心