将Consul用作单机微服务注册中心

前言

不太想干前端了,打算试一试别的工作,于是在积累了几次单体服务应用的开发经验之后,我打算试试看适应微服务开发思想,搞一个分布式的完整项目练练手。并且,今天我突然发现,我的博客很久没有更新了,自己丢掉了记录自己实践经验的习惯,总之——先找回习惯,用这篇文章记录一下,我在Ubuntu服务器上安装Consul,并在开发模式下将其用作注册中心的步骤。

什么是 Consul

Consul是一种开源的分布式服务网格和服务发现工具。它由HashiCorp开发并维护,旨在简化构建和管理分布式系统的任务。

Consul提供了以下核心功能:

  1. 服务发现:Consul允许服务在集群中注册和发现,使得服务能够动态地发现和通信。服务可以向Consul注册自己的位置和元数据,并通过Consul的服务目录进行查询。
  2. 健康检查:Consul可以定期对注册的服务进行健康检查,以确保服务正常运行。如果服务出现故障或不可用,Consul可以及时更新服务目录,使其他服务不再将请求发送给故障的服务。
  3. 分布式键值存储:Consul提供了一个分布式的键值存储(Key-Value Store),用于存储和检索配置信息、元数据和其他共享数据。应用程序可以使用Consul的键值存储来进行配置管理和共享状态。
  4. 多数据中心支持:Consul支持多个数据中心之间的联邦和复制,使得可以构建全球性的分布式系统。这意味着不同地理位置的服务可以通过Consul进行发现和通信。
  5. 安全性:Consul提供了一些安全机制,如服务间的加密通信、访问控制列表(ACLs)和基于角色的访问控制,以确保系统的安全性。

通过这些功能,Consul简化了构建、部署和管理分布式系统的复杂性。它在微服务架构、容器化环境和云原生应用程序中得到广泛使用,成为构建可靠和可扩展的分布式系统的关键工具之一。

安装 Consul

我不喜欢用源码本地编译得到软件,遂打算去 Github 下载预编译好的二进制文件。在 Github 发布页得知,最新版本为1.16.0 。然而 Github没有提供二进制文件,遂去hashicorp官网,找到了下载链接。

1
2
wget https://releases.hashicorp.com/consul/1.16.0/consul_1.16.0_linux_amd64.zip
unzip consul_1.16.0_linux_amd64.zip -d <部署目录>

然后将其添加到PATH中:

1
2
echo 'export PATH="/我是/一个/一个/目录啊啊啊:$PATH"' ~/.bashrc
source ~/.bashrc

至此,Consul 的安装已经完成

充当单机微服务注册中心

部署

装完了,该启动了。由于我现在不需要注册服务/健康检查以外的其他功能,也不需要主从集群(笑,没那么多服务器),所以让它单节点部署就行。我没有在防火墙里把对应端口打开,遂用 IPv6。

同时,我也不想为 Consul 编写 dockerfile,并且,我是一个前端程序员,那么就用pm2启动。

1
2
echo "consul agent -dev -client=[::]" >>./start_consul.sh
pm2 start start_consul.sh --name consul

然后,查看状态:

1
pm2 log consul

得到结果

1
2
3
4
5
6
7
[TAILING] Tailing last 15 lines for [consul] process (change the value with --lines option)
/root/.pm2/logs/consul-error.log last 15 lines:
/root/.pm2/logs/consul-out.log last 15 lines:
3|consul | 2023-07-12T11:33:58.758+0800 [INFO] agent.leader: started routine: routine="config entry controllers"
3|consul | 2023-07-12T11:33:58.759+0800 [INFO] agent.leader: stopping routine: routine="virtual IP version check"
3|consul | 2023-07-12T11:33:58.759+0800 [INFO] agent.leader: stopped routine: routine="virtual IP version check"
3|consul | 2023-07-12T11:33:58.759+0800 [DEBUG] agent.server: successfully established leadership: duration=5.84684ms

启动成功。

使用

作为注册中心,它的大部分功能我都不需要,只记录一些最常用的用法。

服务注册

1
PUT /v1/agent/service/register

取消注册

1
PUT /v1/agent/service/deregister/test

获取服务列表

1
GET /v1/agent/services

可以使用filter这个query参数筛选,参考https://developer.hashicorp.com/consul/api-docs/agent/service#filtering