[

](https://www.jianshu.com/u/2277646bb6df)

Consul是什么

Consul是一个服务网格(微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控)解决方案,它是一个一个分布式的,高度可用的系统,而且开发使用都很简便。它提供了一个功能齐全的控制平面,主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。

安装Consul

这里提供两台Centos:local12,local13
安装方式:

  1. [root@local13 ~]# wget https://releases.hashicorp.com/consul/1.2.2/consul_1.2.2_linux_amd64.zip
  2. [root@local13 ~]# unzip consul_1.2.2_linux_amd64.zip
  3. [root@local13 ~]# ./consul
  4. Usage: consul [--version] [--help] <command> [<args>]
  5. # local12同上

运行Agent

安装Consul后必须运行Agent,可以选择服务器或客户端模式。每个数据中心至少有一个服务器(推荐3~5个服务器集群)。

简单起见,先启动一个Agent的开发模式:

  1. # Agent的开发模式
  2. [root@local13 ~]# ./consul agent -dev
  3. ==> Starting Consul agent...
  4. ==> Consul agent running!
  5. # 查看集群成员
  6. [root@local13 ~]# ./consul members
  7. Node Address Status Type Build Protocol DC Segment
  8. local13 127.0.0.1:8301 alive server 1.2.2 2 dc1 <all>
  9. # 使用 HTTP API 查看
  10. [root@local13 ~]# curl localhost:8500/v1/catalog/nodes
  11. [
  12. {
  13. "ID": "796b14fe-1332-4aa0-d96f-8f287a4ccc7e",
  14. "Node": "local13",
  15. "Address": "127.0.0.1",
  16. "Datacenter": "dc1",
  17. "TaggedAddresses": {
  18. "lan": "127.0.0.1",
  19. "wan": "127.0.0.1"
  20. },
  21. "Meta": {
  22. "consul-network-segment": ""
  23. },
  24. "CreateIndex": 9,
  25. "ModifyIndex": 10
  26. }
  27. ]
  28. # 还可以使用 DNS 接口来查询节点(默认端口:8600)
  29. [root@local13 ~]# yum install bind-utils
  30. [root@local13 ~]# dig @127.0.0.1 -p 8600 local13.node.consul
  31. ...
  32. ;; QUESTION SECTION:
  33. ;local13.node.consul. IN A
  34. ;; ANSWER SECTION:
  35. local13.node.consul. 0 IN A 127.0.0.1
  36. ...

注册服务

1、定义一个服务

  1. [root@local13 ~]# mkdir /etc/consul.d
  2. [root@local13 ~]# echo '{"service": {"name": "web", "tags": ["rails"], "port": 80}}' | sudo tee /etc/consul.d/web.json
  3. [root@local13 ~]# ./consul agent -dev -config-dir=/etc/consul.d

2、查询一个服务

  1. # 使用 DNS API
  2. [root@local13 ~]# dig @127.0.0.1 -p 8600 web.service.consul
  3. ...
  4. ;; QUESTION SECTION:
  5. ;web.service.consul. IN A
  6. ;; ANSWER SECTION:
  7. web.service.consul. 0 IN A 127.0.0.1
  8. # 使用 DNS API 查找 SRV 记录
  9. [root@local13 ~]# dig @127.0.0.1 -p 8600 web.service.consul SRV
  10. ...
  11. ;; QUESTION SECTION:
  12. ;web.service.consul. IN SRV
  13. ;; ANSWER SECTION:
  14. web.service.consul. 0 IN SRV 1 1 80 local13.node.dc1.consul.
  15. ;; ADDITIONAL SECTION:
  16. local13.node.dc1.consul. 0 IN A 127.0.0.1
  17. ...
  18. # 使用 HTTP API 查询
  19. [root@local13 ~]# curl http://localhost:8500/v1/catalog/service/web
  20. # 健康检查
  21. [root@local13 ~]# curl 'http://localhost:8500/v1/health/service/web?passing'

Consul集群

1、创建node1,consul server

  1. [root@local12 ~]
  2. -data-dir=/tmp/consul \
  3. -node=agent-one -bind=192.168.56.112 \
  4. -enable-script-checks=true -config-dir=/etc/consul.d \
  5. -client 0.0.0.0 -ui

2、创建node2,consul client

  1. [root@local13 ~]# ./consul agent -data-dir=/tmp/consul \
  2. -node=agent-two \
  3. -bind=192.168.56.113 -enable-script-checks=true \
  4. -config-dir=/etc/consul.d \
  5. -ui

3、加入集群

  1. [root@local13 ~]# ./consul join 192.168.56.112
  2. Successfully joined cluster by contacting 1 nodes.
  3. [root@local13 ~]# ./consul members
  4. Node Address Status Type Build Protocol DC Segment
  5. agent-one 192.168.1.13:8301 alive server 1.2.2 2 dc1 <all>
  6. agent-two 192.168.1.12:8301 alive client 1.2.2 2 dc1 <default>

4、查询节点

  1. [root@local13 ~]# dig @127.0.0.1 -p 8600 agent-two.node.consul
  2. ...
  3. ;; QUESTION SECTION:
  4. ;agent-two.node.consul. IN A
  5. ;; ANSWER SECTION:
  6. agent-two.node.consul. 0 IN A 192.168.1.12

KV数据

类似Redis,一般也就用来做服务配置。
简单了解下命令就好:

  1. consul kv put redis/config/minconns 1
  2. consul kv put redis/config/minconns 2 # 更新
  3. consul kv get redis/config/minconns
  4. consul kv delete redis/config/minconns
  5. consul kv delete -recurse redis # 批量删除

WEB UI

访问下:http://192.168.56.112:8500/ui

Consul 快速入门 - 图1

WEB UI

栏目解析:就是上面操作生成的一些东西

1、services:放置服务
2、nodes:放置consul节点
3、key/value:放置一些配置信息
4、dc1:配置数据中心