Hetzner 上的负载均衡
Hetzner Cloud 是一家提供广泛服务的云托管提供商。在本指南中,我们将向您展示如何在使用 Coolify 的 Hetzner Cloud 上部署负载均衡应用。
简介
您的应用正在增长,您需要对其进行扩展。扩展应用最常见的方法之一是使用负载均衡器。负载均衡器将传入流量分发到多台服务器上,确保没有单台服务器过载。这有助于提高应用的性能和可靠性。
在本指南中,我们将展示如何在使用 Coolify 的 Hetzner Cloud 上部署负载均衡应用。我们将使用两台(或更多)服务器来托管应用,并使用负载均衡器分发传入流量。如果需要,我们还将展示如何设置数据库服务器。
提示
整套基础设施每月成本约为 15 欧元。
前提条件
- 由 Hetzner Cloud 管理的域名
- Hetzner Cloud 上的 2 台(或更多)服务器
- Hetzner Cloud 上的负载均衡器
- 限制访问服务器的防火墙规则
- 可选:Hetzner Cloud 上的数据库服务器
步骤
-
购买服务器
首先,您需要在 Hetzner Cloud 上购买两台(或更多)服务器。您可以根据需求选择服务器类型和位置。请确保选择的服务器拥有足够的资源来运行您的应用。
注意
请确保为您的服务器创建并附加一个私有网络。这将允许您的服务器通过私有网络相互通信。
如果您还没有 Hetzner Cloud 账户,可以通过此推荐链接注册。
-
在 Coolify 中添加并验证它们
购买服务器后,您需要将它们添加到 Coolify。您可以在 Coolify 仪表板中点击
Add Server按钮并按照说明操作。Coolify 将自动在您的服务器上安装必要的软件。
-
可选:部署您的数据库
建议为应用使用独立的数据库服务器。这不仅出于性能考虑,也出于安全考虑。此外,这样您还可以将应用连接到集中的数据库服务器。
如果您不需要数据库服务器,或者已经在其他地方托管了数据库,请跳过此步骤。
购买数据库服务器并添加到 Coolify 后,在其上部署您首选的数据库类型(MySQL、PostgreSQL 等)。
注意
本指南不使用反向代理。我们将把数据库绑定到服务器的公网 IP 地址。我们将使用防火墙限制对数据库服务器的访问。
您可以在 Server 选项卡中停止它们,并将代理类型切换为 None。
请确保正确设置 Ports Mappings,以允许应用服务器连接到数据库服务器。
- PostgreSQL:
5432:5432 - MySQL:
3306:3306 - MariaDB:
3306:3306 - MongoDB:
27017:27017
-
部署您的应用
现在是将应用部署到应用服务器上的时候了。部署细节将取决于您部署的应用类型。
使用 Coolify,您可以将多台服务器附加到同一个应用。这将允许您在多台服务器上部署应用。
注意
本指南不使用反向代理。我们将把应用绑定到服务器的公网 IP 地址,因为路由将由负载均衡器处理。
您可以在 Server 选项卡中停止它们,并将代理类型切换为 None。
请确保正确设置 Ports Mappings,以将应用端口转发到服务器的公网 IP 地址。
如果应用使用数据库,请确保更新数据库连接字符串以指向数据库服务器。
提示
Hetzner Cloud 提供私有网络功能,允许您通过私有网络连接服务器。这有助于提高应用的安全性和性能。
请确保在服务器上启用私有网络功能,并在数据库连接字符串中使用它。
在浏览器中访问服务器的公网 IP 地址和端口,测试应用是否正常工作。
-
添加并配置负载均衡器
现在是将负载均衡器添加到您的服务器以分发传入流量的时候了。
该负载均衡器将执行以下操作:
- 将传入流量分发到多台服务器
- 终止 TLS 连接(通过 HTTPS 确保应用安全,并将流量通过 HTTP 转发到您的服务器)
- 对服务器进行健康检查,并将流量路由到健康的服务器
您的应用在两台服务器上的
port 8000端口运行,并且您拥有一个域名example.com。- 进入 Hetzner Cloud 控制台,在左侧边栏点击
Load Balancers。 - 点击
Create Load Balancer按钮。 - 选择服务器所在的区域。
- 选择为您服务器创建的私有网络。
- 在目标部分选择所有服务器。**重要提示:
(use the private network)。 - 在服务(services)部分,删除默认服务并添加
TLS Termination预定义服务。 - 在
Destination Port中输入8000(源端口应为443)。 - 为您的域名添加证书。系统将使用 Let's Encrypt 为您的域名生成证书。
- 在
health check部分,将健康检查端点配置为您的应用健康检查端点。(只需一个返回200 OK的端点即可)。 - 可选:可以启用粘性会话(Sticky sessions),这将确保用户在一段时间内始终被路由到同一台服务器,否则负载均衡器将随机将流量分发到多台服务器。
- 选择一种算法。
- 最后,为您的负载均衡器命名并点击
Create & Buy now。
等待负载均衡器创建完成并变为健康状态。一旦健康,您可以检查是否可以通过负载均衡器的 IP 地址访问您的应用。
-
设置 DNS
现在是将您的域名指向
load balancer's IP address的时候了。您可以通过在域名提供商的 DNS 设置中添加A记录来实现。- 进入您的 DNS 设置。
- 添加一条
A记录,域名为您的域名,值为负载均衡器的 IP 地址。 - 保存更改并等待 DNS 更改生效。
DNS 更改生效后,您应该能够通过域名访问您的应用。
-
设置防火墙
Hetzner Cloud 提供防火墙功能,允许您限制对服务器的访问。我们将使用此功能来限制对服务器的访问。
由于负载均衡器通过私有网络与您的服务器通信,我们只需为公网 IP 地址添加规则。
Inbound(入站)规则包含所有允许的内容。默认情况下,其他所有流量均被阻止。- 进入 Hetzner Cloud 控制台,在左侧边栏点击
Firewalls。 - 点击
Create Firewall按钮。 - 在
Inbound规则中添加针对您 IP 地址的 SSH 访问规则。 - 将您的服务器添加到
Apply rule部分。 - 为您的防火墙命名并点击
Create Firewall。
- 进入 Hetzner Cloud 控制台,在左侧边栏点击
提示
可选:如有需要,您可以添加更多规则以允许访问特定端口或 IP 地址。
