域名 AXUM.RS 将于2025年10月到期。我们无意再对其进行续费,我们希望你能够接续这个域名,让更多 AXUM 开发者继续受益。
  • 方案1️⃣AXUM.RS 域名 = 3000
  • 方案2️⃣方案1️⃣ + 本站所有专题原始 Markdown 文档 = 5000
  • 方案3️⃣方案2️⃣ + 本站原始数据库 = 5500
如果你有意接续这份 AXUM 情怀,请与我们取得联系。
说明:
  1. 如果有人购买 AXUM.RS 域名(方案1️⃣),或者该域名到期,本站将启用新的免费域名继续提供服务。
  2. 如果有人购买了 AXUM.RS 域名,且同时购买了内容和/或数据库(方案2️⃣/方案3️⃣),本站将关闭。届时我们或许会以另一种方式与你再相遇。

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

本章通过 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

所有节点都进行安装:

DST_DIR=/usr/local/consul/
CONSUL_VERION=1.13.2
TMP_NAME="/tmp/consul.${CONSUL_VERION}.zip"
RC_FILE=~/.bashrc
wget -O $TMP_NAME  "https://releases.hashicorp.com/consul/${CONSUL_VERION}/consul_${CONSUL_VERION}_linux_amd64.zip" && \
unzip $TMP_NAME -d $DST_DIR && \
chmod a+x "${DST_DIR}/consul" && \
echo "export PATH=\$PATH:${DST_DIR}" >> $RC_FILE && \
source $RC_FILE && \
rm -rf $TMP_NAME

验证是否安装成功:

$ 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 为例:

输出结果:

Successfully joined cluster by contacting 1 nodes.

节点列表

任意节点执行:

$ consul members
Node       Address                                    Status  Type    Build   Protocol  DC   Partition  Segment
server-01  [2a01:4f8:*:1f05:1]:8301  alive   server  1.13.2  2         dc1  default    <all>
server-02  [2a01:4f8:*:21e3:1]:8301  alive   server  1.13.2  2         dc1  default    <all>
server-03  [2a01:4f8:*:2498:1]:8301  alive   server  1.13.2  2         dc1  default    <all>
client-01  [2a01:4f8:*:24d5:1]:8301  alive   client  1.13.2  2         dc1  default    <default>

访问 Consul Web 管理后台

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

摘要

摘要

节点列表

节点列表

注册服务

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

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>
要查看完整内容,请先登录