searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

注册配置中心 - Consul简介

2024-06-28 10:03:08
44
0

基本信息及特性

Consul是由HashiCorp公司在2014年开发并开源的一款注册配置中心,使用go语言编写。

Github官方介绍:

Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.

其特性包括但不限于:

1.多数据中心架构支持;

2.服务网格模式支持(将额外提供服务间调用安全和认证,构建零信任体系);

3.多种服务发现模式(支持openAPI服务发现和dns服务发现);

4.可自定义的服务健康检查策略(客户端心跳、服务端主动检测,包括http检测、脚本检测、TCP检测等方式);

5.文件结构的kv存储系统(可充当配置中心);

6.可灵活配置的访问权限控制方法、规则;

7.功能丰富完善的openAPI系统和UI界面;

8.极简的部署流程;

9.使用Raft作为服务端节点数据同步的一致性协议,因此为CP模式。使用Gossip协议进行服务端与客户端的信息同步;

10.拥抱云原生,官方提供虚机和K8s两种部署指引。

 

Conusl在使用时可以以标准模式部署,或以服务网格模式部署,架构图如下所示。标准模式指的是基本的注册中心服务端-服务提供者-服务消费者模式,而服务网格模式则添加了Consul对微服务系统网络层的集中管控,支持网络路由鉴权控制等能力。

 

端口及网络通信

Consul server agent 节点端口列表(单机、集群)罗列如下。其中,8500端口为最基本的客户端http标准服务端口。

端口号 描述 备注
8500 标准服务端口(openAPI http)  
8501 标准服务端口(openAPI https) 默认不开启
8502 grpc端口(用途待确认) 默认不开启
8503 grpc-tls端口(用途待确认)  
8300 Raft RPC端口  
8301 Gossip(LAN)端口  
8302

Gossip(WAN)端口

 
8600 标准服务端口(DNS)  

 

Raft端口和Gossip端口有各自的用途,交互架构详见下图。

8300 - Raft RPC端口

Raft端口主要用于服务端集群间通信和数据同步。

 

8301 - Gossip(LAN)端口

Gossip端口主要用于通过gossip协议在服务端和客户端之间同步数据。

 

8302 - Gossip(WAN)端口

 

 

功能清单

Consul是一个标准的注册配置中心,其功能模块基本与Nacos重合,如服务模块、配置模块、鉴权模块、命名空间模块(企业版)。除此之外,Consul还具有一些额外的服务网格相关功能。

功能罗列如下,表格不一定完整(以下功能通过openAPI列表梳理):

功能名称 所属模块 备注
集群成员状态查询 管理模块  
集群Raft状态查询、管理  
会话查询 会话,即客户端连接
服务端配置CRUD  
服务列表查询 服务模块  
服务实例注册、注销、查询、心跳  
服务实例健康检查规则CRUD 健康检查规则可高度自定义
kv存储CRUD 配置模块  
kv快照导入导出  
acl token CRUD 鉴权模块 口令,相当于账密
acl policy CRUD 访问控制策略,可高度灵活自定义
acl 算法查询、指定  
服务Intention管理 服务网格模块 对服务网格中的服务间访问进行控制
调用链查询  
Peer管理 多数据中心模块 多数据中心间数据同步规则定义

 

 

服务端部署

Consul的部署遵循极简的部署流程,整个部署过程最少只需要一个二进制文件即可完成。为了方便部署配置管理和后续运维,下述部署流程将额外创建consul配置文件server.json,以及数据、日志目录。

单机部署

标准部署流程:

1.将二进制文件consul拷贝到目标机器的任意目录下,下述以/root/consul为例

2.准备部署目录:

mkdir -p /root/consul/data

mkdir -p /root/consul/logs

将下述内容写入到/root/consul/server.json中:

{

  "server": true,

  "ui_config": {

    "enabled": true

  },

  "node_name": "consul-server1",

  "client_addr": "0.0.0.0",

  "data_dir": "/root/consul/data",

  "log_file": "/root/consul/logs",

  "bind_addr": "192.168.0.228", //本机ip

  "bootstrap_expect": 1,

    "acl": {

    "enabled": true,

    "default_policy": "deny",

    "enable_token_persistence": true

  }

}

3.执行指令,进行部署:

nohup ./consul agent -config-file=server.json &

 

集群部署

在三个节点上分别执行:

1.将二进制文件consul拷贝到目标机器的任意目录下,下述以/root/consul为例

2.准备部署目录:

mkdir -p /root/consul/data

mkdir -p /root/consul/logs

将下述内容写入到/root/consul/server.json中:

{

  "server": true,

  "ui_config": {

    "enabled": true

  },

  "node_name": "consul-server1", //不同节点不可重复

  "client_addr": "0.0.0.0",

  "data_dir": "/root/consul/data",

  "log_file": "/root/consul/logs",

  "bind_addr": "192.168.0.228", //本机ip

  "bootstrap_expect": 3, //集群节点数,为奇数

  "retry_join": [ //集群节点列表

    "192.168.0.228",

    "192.168.0.192",

    "192.168.0.209"

  ],

    "acl": {

    "enabled": true,

    "default_policy": "deny",

    "enable_token_persistence": true

  }

}

 

3.执行指令,进行部署:

nohup ./consul agent -config-file=server.json &

4.部署成功后,可执行如下命令进行集群状态检测:

./consul members

 

member配置从左到右每一列信息依次含义:

列名 含义
Node 节点名称
Address 节点地址

Status

节点状态,枚举值:alive/leave/failed
Type 节点类型,枚举值:server/client
Buid 版本号
Protocal 协议
DC 数据中心标识
Partition 未知
Segment 网络分段相关,主要是为了将Gossip池隔离为更小的单元,可详见官网关于网络分段的描述

 

常用配置梳理

服务端配置通常被写入到jsonhcl格式的文件中进行维护,常用配置罗列如下( 表示json的下一层级)。

配置名称 描述 备注
server 是否开启服务端模式  
ui_config.enabled 是否开启ui界面  
node_name consul agent节点名称  
client_addr 可接受的客户端地址列表 填写0.0.0.0表示全部可接受
data_dir 数据目录  
log_file 日志目录  
bind_addr consul agent节点ip 多网卡时需要指定
bootstrap_expect 集群节点数  
retry_join 集群节点列表 为数组
acl.enabled 是否打开acl功能  
acl.default_policy acl默认策略  
acl.enable_token_persistence acl token持久化  

完整参数列表可详见官网。

 

OpenAPI和客户端使用

OpenAPI

Consul提供了功能丰富全面的OpenAPI供客户端使用,官方UI、官方命令行程序、Java SDK、SpringCloud SDK、Go SDK底层均是调用了其OpenAPI。

OpenAPI的具体文档可详见官网资料。

常用的Consul OpenAPI主要分为如下几个大类:

OpenAPI类别 描述
ACL 鉴权相关API
Agent 包含服务、健康检查相关的众多API
Catalog 各类信息查询API
Config 服务端配置相关API
Connect 服务网格Intention相关API
Events 事件相关API
KV Store kv存储相关API

 

官方UI和命令行

除了OpenAPI,Consul官方还提供了UI和命令行两种方式对集群进行各类操作。

 

UI

只需访问ip:8500即可进入

 

命令行

consul二进制文件不但可用于部署服务端,可以用于对集群进行各类操作

 

常见的consul操作命令行操作包括但不限于:

 

查询集群节点

./consul members

 

重新加载配置文件

./consul reload

 

优雅关闭节点

./consul leave

 

查询所有注册的服务

./consul catalog services

 

加入集群

./consul join 192.168.4.130

 

查询服务端版本

./consul version

 

查询集群raft信息

./consul operator raft list-peers

 

Java SDK

可在Java代码中引入如下Maven坐标,来使用已封装的Consul OpenAPI能力:

<dependency>
    <groupId>com.ecwid.consul</groupId>c
    <artifactId>consul-api</artifactId>
    <version>1.4.5</version>
</dependency>

使用ConsulClient类进行基本的操作。

 

 

SpringCloud SDK

SpringCloud对Consul有较好的支持。SpringBoot应用可通过下述方式快速使用Consul的注册中心、配置中心能力。

Consul注册中心

1.引入如下Maven坐标,版本可与框架对应

<!-- consul client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

2.添加Consul相关配置,常见配置罗列如下

# 要连接的consul agent ip
spring.cloud.consul.host=198.20.7.231

# 要连接的consul agent port
spring.cloud.consul.port=8500

# 注册ip而不是主机名
spring.cloud.consul.discovery.prefer-ip-address=true

# 指定注册ip的值,适用于多网卡的情况
spring.cloud.consul.discovery.ip-address=127.0.0.1

# 采用客户端心跳的健康检查模式,而不是默认的服务端http探测
spring.cloud.consul.discovery.heartbeat.enabled=true

# acl token
spring.cloud.consul.discovery.acl-token=a4685115-ef96-903f-bba3-ebb325eccfab

3.启动类添加必要注解

4.观察注册情况,发起服务调用测试

 

Consul配置中心

1.引入如下Maven坐标,版本可与框架对应

<!-- consul client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>

2.添加Consul相关配置,常见配置罗列如下

# 要连接的consul agent ip
spring.cloud.consul.host=198.20.5.37

# 要连接的consul agent port
spring.cloud.consul.port=8500

# 配置中心配置文件格式
spring.cloud.consul.config.format=properties

3.编写测试类,启动服务,测试配置更新情况

 

以上对Consul的各语言客户端使用方式进行了总结,大体都是对Consul的OpenAPI进行了封装。

0条评论
0 / 1000
周****朝
2文章数
0粉丝数
周****朝
2 文章 | 0 粉丝
周****朝
2文章数
0粉丝数
周****朝
2 文章 | 0 粉丝
原创

注册配置中心 - Consul简介

2024-06-28 10:03:08
44
0

基本信息及特性

Consul是由HashiCorp公司在2014年开发并开源的一款注册配置中心,使用go语言编写。

Github官方介绍:

Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.

其特性包括但不限于:

1.多数据中心架构支持;

2.服务网格模式支持(将额外提供服务间调用安全和认证,构建零信任体系);

3.多种服务发现模式(支持openAPI服务发现和dns服务发现);

4.可自定义的服务健康检查策略(客户端心跳、服务端主动检测,包括http检测、脚本检测、TCP检测等方式);

5.文件结构的kv存储系统(可充当配置中心);

6.可灵活配置的访问权限控制方法、规则;

7.功能丰富完善的openAPI系统和UI界面;

8.极简的部署流程;

9.使用Raft作为服务端节点数据同步的一致性协议,因此为CP模式。使用Gossip协议进行服务端与客户端的信息同步;

10.拥抱云原生,官方提供虚机和K8s两种部署指引。

 

Conusl在使用时可以以标准模式部署,或以服务网格模式部署,架构图如下所示。标准模式指的是基本的注册中心服务端-服务提供者-服务消费者模式,而服务网格模式则添加了Consul对微服务系统网络层的集中管控,支持网络路由鉴权控制等能力。

 

端口及网络通信

Consul server agent 节点端口列表(单机、集群)罗列如下。其中,8500端口为最基本的客户端http标准服务端口。

端口号 描述 备注
8500 标准服务端口(openAPI http)  
8501 标准服务端口(openAPI https) 默认不开启
8502 grpc端口(用途待确认) 默认不开启
8503 grpc-tls端口(用途待确认)  
8300 Raft RPC端口  
8301 Gossip(LAN)端口  
8302

Gossip(WAN)端口

 
8600 标准服务端口(DNS)  

 

Raft端口和Gossip端口有各自的用途,交互架构详见下图。

8300 - Raft RPC端口

Raft端口主要用于服务端集群间通信和数据同步。

 

8301 - Gossip(LAN)端口

Gossip端口主要用于通过gossip协议在服务端和客户端之间同步数据。

 

8302 - Gossip(WAN)端口

 

 

功能清单

Consul是一个标准的注册配置中心,其功能模块基本与Nacos重合,如服务模块、配置模块、鉴权模块、命名空间模块(企业版)。除此之外,Consul还具有一些额外的服务网格相关功能。

功能罗列如下,表格不一定完整(以下功能通过openAPI列表梳理):

功能名称 所属模块 备注
集群成员状态查询 管理模块  
集群Raft状态查询、管理  
会话查询 会话,即客户端连接
服务端配置CRUD  
服务列表查询 服务模块  
服务实例注册、注销、查询、心跳  
服务实例健康检查规则CRUD 健康检查规则可高度自定义
kv存储CRUD 配置模块  
kv快照导入导出  
acl token CRUD 鉴权模块 口令,相当于账密
acl policy CRUD 访问控制策略,可高度灵活自定义
acl 算法查询、指定  
服务Intention管理 服务网格模块 对服务网格中的服务间访问进行控制
调用链查询  
Peer管理 多数据中心模块 多数据中心间数据同步规则定义

 

 

服务端部署

Consul的部署遵循极简的部署流程,整个部署过程最少只需要一个二进制文件即可完成。为了方便部署配置管理和后续运维,下述部署流程将额外创建consul配置文件server.json,以及数据、日志目录。

单机部署

标准部署流程:

1.将二进制文件consul拷贝到目标机器的任意目录下,下述以/root/consul为例

2.准备部署目录:

mkdir -p /root/consul/data

mkdir -p /root/consul/logs

将下述内容写入到/root/consul/server.json中:

{

  "server": true,

  "ui_config": {

    "enabled": true

  },

  "node_name": "consul-server1",

  "client_addr": "0.0.0.0",

  "data_dir": "/root/consul/data",

  "log_file": "/root/consul/logs",

  "bind_addr": "192.168.0.228", //本机ip

  "bootstrap_expect": 1,

    "acl": {

    "enabled": true,

    "default_policy": "deny",

    "enable_token_persistence": true

  }

}

3.执行指令,进行部署:

nohup ./consul agent -config-file=server.json &

 

集群部署

在三个节点上分别执行:

1.将二进制文件consul拷贝到目标机器的任意目录下,下述以/root/consul为例

2.准备部署目录:

mkdir -p /root/consul/data

mkdir -p /root/consul/logs

将下述内容写入到/root/consul/server.json中:

{

  "server": true,

  "ui_config": {

    "enabled": true

  },

  "node_name": "consul-server1", //不同节点不可重复

  "client_addr": "0.0.0.0",

  "data_dir": "/root/consul/data",

  "log_file": "/root/consul/logs",

  "bind_addr": "192.168.0.228", //本机ip

  "bootstrap_expect": 3, //集群节点数,为奇数

  "retry_join": [ //集群节点列表

    "192.168.0.228",

    "192.168.0.192",

    "192.168.0.209"

  ],

    "acl": {

    "enabled": true,

    "default_policy": "deny",

    "enable_token_persistence": true

  }

}

 

3.执行指令,进行部署:

nohup ./consul agent -config-file=server.json &

4.部署成功后,可执行如下命令进行集群状态检测:

./consul members

 

member配置从左到右每一列信息依次含义:

列名 含义
Node 节点名称
Address 节点地址

Status

节点状态,枚举值:alive/leave/failed
Type 节点类型,枚举值:server/client
Buid 版本号
Protocal 协议
DC 数据中心标识
Partition 未知
Segment 网络分段相关,主要是为了将Gossip池隔离为更小的单元,可详见官网关于网络分段的描述

 

常用配置梳理

服务端配置通常被写入到jsonhcl格式的文件中进行维护,常用配置罗列如下( 表示json的下一层级)。

配置名称 描述 备注
server 是否开启服务端模式  
ui_config.enabled 是否开启ui界面  
node_name consul agent节点名称  
client_addr 可接受的客户端地址列表 填写0.0.0.0表示全部可接受
data_dir 数据目录  
log_file 日志目录  
bind_addr consul agent节点ip 多网卡时需要指定
bootstrap_expect 集群节点数  
retry_join 集群节点列表 为数组
acl.enabled 是否打开acl功能  
acl.default_policy acl默认策略  
acl.enable_token_persistence acl token持久化  

完整参数列表可详见官网。

 

OpenAPI和客户端使用

OpenAPI

Consul提供了功能丰富全面的OpenAPI供客户端使用,官方UI、官方命令行程序、Java SDK、SpringCloud SDK、Go SDK底层均是调用了其OpenAPI。

OpenAPI的具体文档可详见官网资料。

常用的Consul OpenAPI主要分为如下几个大类:

OpenAPI类别 描述
ACL 鉴权相关API
Agent 包含服务、健康检查相关的众多API
Catalog 各类信息查询API
Config 服务端配置相关API
Connect 服务网格Intention相关API
Events 事件相关API
KV Store kv存储相关API

 

官方UI和命令行

除了OpenAPI,Consul官方还提供了UI和命令行两种方式对集群进行各类操作。

 

UI

只需访问ip:8500即可进入

 

命令行

consul二进制文件不但可用于部署服务端,可以用于对集群进行各类操作

 

常见的consul操作命令行操作包括但不限于:

 

查询集群节点

./consul members

 

重新加载配置文件

./consul reload

 

优雅关闭节点

./consul leave

 

查询所有注册的服务

./consul catalog services

 

加入集群

./consul join 192.168.4.130

 

查询服务端版本

./consul version

 

查询集群raft信息

./consul operator raft list-peers

 

Java SDK

可在Java代码中引入如下Maven坐标,来使用已封装的Consul OpenAPI能力:

<dependency>
    <groupId>com.ecwid.consul</groupId>c
    <artifactId>consul-api</artifactId>
    <version>1.4.5</version>
</dependency>

使用ConsulClient类进行基本的操作。

 

 

SpringCloud SDK

SpringCloud对Consul有较好的支持。SpringBoot应用可通过下述方式快速使用Consul的注册中心、配置中心能力。

Consul注册中心

1.引入如下Maven坐标,版本可与框架对应

<!-- consul client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

2.添加Consul相关配置,常见配置罗列如下

# 要连接的consul agent ip
spring.cloud.consul.host=198.20.7.231

# 要连接的consul agent port
spring.cloud.consul.port=8500

# 注册ip而不是主机名
spring.cloud.consul.discovery.prefer-ip-address=true

# 指定注册ip的值,适用于多网卡的情况
spring.cloud.consul.discovery.ip-address=127.0.0.1

# 采用客户端心跳的健康检查模式,而不是默认的服务端http探测
spring.cloud.consul.discovery.heartbeat.enabled=true

# acl token
spring.cloud.consul.discovery.acl-token=a4685115-ef96-903f-bba3-ebb325eccfab

3.启动类添加必要注解

4.观察注册情况,发起服务调用测试

 

Consul配置中心

1.引入如下Maven坐标,版本可与框架对应

<!-- consul client -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>

2.添加Consul相关配置,常见配置罗列如下

# 要连接的consul agent ip
spring.cloud.consul.host=198.20.5.37

# 要连接的consul agent port
spring.cloud.consul.port=8500

# 配置中心配置文件格式
spring.cloud.consul.config.format=properties

3.编写测试类,启动服务,测试配置更新情况

 

以上对Consul的各语言客户端使用方式进行了总结,大体都是对Consul的OpenAPI进行了封装。

文章来自个人专栏
注册中心
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
2
0