微服务之 Consul 单机版到集群搭建详细步骤

本文详细介绍了如何从单机版Consul过渡到集群搭建,包括Consul的服务角色、集群架构、项目背景以及具体的部署步骤。在单数据中心中,Consul分为Server和Client节点,通过配置3台Server和2台Client实现了高可用集群。文章还提供了验证集群状态和使用UI界面监控服务状态的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

了解微服务的朋友应该不陌生这个组件,Consul 是一种服务网络解决方案,提供服务注册、服务发现、健康检查等微服务架构系统中必不可少的功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格。并且它还提供 web ui 界面,让使用者可以实时的了解系统中各服务的健康状态

二、单机版 consul 部署使用

首先需要下载 consul 的程序文件,有条件的小伙伴建议直接前往官网下载:https://www.consul.io/downloads.html ,无法下载官网的可以使用下面链接进行下载(Consul v1.6.1) https://download.youkuaiyun.com/download/wchenjt/12408364 ,consul 的程序文件下载后直接就是可执行的,下载相应平台版本 的Consul 解压 copy 至 /usr/local/bin/(系统的环境变量)目录下。

创建 /data/consul 目录,作为 consul 的数据存放目录,此目录可以自定义。
在此目录下创建一个启动 consul 的脚本文件 start_consul.sh

[root@benarchen ~]# vim /data/consul/start_consul.sh 
nohup /usr/local/bin/consul agent -server -ui -client 0.0.0.0 -bootstrap-expect=1 -data-dir=/data/consul/consul_data -node=consul-01 -advertise=10.5
.90.10 -datacenter SH-TMP -bind=0.0.0.0 -client=0.0.0.0 -log-file=/data/consul/consul_data/consul.log &

# agent  -server 表示已 server 模式启动服务
# -ui 参数提供一个 web ui 界面
# -bootstrap-expect=1 意思是以集群的方式启动,只不过集群中只有当前这个节点
# -data-dir 目录会用来存放 consul 的数据信息,如服务注册、是否健康等
# -node=consul-01 节点名称
# -advertise=10.5.90.10 改成自己的ip,或者去掉这个参数
# 对安全性没有要求的情况下其余都可以照抄

保存退出后给文件可执行权限就可以启动服务了

[root@benarchen ~]# chmod u+x start_consul.sh 
[root@benarchen ~]# /bin/sh start_consul.sh

不出意外此时可以在浏览器输入服务器的公网 ip:8500 访问 consul 提供的 ui 页面

三、Consul 集群搭建

1、consul 的集群架构

consul 的集群和其他组件略有不同,它在启动后有两种模式,分别是:

  • Server 模式: 一个 Server 是一个有一组扩展功能的代理,这些功能包括参与 Raft 选举,维护集群状态,响应 RPC 查询,与其他数据中心交互 WAN gossip 和转发查询给 leader 或者远程数据中心。
  • Client 模式: 一个 Client 是一个转发所有 RPC 到 Server 的代理。这个 Client 是相对无状态的;Client 唯一执行的后台活动是加入 LAN gossip 池,这有一个最低的资源开销并且仅消耗少量的网络带宽。

下面的 consul 官方提供的 consul 集群架构图
在这里插入图片描述
从官方给出的架构图可以看出,Consul 是支持多数据中心的,图中有两个 DataCenter 通过 Internet 连接,并且只有 Server 可以跨数据中心通信,多数据中心的架构相对复杂一些,这里我们只讨论单数据中心。

在单个数据中心中,Consul 分为 Client 和 Server 两种节点(所有的节点也被称为 Agent),Server 节点保存数据,Client 负责健康检查及转发数据请求到 Server;Server 节点有一个 Leader 和多个Follower,Leader 节点会将数据同步到 Follower,官方推荐 Server 的数量是 3 个或者 5 个,在 Leader 挂掉的时候会启动选举机制产生一个新的 Leader,以保证整个集群的正常运转。

集群内数据的读写请求既可以直接发到 Server(上文中的单节点就是这种情况),也可以通过 Client 使用 RPC 转发到 Server,请求最终会到达 Leader 节点,在允许数据轻微陈旧的情况下,读请求也可以在普通的 Server 节点完成,集群内数据的读写和复制都是通过 TCP 的 8300 端口完成。

2、项目背景

公司的微服务项目大概有三十多个服务,考虑到单机版的 consul 在性能和容错性上都会有所不足,所以打算搭建集群版。微服务使用 docker 的方式部署在两台宿主机上,两台宿主机在配置上、部署的服务完全一样,网关入口做负载均衡以使其高可用。

此处采用的是 3Server + 2Client 的集群架构,3 台 Servler 在单独的虚拟机上,2 台 Client 则直接在部署服务的宿主机运行。

节点类型 IP 版本
Server 10.5.90.4 v1.6.1
Server 10.5.90.16 v1.6.1
Server 10.5.90.12 v1.6.1
Client 10.5.90.10 v1.6.1
Client 10.5.90.6 v1.6.1

3、搭建 Consul 集群

下载相应的版本 consul 程序文件解压 copy 至 /usr/local/bin/(系统环境变量)目录。
创建 /data/consul 目录,作为 consul 的数据及相关配置文件存放目录,此目录可以自定义。
创建 /data/consul/consul.d 目录,在此目录下创建一个 consul 启动的配置文件 consul.json

部署第一台 Server

在第一台机器上创建如下文件

 [root@consul-01 ~]# mkdir -p /data/consul/consul.d
 [root@consul-01 ~]# mkdir -p /data/consul/consul_data/logs/
 [root@consul-01 ~]# vim /data/consul/consul.d/consul.json
 {
   
   
    "datacenter": "SH",
    "node_name": "consul-svr-01",
    "server": true,
    "bootstrap_expect": 3,
    "data_dir": "/data/consul/consul_data",
    "log_level": "INFO",
    "log_file": "/data/consul/consul_data/logs/",
    "ui": true,
    
### Seata 分布式事务集群配置与部署 #### 1. Seata Server 的作用 Seata 是一个开源的分布式事务解决方案,主要用于解决微服务环境下的分布式事务问题。Seata 提供了一个名为 `Seata-server` 的组件作为事务协调器 (Transaction Coordinator, TC),负责管理全局事务的状态以及分支事务之间的通信[^1]。 #### 2. 集群模式概述 为了提高系统的可用性和性能,在生产环境中通常会采用多实例的方式运行 Seata Server 构建高可用集群。Seata 支持多种注册中心用于发现和负载均衡多个 Seata Server 实例,常见的有 Nacos、Eureka 和 Consul 等[^3]。 #### 3. 配置文件说明 Seata 使用一系列配置文件来定义其行为,主要包括以下几个部分: - **registry.conf**: 定义了注册中心的相关参数。 - **file.conf**: 包含了事务日志存储方式(如 DB 或 File)、锁机制以及其他核心设置。 以下是 registry.conf 文件的一个典型例子: ```properties registry { type = "nacos" nacos { application = "seata-server" serverAddr = "localhost:8848" group = "SEATA_GROUP" namespace = "" cluster = "default" } } ``` 上述配置表示使用 Nacos 作为注册中心,并指定了地址和服务名等必要字段。 #### 4. 数据库表结构初始化 在启动之前还需要准备好相应的元数据表格以便记录 TM(Transactional Manager), RM(Resource Manager) 及其他相关信息。可以通过官方提供的 SQL 脚本来完成此步骤。例如 MySQL 版本可以执行如下命令加载脚本: ```sql source path/to/seata/sql/mysql.sql; ``` 该路径指向的是 seata 所需的基础表创建语句集合[^6]。 #### 5. 启动多个节点形成集群 假设已经完成了单机版测试验证无误,则可通过复制相同的服务端程序并调整各自监听端口等方式轻松扩展成一个多活副本组成的集群体系。每新增一台机器都需要修改对应的 configuration 中关于 network address 的设定以避免冲突[^5]。 另外需要注意的一点就是当存在多个 seata-servers 运行时,默认情况下它们之间不会互相感知到彼此的存在;所以必须借助外部工具比如 zookeeper/nacos 来实现动态探测邻居成员列表的功能从而达到真正的 HA 效果[^4]。 --- ### 总结 综上所述,要成功搭建一套基于 seata 的分布式的交易管理体系不仅需要合理规划好各个组成部分间的交互逻辑关系图谱外还需精心挑选适合当前项目需求特点的技术选型方案最后再辅之恰当有效的运维手段才能确保整个平台长期稳定高效运转下去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值