【实战】使用 Hax 的免费 VPS 进行 Consul 集群部署

70476
2022/10/06 00:35:59

本章通过 Hax 和 Woiden 的免费 VPS 对 Consul 集群部署进行实战。

实战环境

  • Hax EU8 数据中心的 4 台 VPS (IPV6)
  • Woiden EU4 数据中心的 4 台 VPS (IPV6)
  • Hax 和 Woiden 分别独立部署,都是 3 个服务端节点,1个客户端节点
  • 操作系统: Debian 11 x64

注意

  • 请使用相同数据中心的 VPS 进行部署,跨数据中心可能导致速度很慢。
  • 请不要混用 Hax 和 Woiden 进行部署,跨数据中心可能导致速度很慢。
  • 不要滥用免费服务。

节点列表

本章只对 Hax 为例进行演示,Woiden 只在文末给出结果。

节点名称IP地址说明
server-012a01:4f8:*:1f05:1服务端节点1,主节点
server-022a01:4f8:*:21e3:1服务端节点2
server-032a01:4f8:*:2498:1服务端节点3
client-012a01:4f8:*:24d5:1客户端节点

安装 Consul

所有节点都进行安装:

验证是否安装成功:

$ consul --version
Consul v1.13.2
Revision 0e046bbb
Build Date 2022-09-20T20:30:07Z
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

部署服务端

部署 server-01 (主节点)

### server节点1(主节点)
# 节点名称
NODE_NAME="server-01" && \
# 数据保存目录
DATA_DIR="/var/consul/data/${NODE_NAME}" && \
# 集群中节点数量
BOOTSTRAP_EXPECT=3 && \
mkdir -p $DATA_DIR && \
consul agent -server \
	-bind=[::] \
	-bootstrap-expect=$BOOTSTRAP_EXPECT \
	-data-dir=$DATA_DIR \
	-node=$NODE_NAME

输出如下

==> Starting Consul agent...
              Version: '1.13.2'
           Build Date: '2022-09-20 20:30:07 +0000 UTC'
              Node ID: '9aa27762-3c58-1c8d-6176-7e186d30215e'
            Node name: 'server-01'
           Datacenter: 'dc1' (Segment: '<all>')
               Server: true (Bootstrap: false)
          Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)
         Cluster Addr: 2a01:4f8:*:1f05:1 (LAN: 8301, WAN: 8302)
    Gossip Encryption: false
     Auto-Encrypt-TLS: false
            HTTPS TLS: Verify Incoming: false, Verify Outgoing: false, Min Version: TLSv1_2
             gRPC TLS: Verify Incoming: false, Min Version: TLSv1_2
     Internal RPC TLS: Verify Incoming: false, Verify Outgoing: false (Verify Hostname: false), Min Version: TLSv1_2

部署 server-02

### server节点2
# 节点名称
NODE_NAME="server-02" && \
# 数据保存目录
DATA_DIR="/var/consul/data/${NODE_NAME}" && \
# 集群中节点数量
BOOTSTRAP_EXPECT=3 && \
mkdir -p $DATA_DIR && \
consul agent -server \
	-bind=[::] \
	-bootstrap-expect=$BOOTSTRAP_EXPECT \
	-data-dir=$DATA_DIR \
	-node=$NODE_NAME

部署 server-03

### server节点3
# 节点名称
NODE_NAME="server-03" && \
# 数据保存目录
DATA_DIR="/var/consul/data/${NODE_NAME}" && \
# 集群中节点数量
BOOTSTRAP_EXPECT=3 && \
mkdir -p $DATA_DIR && \
consul agent -server \
	-bind=[::] \
	-bootstrap-expect=$BOOTSTRAP_EXPECT \
	-data-dir=$DATA_DIR \
	-node=$NODE_NAME

部署客户端

部署 client-01

### client 节点
# 节点名称
NODE_NAME="client-01" && \
# 数据保存目录
DATA_DIR="/var/consul/data/${NODE_NAME}" && \
mkdir -p $DATA_DIR && \
consul agent \
	-client=[::] \
	-ui \
	-bind=[::] \
	-data-dir=$DATA_DIR \
	-node=$NODE_NAME

加入集群

除了 server-01 之外,其它节点都需要执行。以 server-02 为例:

consul join [2a01:4f8:*:1f05:1]
Successfully joined cluster by contacting 1 nodes.

节点列表

任意节点执行:

访问 Consul Web 管理后台

对于集群而言,我们需要访问 client 节点,而不是直接访问 server 节点,同样的,对于 Consul API 的调用,也是使用 client 节点的地址。

本案例而言,我们的 client 地址是 2a01:4f8:*:24d5:1,所以我们要访问的是 http://[2a01:4f8:*:24d5:1]:8500

摘要

摘要

节点列表

节点列表

注册服务

下面,我们来注册一个新服务,并查看结果。

curl -X PUT 'http://[2a01:4f8:*:24d5:1]:8500/v1/agent/service/register' -H 'content-type:application/json' -d '{"Name":"axum.rs","ID":"axum.rs","Address":"127.0.0.1","Port":54321}'

可以看到,我们已经成功注册了新服务。

新服务

Woiden 部署结果

实际部署时,在同一机房(EU4)部署了 3 台 server 节点和 1 台 client 节点;另一个机房(EU6)部署了第 2 台 client 节点:

节点Woiden机房ip说明
server-01EU42a:**:**:0b服务端节点1,主节点
server-02EU42a:**:**:d9服务端节点2
server-03EU42a:**:**:70服务端节点3
client-01EU42a:**:**:3e客户端节点1
client-02EU620:**:**7:1客户端节点2

最终结果如下:

$ consul members
Node       Address                                  Status  Type    Build   Protocol  DC   Partition  Segment
server-01  [2a:**:**:0b]:8301            alive   server  1.13.2  2         dc1  default    <all>
server-02  [2a:**:**:d9]:8301            alive   server  1.13.2  2         dc1  default    <all>
server-03  [2a:**:**:70]:8301            alive   server  1.13.2  2         dc1  default    <all>
client-01  [2a:**:**:3e]:8301            alive   client  1.13.2  2         dc1  default    <default>
client-02  [20:**:**7:1]:8301  alive   client  1.13.2  2         dc1  default    <default>

结论:

client-02 和其它节点在不同的数据中心,在加入集群(consul join)的时候,就能感觉到明显的卡顿,所以在部署集群的时候,最好不要跨数据中心,最优方案是在同一个数据中心,相互之间有内网通讯。