认识consul
consul官方地址
什么consul
Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。
Consul由Go语言开发,部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点
Consul是分布式的、高可用的、 可横向扩展的
与之类似的产品有以下几种:
consul 架构
consul 是 server / agent 的架构
- Consul servers:负责数据的存储和复制,servers之间选举出一个leader,虽然consul一个也可以工作,但是一般需要提供3至5个servers组成的servers集群
- Consul agent:所有提供服务的节点都需要运行Consul agent(使用和查询服务的不需要),这个Agent主要负责服务本身和这个服务所在节点的健康检查
consul的组件
- 服务发现(Service Discovery)
- 健康检查(Health Checking)
- KV存储(Key/Value Store)
- 多数据中心(Multi Datacenter)
安装及配置
由于部署非常简单,我这里直接使用docker-compose直接部署了,如果不了解docker 和docker-compose的请移步到Docker Docs
1
2
3
4
5
|
# 准备目录
mkdir consul
cd consul
mkdir node1 node2 node3 client
# 这里准备部署三个server节点一个client节点
|
docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
version: '3'
services:
consul_node1:
container_name: consul_node1
image: consul:1.6.2
volumes:
- /etc/localtime:/etc/localtime:ro
- ./node1:/consul/data:rw
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
command: consul agent -data-dir=/consul/data -datacenter="prometheus" -bootstrap -server -node=consul_node1 -enable-script-checks
consul_node2:
container_name: consul_node2
image: consul:1.6.2
volumes:
- /etc/localtime:/etc/localtime:ro
- ./node2:/consul/data:rw
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
links:
- consul_node1
depends_on:
- consul_node1
command: consul agent -data-dir=/consul/data -datacenter="prometheus" -server -node=consul_node2 -retry-join=consul_node1 -retry-interval=30s -enable-script-checks
consul_node3:
container_name: consul_node3
image: consul:1.6.2
volumes:
- /etc/localtime:/etc/localtime:ro
- ./node3:/consul/data:rw
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
links:
- consul_node1
depends_on:
- consul_node1
command: consul agent -data-dir=/consul/data -datacenter="prometheus" -server -node=consul_node3 -retry-join=consul_node1 -retry-interval=30s -enable-script-checks
consul_client:
container_name: consul_client
image: consul:1.6.2
volumes:
- /etc/localtime:/etc/localtime:ro
- ./client:/consul/data:rw
ports:
- "8500:8500"
- "8600:8600"
- "8300:8300"
- "8301:8301"
- "8302:8302"
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
links:
- consul_node1
depends_on:
- consul_node1
command: consul agent -data-dir=/consul/data -datacenter="prometheus" -node=consul_client -retry-join=consul_node1 -retry-interval=30s -ui -bind="0.0.0.0" -client="0.0.0.0" -enable-script-checks
|
执行安装部署命令:
1
2
|
docker-compose up # 此命令在前台输出 如果想要在后台运行需要加 -d 指令 我们可以先在前台输出,如果没有问题再使用后台指令运行
# docker-compose up -d 后台运行docker-compose
|
完成后,可以使用以下指令
1
2
3
4
5
6
7
8
9
|
# 进入一个节点
docker exec -it consul_node1 sh
# 执行查看节点成员信息
consul members
Node Address Status Type Build Protocol DC Segment
consul_node1 192.168.80.2:8301 alive server 1.6.2 2 prometheus <all>
consul_node2 192.168.80.4:8301 alive server 1.6.2 2 prometheus <all>
consul_node3 192.168.80.5:8301 alive server 1.6.2 2 prometheus <all>
consul_client 192.168.80.3:8301 alive client 1.6.2 2 prometheus <default>
|
查看ui, 在浏览器中输入http://you_ip:8500/

consul 点进去就可以看到consul的节点信息

consul 还有很多指令可到consul的官方站点学习
consul的使用方式
服务发现Service Discovery
Consul serivces 文档
注册地址为: http://you_ip:8500/v1/catalog/register
注册时需要传入以下json格式数据
1
2
3
4
5
6
7
8
9
10
11
12
|
{
"ID": "6df55a0a-f8b5-4301-a3e3-ab41e537af5d", # 一个uuid
"Address": "you ip ", # 节点的ip地址
"Node": "you node name ", # 要保证节点名称唯一
"Service": { # 要注册的服务信息
"Service": "mysql", # 服务的名称
"ID": "serviceid", # 服务的id 保证唯一
"tags": ["mysql", "master" ],
"port": 3306,
"address": "service的ip"
}
}
|
uuid 可以使用以下命令生成
1
|
cat /proc/sys/kernel/random/uuid
|
注册命令如下:
1
2
|
ajson=`cat a.json`
curl -s -m 5 -X PUT -d "$ajson" http://consul_ip:8500/v1/catalog/deregister
|
完成后在页面上就会出现mysql信息


此时并没有node check 和serice check 要想增加check 在启动时需要添加 -enable-script-checks
选项 docker-compose.yml中已启用了
参考consul check
删除注册的节点命令如下:
1
|
curl -X PUT -d '{"Node": "node name"}' http://consul_ip:8500/v1/catalog/deregister
|
节点有多个服务时需要删除其中一个服务时命令如下 :
1
|
curl -X PUT -d '{"Node": "node name","Service": {"ID": "y"}}' http://consul_ip:8500/v1/catalog/deregister
|
KV存储
配置中心
未完待续