杜龙少(sdvdxl)

consul初识

Word count: 1,284 / Reading time: 6 min
2018/08/14 Share

consul 简介

consul 是一个支持多数据中心加密数据交换KV存储健康检查的服务发现组件官方对比了其他类似的组件比如知名的ZooKeeperetcdEureka甚至是刚刚推出不久的Istio总的来讲consul有如下优势

  • 支持多数据中心
  • 强一致性
  • 支持kv存储
  • 支持健康检查可以通过自定义脚本
  • 支持多节点raft选举
  • 支持http(s)方式注册发现服务
  • 支持DNS方式发现服务并提供负载均衡高级用法
  • 支持外部服务注册
  • 测试部署容易仅一个2进制文件 go 编写支持跨平台同时支持serverclient模式还支持开发dev模式

当然其缺点也是有的当前我认为的最大的缺点是负载均衡和故障自动转移上简单来说一个agent节点如果宕机那么其上面的 所有服务都会消失在整个集群中不可见并且如果要将集群中的服务注销必须通过注册的时候的agentAPI进行反注册才可以成功注销否则虽然提示是200成功实际上却没有任何效果

下载和安装

官方提供了各平台的二进制文件的下载链接可以下载对应平台的文件进行安装这个是最简单的方式当然也可以通过源码进行编译不过这个需要Go语言的支持下面的操作均在CentOS764上进行

这里我们下载Linux 64位平台版本为1.2.22进制文件并放到/opt/consul目录下文件名为consul_1.2.2_linux_amd64.zip切换目录并执行解压命令 cd /opt/consul && unzip consul_1.2.2_linux_amd64.zip 会得到一个consul文件

运行

输入 ./consul即可得到如下提示则说明已经准备好组件了

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

Usage: consul [--version] [--help] <command> [<args>]

Available commands are:
agent Runs a Consul agent
catalog Interact with the catalog
connect Interact with Consul Connect
event Fire a new event
exec Executes a command on Consul nodes
force-leave Forces a member of the cluster to enter the "left" state
info Provides debugging information for operators.
intention Interact with Connect service intentions
join Tell Consul agent to join cluster
keygen Generates a new encryption key
keyring Manages gossip layer encryption keys
kv Interact with the key-value store
leave Gracefully leaves the Consul cluster and shuts down
lock Execute a command holding a lock
maint Controls node or service maintenance mode
members Lists the members of a Consul cluster
monitor Stream logs from a Consul agent
operator Provides cluster-level tools for Consul operators
reload Triggers the agent to reload configuration files
rtt Estimates network round trip time between nodes
snapshot Saves, restores and inspects snapshots of Consul server state
validate Validate config files/directories
version Prints the Consul version
watch Watch for changes in Consul

启动服务

consul 提供了3中部署方式

  • dev 开发模式
  • 单机模式
  • 集群模式

作为入门呢我们先使用开发dev模式注意的是改种方式不建议用于生产环境因为该模式下所有的数据都不会进行持久化都是在内存中的该节点停止那么配置的所有数据都会消失不见但这却不失为一种快速体验功能的方式

执行启动命令

1
./consul agent -dev

会有类似以下信息输出

1
2
3
4
5
6
7
8
9
10
11
12
==> Starting Consul agent...
==> Consul agent running!
Version: 'v1.2.2'
Node ID: '016013da-7e3c-3757-8412-4199d46e025a'
Node name: 'todu'
Datacenter: 'dc1' (Segment: '<all>')
Server: true (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, DNS: 8600)
Cluster Addr: 127.0.0.1 (LAN: 8301, WAN: 8302)
Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false

==> Log data will now stream in as it occurs:

这样就是已经成功启动了一个dev模式的agent

KV 存储

执行 ./consul kv put a 'test value' 可以在consul的存储kv系统中设置一个keya值为test value的配置
执行 ./consul kv get a 可以读取我们刚才设置的这个值

服务注册

通过agentapi可以直接像该agent注册服务比如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
curl --request PUT \
--url http://localhost:8500/v1/agent/service/register \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '{
"ID": "myweb1",
"Name": "myweb",
"Tags": [
"primary",
"v1"
],
"Address": "127.0.0.1",
"Port": 8080,
"Meta": {
"redis_version": "4.0"
},
"EnableTagOverride": false
}'

这样就像这个节点注册了一个名为mywebidmyweb1的服务

通过 ./consul catalog services可以看到列表中出现了我们的服务名字

1
2
consul
myweb

web页面

上面是通过命令简单介绍了consul的两个基本特性 kv存储服务管理有个比较简单的方式就是可以通过web页面操作kv值和查看services浏览器打开 http://localhost:8500即可默认会跳转到services的页面如图所示
consul-ui-start
点击Nodes链接即可查看node节点简易信息
consul-ui-nodes
点击Key/Value即可查看kv存储
consul-ui-kv
点击key还可以进行编辑
consul-ui-kv-edit

通过以上简单介绍相比我们已经对consul有了初步认识进阶操作和高级特性会通过后面的文章进行介绍

CATALOG
  1. 1. consul 简介
  2. 2. 下载和安装
  3. 3. 运行
  4. 4. 启动服务
    1. 4.1. KV 存储
    2. 4.2. 服务注册
    3. 4.3. web 页面