【实战】使用 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

输出如下

部署 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 节点的地址。

本案例而言,我们的 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 部署结果

节点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)的时候,就能感觉到明显的卡顿,所以在部署集群的时候,最好不要跨数据中心,最优方案是在同一个数据中心,相互之间有内网通讯。

要查看完整内容,请先登录