Skip to main content

配置并启动 Consul

Consul 的服务被称为 Agent,Agent 分为两种角色:服务器及客户端。多个 Consul 服务器构成集群环境,Consul 客户端注册到 Consul 服务器,微服务注册到 Consul 客户端。

以下以一个服务器、一个客户端为例。

以 dxsuite 用户身份创建以下目录结构:

📁 /var/dxsuite/consul
📁 config
📃 server.json Consul 服务器启动配置
📃 client.json Consul 客户端启动配置
📁 data
📁 server Consul 服务器数据保存路径
📁 client Consul 客户端数据保存路径
📁 logs
📁 server Consul 服务器日志保存路径
📁 client Consul 客户端日志保存路径

Consul 服务所使用的端口:

服务角色用途端口号说明备注
服务器HTTP8930HTTP API
服务器DNS8931解析 DNS 查询
服务器LAN Serf8932处理局域网的 GossipGossip:基于病毒传播方式的计算机点对点通信的处理(协议)
服务器WAN Serf8933处理互联网的 Gossip
服务器Server RPC8934处理其他 Agent 发送的请求
客户端HTTP8940HTTP API
客户端DNS8941解析 DNS 查询
客户端LAN Serf8942处理局域网的 Gossip
客户端WAN Serf8943处理互联网的 Gossip

生成服务之间通信密钥:

$ consul keygen
6UWWdBHIvk5xAt6l0jejBn3cTerut3u5Ik03710rbJM=

同一数据中心的所有服务器和客户端必须使用相同的密钥。

编辑 server.json 的内容:

{
"datacenter": "dxsuite",
"data_dir": "./data/server",
"pid_file": "./logs/server/server.pid",
"log_file": "./logs/server/server.log",
"log_level": "trace",
"encrypt": "6UWWdBHIvk5xAt6l0jejBn3cTerut3u5Ik03710rbJM=",
"client_addr": "0.0.0.0",
"retry_interval": "15s",
"retry_join": [
],
"rejoin_after_leave": true,
"leave_on_terminate": false,
"skip_leave_on_interrupt": true,
"disable_update_check": true,
"ports": {
"http": 8930,
"dns": 8931,
"serf_lan": 8932,
"serf_wan": 8933,
"server": 8934
}
}

编辑 client.json 的内容:

{
"datacenter": "dxsuite",
"data_dir": "./data/client",
"pid_file": "./logs/client/client.pid",
"log_file": "./logs/client/client.log",
"log_level": "trace",
"encrypt": "6UWWdBHIvk5xAt6l0jejBn3cTerut3u5Ik03710rbJM=",
"client_addr": "0.0.0.0",
"retry_interval": "15s",
"retry_join": [
"consul.cloud.dxsuite.cn:8932"
],
"rejoin_after_leave": true,
"leave_on_terminate": true,
"skip_leave_on_interrupt": false,
"disable_update_check": true,
"ports": {
"http": 8940,
"dns": 8941,
"serf_lan": 8942,
"serf_wan": 8943
}
}

在 /var/dxsuite/consul 路径下执行以下命令启动服务器和客户端:

$ consul agent -server -bootstrap-expect=1 -node=server247 -bind=192.168.1.247 \
-config-file=./config/server.json -ui > ./server-logs/server.log &
$ consul agent -node=client247 -bind=192.168.1.247 \
-config-file=./config/client.json -ui > ./client-logs/client.log &

此时可通过浏览器访问如下地址查看服务注册状态:

http://consul.cloud.dxsuite.cn:8940

在各业务模块的 Starter 模块的 application.yml 中设置服务注册中心信息,以 user-query-starter 为例:

spring:
cloud:
consul:
host: consul.cloud.dxsuite.cn
port: 8940
discovery:
enabled: true
tags: domain=user,type=query