微服务Consul集群搭建

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
可观测可视化 Grafana 版,10个用户账号 1个月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: Consul是HashiCorp的开源工具,用于服务发现、配置管理和分布式一致性。它提供服务注册与发现、健康检查、KV存储、多数据中心支持,并基于Raft协议保证一致性。Consul还具有DNS接口和Web UI。要安装,可从HashiCorp或阿里云下载,使用`yum`在Linux上安装。启动单机模式用`consul agent -dev`,集群部署涉及配置文件如`/etc/consul.d/consul.hcl`。常用命令包括启动、加入集群、查看成员及服务管理等。

Consul 是一种用于服务发现、配置和分布式一致性的开源工具和平台。它由 HashiCorp 公司开发和维护,旨在简化构建和维护分布式系统的任务。

Consul 提供了许多功能,包括:

  1. 服务发现:Consul允许服务注册和发现。当服务启动时,它可以向Consul注册自己的位置和元数据。其他服务可以通过Consul查询来发现特定服务的位置,从而轻松实现服务之间的通信。

  2. 健康检查:Consul可以周期性地对服务进行健康检查,以确保它们正常工作。如果服务不再健康,则Consul可以自动将其标记为不可用,并将流量路由到其他健康的实例。

  3. KV存储:Consul包含一个分布式键/值存储系统,可以用于配置、功能标志和其他临时数据的存储。

  4. 多数据中心支持:Consul支持多数据中心集群,允许在不同地理位置部署多个Consul集群,并在它们之间进行通信和同步。

  5. 一致性保证:Consul使用Raft协议来确保数据的一致性和高可用性。它能够在节点故障或网络分区时继续正常运行。

  6. DNS接口:Consul提供了一个DNS接口,允许使用域名进行服务发现,而无需依赖专门的服务发现库。

总的来说,Consul是一个强大的工具,可以帮助开发人员和运维人员构建和管理可靠的分布式系统,简化了服务发现、配置管理和系统监控等任务。

下载安装Consul

Consulf官方下载链接

在这里插入图片描述
选择对应linux 安装consul

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install consul

国内加速阿里云Consul v1.18.0备份
验证


$ consul version
Consul v1.18.0
Revision 349cec17
Build Date 2024-02-26T22:05:50Z
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

单机启动

consul agent -dev  -client=0.0.0.0

在运行Consul代理时,你可以通过一些参数来优化命令。这些参数可以帮助你更好地配置Consul:

  1. 指定数据中心:使用 -datacenter 参数可以指定Consul代理所属的数据中心。例如,-datacenter=mydc

  2. 指定节点名称:使用 -node 参数可以指定Consul代理的节点名称。例如,-node=myagent

  3. 开启UI界面:使用 -ui 参数可以启动Consul的Web UI界面,方便可视化管理。例如,-ui

  4. 指定日志级别:使用 -log-level 参数可以指定Consul代理的日志级别。例如,-log-level=info

  5. 开启gRPC API:使用 -grpc 参数可以开启Consul的gRPC API,允许使用gRPC接口与Consul进行交互。例如,-grpc

  6. 指定绑定地址:使用 -bind 参数可以指定Consul代理绑定的地址。例如,-bind=192.168.1.100

  7. 禁用DNS缓存:使用 -disable-host-node-id 参数可以禁用Consul的DNS缓存。例如,-disable-host-node-id

综合使用这些参数,你可以优化你的Consul代理命令,使其更适合你的环境和需求。例如:

consul agent -dev -client=0.0.0.0 -datacenter=mydc -node=myagent -ui -log-level=info -grpc -bind=192.168.1.100 -disable-host-node-id

这个命令将启动一个绑定到所有接口的Consul代理,使用名为mydc的数据中心,节点名称为myagent,开启了Web UI界面、gRPC API,并设置了日志级别为info

集群部署

在这里插入图片描述

要列出 rpm 安装 Consul 后所产生的文件,可以使用以下命令

# 查看yum下载安装consul
rpm -ql consul
/etc/consul.d/consul.env
/etc/consul.d/consul.hcl
/usr/bin/consul
/usr/lib/systemd/system/consul.service

这些文件的功能介绍如下:

  1. /etc/consul.d/consul.env: 这个文件通常用于设置 Consul 运行时的环境变量。环境变量可以影响 Consul 的行为,例如设置日志级别、数据目录路径等。在这个文件中,你可以配置一些 Consul 运行时所需的环境变量。

  2. /etc/consul.d/consul.hcl: 这是 Consul 的主要配置文件。在这个文件中,你可以配置 Consul 的各种选项,包括集群配置、数据中心、节点名称、绑定地址、广告地址、加入集群的地址、监听端口、日志设置等。通过编辑这个文件,你可以定制 Consul 的行为和功能。

  3. /usr/bin/consul: 这是 Consul 的可执行文件。通过执行这个文件,你可以启动 Consul Agent,并根据配置文件中的设置来运行 Consul。

  4. /usr/lib/systemd/system/consul.service: 这是 Consul 的 Systemd 服务单元文件。它定义了 Consul 作为 Systemd 服务的配置,包括服务的启动方式、依赖关系等。通过 Systemd,你可以使用 systemctl 命令来管理 Consul 服务的启动、停止、重启等操作。

这些文件是安装 Consul 包后在系统上生成的关键文件,用于配置和管理 Consul 的运行。通过修改配置文件,你可以调整 Consul 的行为,使其适应特定的需求和环境。

编辑Consul配置文件

以下是根据配置内容的重要性和功能进行分组,并添加了注释和适当的配置选项的配置文件示例:

vim /etc/consul.d/consul.hcl

配置文件名为consul.hcl,而 JSON 是另一种格式,通常使用 .json 扩展名。如果你要使用 HCL(HashiCorp Configuration Language)格式,你可以像下面这样编辑:

# Consul 配置文件

# 数据中心设置
datacenter = "dc1"

# 节点名称设置(注意:不可重名)
node_name = "consul-36"

# 数据目录设置
data_dir = "/opt/consul"

# 日志级别设置(可选值:TRACE, DEBUG, INFO, WARN, ERR)
log_level = "ERR"

# 绑定地址设置(监听所有 IPv6 地址和所有 IPv4 地址)
bind_addr = "[::]"
bind_addr = "0.0.0.0"

# 广播自己地址给集群访问(用于集群内部通信)
advertise_addr = "192.168.3.36"

# 加入集群的地址列表(需要提供至少一个已知的集群节点地址,:8301默认端口可省略)
retry_join = ["192.168.3.39:8301", "192.168.3.53", "192.168.3.54"]
# 用于指定 Consul Agent 在启动时尝试通过加入集群节点。
start_join = ["192.168.3.39", "192.168.3.53", "192.168.3.54"]

# 服务节点设置(是否为服务器节点)
server = true
# 这会告诉Consul在引导期间等待2个服务器节点就绪,然后再引导整个集群。
bootstrap_expect = 2

# 加密设置(consul keygen 生成的用于集群网络通信的加密)
encrypt = "KUZZ6X4oQhUvXeu+aN1EHL4DVgep8jk4ltflcLQ2DvQ="

# 客户端地址设置(用于监听客户端请求的地址)
client_addr = "0.0.0.0"

# UI 配置(用于启用内置的 Web UI)
ui_config {
   
   
  enabled = true
  content_path = "/ui/" #可自定义路径
}

# 默认端口设置
ports {
   
   
  # HTTP API 端口(默认值:8500)与 Consul 进行交互,包括服务注册、UI、健康检查等
  http = 8500
  # DNS 端口(默认值:8600)用于提供 DNS 查询服务,允许客户端通过 DNS 协议来查询服务实例的地址
  dns = 8600
  # Serf LAN 端口(默认值:8301)局域网内进行集群节点间的通信
  serf_lan = 8301
  # Serf WAN 端口(默认值:8302) 广域网(WAN)内进行集群节点间的通信,用于跨数据中心的通信
  serf_wan = 8302
  # 服务器 RPC 端口(默认值:8300)服务器节点之间进行 RPC 通信
  server = 8300
}

这个配置文件根据不同的功能进行了分组,并添加了注释以说明各个配置项的作用和用法。

# 启动
consul agent -config-file=/etc/consul.d

Consul 会在这个目录中寻找配置文件并加载。

常用命令

以下是一些常用的 Consul 集群管理命令:

  1. 启动 Consul Agent:

    consul agent -config-file=<config_file>
    

    这个命令用于启动 Consul Agent,并指定配置文件。

  2. 加入集群:

    consul join <address>
    

    这个命令用于将当前节点加入到 Consul 集群中,<address> 是一个已存在的集群节点的地址。

  3. 离开集群:

    consul leave
    

    这个命令用于将当前节点从 Consul 集群中移除。

  4. 查看集群节点:

    consul members
    

    这个命令用于查看当前 Consul 集群中的成员节点列表。

  5. 查看 Leader:

    consul operator raft list-peers
    

    这个命令用于列出当前的 Consul 集群中的领导者节点。

  6. 手动推选 Leader:

    consul operator raft promote <node_id>
    

    这个命令用于手动推选指定节点为 Consul 集群的领导者。

  7. 重启集群节点:

    consul reload
    

    这个命令用于重新加载 Consul 配置文件并重启 Consul Agent。

  8. 查看服务列表:

    consul catalog services
    

    这个命令用于列出所有在 Consul 中注册的服务。

  9. 注册服务:

    consul services register <service.json>
    

    这个命令用于注册一个新的服务到 Consul 中,<service.json> 是包含服务定义的 JSON 文件。

  10. 移除服务:

    consul services deregister <service_id>
    

    这个命令用于从 Consul 中移除一个已注册的服务,<service_id> 是服务的唯一标识符。

这些命令可以帮助你管理和维护 Consul 集群,确保其正常运行并满足你的需求。

相关文章
|
1月前
|
Kubernetes Cloud Native 微服务
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
微服务实践之使用 kube-vip 搭建高可用 Kubernetes 集群
219 3
|
1月前
|
存储 运维 负载均衡
「微服务」这10道Consul面试题值得一看
Consul 是一个强大的分布式服务发现和配置管理工具,用于服务注册、健康检查、负载均衡、故障恢复等。它支持多数据中心和多种协议,提供服务发现、健康检查、KV 存储和事件通知功能。服务注册与健康检查由 Agent 实现,负载均衡通过 Service Mesh 实现。尽管 Consul 提供诸多优点,如多数据中心支持和高可用性,但其学习和部署成本较高,适合大型项目,对于小型或初学者可能过于复杂。在使用时需根据实际需求和资源考虑。
|
2月前
|
运维 网络协议 Linux
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
|
2月前
|
Linux Nacos 数据库
【微服务】生产部署nacos集群(三个节点)
【微服务】生产部署nacos集群(三个节点)
69 1
|
2月前
|
负载均衡 Java 网络架构
【SpringCloud】如何理解分布式、微服务、集群
【SpringCloud】如何理解分布式、微服务、集群
38 1
|
2月前
|
微服务
三个微服务注册中心eureka、consul、zookeeper之间的异同点以及CAP理论图
三个微服务注册中心eureka、consul、zookeeper之间的异同点以及CAP理论图
292 0
|
2月前
|
应用服务中间件 Nacos 数据库
SpringCloud微服务之Nacos集群搭建
SpringCloud微服务之Nacos集群搭建
210 0
|
4天前
|
运维 Kubernetes 监控
深入解析微服务架构的演进与实践
本文旨在探究微服务架构从诞生到成熟的发展历程,分析其背后的技术推动力和业务需求,并结合具体案例,揭示实施微服务过程中的挑战与解决策略。通过对微服务架构与传统单体架构的对比,阐明微服务如何优化现代应用开发流程,提高系统的可扩展性、可维护性和敏捷性。
14 0
|
2天前
|
监控 负载均衡 安全
探索微服务架构中的API网关模式
【7月更文挑战第13天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务间的通信和客户端请求。本文将深入剖析API网关的核心作用、设计考量以及实现策略,为构建高效、可靠的分布式系统提供实践指南。
18 10
|
1天前
|
弹性计算 运维 Kubernetes
自动化运维的新篇章:容器编排与微服务架构
【7月更文挑战第14天】在数字化转型的浪潮中,企业对运维效率和系统可靠性的需求日益增长。本文深入探讨了自动化运维的最新趋势——容器编排和微服务架构,并阐述了如何通过这些技术提升运维效率、降低系统复杂性以及提高服务的可用性和可扩展性。文章不仅介绍了相关技术和工具的选择,还提供了实际案例分析,旨在为读者提供一套完整的解决方案框架,以适应快速变化的市场需求。

热门文章

最新文章