本文档将向您介绍如何在开发者机器上设置高可用性集群,还会指导如何在该集群上启用多连接,以及设置高可用性多连接集群所需的更改。
如要设置生产环境,请遵照生产环境设置中列出的相关说明。
如果您之前已遵循开发人员设置:单一实例说明,在开发者机器上设置 WhatsApp Business API 客户端,请先按照迁移指南进行操作,然后继续阅读本文档的剩余部分。
本指南中的内容均基于您在执行新安装过程的假设。
您将需要使用:
同时强烈建议您通读可用性和扩展指南,以详细了解高可用性与多连接。
biz
目录在 WhatsApp Business API 客户端的首选位置运行以下代码:
mkdir ~/biz; cd ~/biz;
WhatsApp Business API 客户端配置文件位于 WhatsApp-Business-API-Setup-Scripts GitHub 存储库中。您可以使用 MySQL 或 Postgres 数据库实例设置 WhatsApp Business API 客户端。
WA_API_VERSION
环境变量您应使用以下代码,将 WA_API_VERSION
环境变量设置为当前版本:
export WA_API_VERSION=current-whatsapp-version
与高可用性简介示意图类似,如要启动拥有 1 个资料库容器、1 个网页应用容器、2 个主节点容器和 2 个核心应用容器的高可用性集群,请运行以下命令:
docker-compose -f multiconnect-compose.yml up -d db waweb master1 master2 wacore1 wacore2
所得输出结果应如下所示:
Creating network "biz_default" with the default driver Creating volume "biz_mysqlData" with local driver Creating volume "biz_whatsappMedia" with local driver Creating biz_db_1 ... done Creating biz_waweb_1 ... done Creating biz_master1_1 ... done Creating biz_master2_1 ... done Creating biz_wacore2_1 ... done Creating biz_wacore1_1 ... done
您可以运行以下代码,检查所有容器是否都具有 UP 状态:
docker-compose -f multiconnect-compose.yml ps
所得输出结果应如下所示:
Name Command State Ports -------------------------------------------------------------------------------------------------------------------------------------------------------------- biz_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:33060->3306/tcp, 33060/tcp biz_master1_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:32931->6250/tcp, 0.0.0.0:32930->6251/tcp, 0.0.0.0:32928->6252/tcp, 0.0.0.0:32926->6253/tcp biz_master2_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:32929->6250/tcp, 0.0.0.0:32927->6251/tcp, 0.0.0.0:32925->6252/tcp, 0.0.0.0:32924->6253/tcp biz_wacore1_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:32937->6250/tcp, 0.0.0.0:32935->6251/tcp, 0.0.0.0:32933->6252/tcp, 0.0.0.0:32932->6253/tcp biz_wacore2_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:32939->6250/tcp, 0.0.0.0:32938->6251/tcp, 0.0.0.0:32936->6252/tcp, 0.0.0.0:32934->6253/tcp biz_waweb_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:9090->443/tcp
默认情况下,网页应用容器会在 9090
端口上运行,而数据库容器则会在 33060
端口上运行。
如果不希望使用命令行,您可以下载并配置 Postman 收藏夹,以与 WhatsApp Business API 进行互动。
您可以在 WhatsApp Business API 客户端上使用 API 调用 health
节点,以执行运行状况检查。
所得输出结果应如下所示:
{ "health": { "master1:b28d835cd579": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] }, "master2:7fe542d305b4": { "gateway_status": "unregistered", "role": "primary_master" }, "wacore1:35a5fabfc79d": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] }, "wacore2:05e1a6d70665": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] } } }
由于 WhatsApp Business API 客户端尚未注册,因此响应会将 unregistered
的 gateway_status
显示为主 Master 容器的 gateway_status
。
您可以使用 API 调用 account
节点,以注册 WhatsApp Business API 客户端。
完成注册后,在 WhatsApp Business API 客户端上使用 API 调用 health
节点,以再次执行运行状况检查,确保其中一个核心应用容器的 gateway_status
为 connected
。
所得输出结果应如下所示:
{ "health": { "master1:b28d835cd579": { "gateway_status": "disconnected", "role": "secondary_master" }, "master2:7fe542d305b4": { "gateway_status": "disconnected", "role": "primary_master" }, "wacore1:35a5fabfc79d": { "gateway_status": "connected", "role": "coreapp" }, "wacore2:05e1a6d70665": { "gateway_status": "disconnected", "role": "coreapp" } } }
请注意:在高可用性模式下,仅有一个核心应用(此示例中为 wacore1
)可连接到 Whatsapp 服务器;所有其他节点(包括主 Master)的 gateway_status
状态将为 disconnected
。如果 wacore1
停止工作,则 wacore2
将替代该节点并连接到 Whatsapp 服务器,以维持高可用性。
现在,您已成功在高可用性模式下设置 WhatsApp Business API 客户端。在此模式下,任何时候都仅有一个核心应用会连接到 WhatsApp 服务器,并能随时发送消息。如果您想同时使用多个核心应用发送消息,从而提升消息吞吐量,请遵循下方的设置高可用性多连接集群部分的说明。
使用分片端点设置 2 个分片。您应查看状态为 201 Created
的 HTTP 响应。
您可以在 WhatsApp Business API 客户端上使用 API 调用 health
节点,以执行运行状况检查。
所得输出结果应如下所示:
{ "health": { "master1:b28d835cd579": { "gateway_status": "disconnected", "role": "secondary_master" }, "master2:7fe542d305b4": { "gateway_status": "connected", "role": "primary_master" }, "wacore1:35a5fabfc79d": { "gateway_status": "connected", "role": "coreapp" }, "wacore2:05e1a6d70665": { "gateway_status": "connected", "role": "coreapp" } } }
请注意:在已设置 2 个分片的多连接模式下,2 个核心应用(在此示例中为 wacore1
和 wacore2
)将会连接到 WhatsApp 服务器,而主 Master(在此示例中为 master2
)也将连接到该服务器。
到目前为止,您在此示例中拥有 2 个核心应用容器,而这两个容器将共同分担消息负载。不过,如果其中一个核心应用容器停止工作,则半数消息将无法成功发送。为了在此全新多连接设置中维持高可用性,您可以启用第三个核心应用,以应对其中 1 个核心应用发生故障的情况。这种故障情况与多连接简介示意图所示的情况类似。
如要启用第三个核心应用容器,请运行以下命令:
docker-compose -f multiconnect-compose.yml up -d wacore3
所得输出结果应如下所示:
biz_db_1 is up-to-date biz_waweb_1 is up-to-date biz_master1_1 is up-to-date Creating biz_wacore3_1 ... done
使用 API 调用 health
节点,再次执行运行状况检查以验证所有节点能否正常运行。
所得输出结果应如下所示:
{ "health": { "master1:b28d835cd579": { "gateway_status": "disconnected", "role": "secondary_master" }, "master2:7fe542d305b4": { "gateway_status": "connected", "role": "primary_master" }, "wacore1:35a5fabfc79d": { "gateway_status": "connected", "role": "coreapp" }, "wacore2:05e1a6d70665": { "gateway_status": "connected", "role": "coreapp" }, "wacore3:23b50199bec2": { "gateway_status": "disconnected", "role": "coreapp" } } }
新的核心应用容器(在此示例中为 wacore3
)现已用作备用容器,但当前并未连接到 WhatsApp 服务器。如果 wacore1
或 wacore2
停止工作,则 wacore3
会连接到 WhatsApp 服务器,以将分片总数维持在 2 个。
WA_API_VERSION
环境变量改为新版本请使用以下代码,将 WA_API_VERSION
环境变量更新为新版本编号:
export WA_API_VERSION=new-whatsapp-version
运行以下代码,重启 Docker 容器:
docker-compose -f multiconnect-compose.yml up -d
v2.23.x
和更高版本您现在可使用数据库升级服务,在应用程序运行时升级数据库,从而避免停机。
dbupgrade-compose.yml 文件包含用于指明容器版本的字段。
示例:
services: dbupgrade: image: docker.whatsapp.biz/coreapp:v${WA_API_VERSION:-2.21.3}
如要升级安装程序,请启动 dbupgrade-service 容器,并将 WA_API_VERSION
环境变量设为最新版本:
WA_API_VERSION=new-whatsapp-version docker-compose -f dbupgrade-compose.yml up -d
请注意:无论退出代码为何,如果您使用的编排程序会在退出时重启容器,则请将 EXIT_ON_SUCCESS
环境变量设为 FALSE
并启动服务,以避免在退出代码为 0
时退出容器。
如果数据库升级成功,则容器会退出,且退出代码为 0
。您可使用以下 Docker 命令来追踪状态:
docker wait your-database-upgrade-container-name
此命令会输出 dbupgrade-service 容器的退出代码。
将 WA_API_VERSION
环境变量设为最新版本,然后重启核心应用和网页应用 Docker 容器:
WA_API_VERSION=new-whatsapp-version docker-compose -f multiconnect-compose.yml up -d
强烈建议您在卸载前备份应用程序的当前设置。请遵循备份和恢复文档的说明。
如果您需要通过移除所有容器来重置开发环境,请从包含 multiconnect-compose.yml
文件的目录中运行以下命令:
docker-compose -f multiconnect-compose.yml down
除容器之外,若还要移除 multiconnect-compose.yml
文件中定义的所有卷,请使用 -v
参数运行 down
:
docker-compose -f multiconnect-compose.yml down -v
如要从所有容器中收集记录,请运行以下命令:
docker-compose -f multiconnect-compose.yml logs > debug_output.txt
如要收集特定服务的记录,则请将服务名称(如:waweb
、master1
、wacore1
)附加至 docker-compose logs
命令中:
docker-compose -f multiconnect-compose.yml logs waweb > debug_output.txt
您可以在当前目录的 debug_output.txt
文件中找到相应记录。