域名 AXUM.RS 将于2025年10月到期。我们无意再对其进行续费,我们希望你能够接续这个域名,让更多 AXUM 开发者继续受益。现在,我们已启用新域名 AXUM.EU.ORG
  • 方案AXUM.RS 域名 = 3000
如果你有意接续这份 AXUM 情怀,请与我们取得联系。
说明:
  1. 如果有人购买 AXUM.RS 域名,或者该域名到期,本站将使用免费域名 AXUM.EU.ORG 继续提供服务。

【实战】使用 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 只在文末给出结果。

安装 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

部署客户端

部署 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 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>

结论:

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

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