将Consul用作单机微服务注册中心
前言
不太想干前端了,打算试一试别的工作,于是在积累了几次单体服务应用的开发经验之后,我打算试试看适应微服务开发思想,搞一个分布式的完整项目练练手。并且,今天我突然发现,我的博客很久没有更新了,自己丢掉了记录自己实践经验的习惯,总之——先找回习惯,用这篇文章记录一下,我在Ubuntu服务器上安装Consul,并在开发模式下将其用作注册中心的步骤。
什么是 Consul
Consul是一种开源的分布式服务网格和服务发现工具。它由HashiCorp开发并维护,旨在简化构建和管理分布式系统的任务。
Consul提供了以下核心功能:
- 服务发现:Consul允许服务在集群中注册和发现,使得服务能够动态地发现和通信。服务可以向Consul注册自己的位置和元数据,并通过Consul的服务目录进行查询。
- 健康检查:Consul可以定期对注册的服务进行健康检查,以确保服务正常运行。如果服务出现故障或不可用,Consul可以及时更新服务目录,使其他服务不再将请求发送给故障的服务。
- 分布式键值存储:Consul提供了一个分布式的键值存储(Key-Value Store),用于存储和检索配置信息、元数据和其他共享数据。应用程序可以使用Consul的键值存储来进行配置管理和共享状态。
- 多数据中心支持:Consul支持多个数据中心之间的联邦和复制,使得可以构建全球性的分布式系统。这意味着不同地理位置的服务可以通过Consul进行发现和通信。
- 安全性:Consul提供了一些安全机制,如服务间的加密通信、访问控制列表(ACLs)和基于角色的访问控制,以确保系统的安全性。
通过这些功能,Consul简化了构建、部署和管理分布式系统的复杂性。它在微服务架构、容器化环境和云原生应用程序中得到广泛使用,成为构建可靠和可扩展的分布式系统的关键工具之一。
安装 Consul
我不喜欢用源码本地编译得到软件,遂打算去 Github 下载预编译好的二进制文件。在 Github 发布页得知,最新版本为1.16.0 。然而 Github没有提供二进制文件,遂去hashicorp官网,找到了下载链接。
1 | wget https://releases.hashicorp.com/consul/1.16.0/consul_1.16.0_linux_amd64.zip |
然后将其添加到PATH中:
1 | echo 'export PATH="/我是/一个/一个/目录啊啊啊:$PATH"' ~/.bashrc |
至此,Consul 的安装已经完成
充当单机微服务注册中心
部署
装完了,该启动了。由于我现在不需要注册服务/健康检查以外的其他功能,也不需要主从集群(笑,没那么多服务器),所以让它单节点部署就行。我没有在防火墙里把对应端口打开,遂用 IPv6。
同时,我也不想为 Consul 编写 dockerfile,并且,我是一个前端程序员,那么就用pm2启动。
1 | echo "consul agent -dev -client=[::]" >>./start_consul.sh |
然后,查看状态:
1 | pm2 log consul |
得到结果
1 | [TAILING] Tailing last 15 lines for [consul] process (change the value with --lines option) |
启动成功。
使用
作为注册中心,它的大部分功能我都不需要,只记录一些最常用的用法。
服务注册
1 | PUT /v1/agent/service/register |
- Name:服务名称
- ID:服务ID,不指定则为 Name 的值
- Address:服务地址
- Port:服务端口
- Check:健康检查,不指定视作_永远健康_。详询Check - Agent - HTTP API | Consul | HashiCorp Developer
取消注册
1 | PUT /v1/agent/service/deregister/test |
获取服务列表
1 | GET /v1/agent/services |
可以使用filter这个query参数筛选,参考https://developer.hashicorp.com/consul/api-docs/agent/service#filtering