WAX技术指南第五期:如何构建一个可靠的WAX负载均衡器
原文:EOSphere (Ross Dold) 翻译:WAX Eastern (NFT Gamer)
我们之前的 WAX 技术指南文章主要关注构建和运行 WAX 软件,但这只是向 WAX 生态系统提供可靠服务的一部分。
WAX 技术指南第 5 期将引导您完成构建和运行负载均衡器服务的过程,以可靠地扩展以满足 WAX 的安全性和性能需求。
如何设置可靠的 WAX 负载均衡器
如果您没有提前计划提供公会级服务的负载和可用性要求,那么将您的 WAX 协议网络 API 服务扩展到每天数百万个请求可能是一个挑战。
在基础设施面向公众实施负载均衡器是可靠地扩展 API 服务产品的绝佳方式。
负载均衡器的使用主要有以下好处:
在多个后端服务器之间平衡用户请求
SSL 握手和加密/解密卸载
减少后端服务器必须管理应用程序和网络用户会话的负担
为您向互联网上的用户提供的 WAX 服务创建安全分界点
EOSphere 在利用 HAProxy 软件满足我们的负载均衡器要求方面取得了巨大成功。
HAProxy 是一个免费、非常快速且可靠的解决方案,可为基于 TCP 和 HTTP 的应用程序提供高可用性、负载平衡和代理。它特别适合非常高流量的网站,并为世界上许多访问量最大的网站提供支持。近年来,它已成为事实上的标准开源负载均衡器,现在随大多数主流 Linux 发行版一起提供,并且通常默认部署在云平台中。
本文将提供一个示例,说明如何根据我们自己的经验和建议构建和配置 HAProxy 以在 WAX 协议网络上进行使用。
要求
硬件(虚拟环境运行效果很好)
注意:根据您收到的流量不同,您可根据需要进行扩展
2 核+ CPU
32GB+磁盘
1GB+ 内存
公共网络接口
专用网络接口
操作系统
Ubuntu 18.04(推荐)
Ubuntu 20.04(推荐)
x86、x86_64、Alpha、Sparc、MIPS、PARISC 上的 Linux 2.4
x86、x86_64、ARM、AARCH64、MIPS、Sparc、PPC64 上的 Linux 2.6–5.x
UltraSPARC 2 和 3 上的 Solaris 8/9
基于 Opteron 和 UltraSPARC 的 Solaris 10
FreeBSD 4.10 — x86 上的当前版本
OpenBSD 3.1 到 i386、amd64、macppc、alpha、sparc64 和 VAX 上的最新版本(检查端口)
基于 Power™ 架构的 AIX 5.1–5.3
互联网
现代宽带/光纤连接(100Mb/s 同步及以上)
静态公共 IP 地址(终止于此节点或使用 NAT 转发)
域名和 DNS 提供商
SSL证书
安装软件
在此示例中,我们将从 Vincent Berant 维护的社区版推荐的个人包存档 (PPA) 中安装 HAProxy,并使用截止2021 年 11 月的最新版本 HAProxy LTS 分支 v2.4.0(支持到 2026 年第二季度)
此版本原生支持Prometheus,允许您查看和导出指标,并实现出色的可观察性以及日志记录和跟踪。
安装过程
使用以下过程安装 HAProxy v2.4.0:
> sudo apt install --no-install-recommends software-properties-common
> sudo add-apt-repository ppa:vbernat/haproxy-2.4
> sudo apt update
> apt install haproxy=2.4.\*
您可以检查安装的版本,确保可以看到 Prometheus 支持:
> haproxy -vv
Built with the Prometheus exporter as a service
配置
现在您已经安装了全新的 HAProxy,让我们配置生产示例。在此示例中,我们的目标是:
加载平衡传入请求到两个 WAX API nodeos 服务器
给HTTPS 会话的 SSL 加密/解密卸载
使用 Prometheus 服务观察 HAProxy 指标
此示例有一个面向客户端的公共互联网接口,以及一个托管服务器的单独的私有 LAN 接口。
所有 HAProxy 配置都可以在 haproxy.cfg 中找到。配置分为 4 个部分。
global
# global settings go here
defaults
# defaults go here
frontend
# the frontend accepts requests from clients
backend
# servers to fulfill client request go here
有一个默认的 haproxy.cfg ,您可以复制一份以供将来参考:
> sudo mv
/etc/haproxy/haproxy.cfg
/etc/haproxy/old_haproxy.cfg
按照以下步骤配置新的 haproxy.cfg 中的每个部分:
> sudo nano
/etc/haproxy/haproxy.cfg
全球的
global
log /dev/log local0
log /dev/log local1 notice
maxconn 100000
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
tune.ssl.default-dh-param 2048
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11
默认
defaults
log global
mode http
http-reuse always
option httplog
option dontlognull
timeout connect 10000
timeout client 25000
timeout server 25000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
前端
在本节中,您将启用您的公共互联网接口来接受传入的客户端请求,您还将绑定您的 SSL 证书以能够接受 HTTPS 并提供 SSL 卸载。
frontend http-in
bind <PUBLIC IP ADDRESS>:80
bind <PUBLIC IP ADDRESS>:443 ssl crt /etc/ssl/certs/eosphere-local-cert-key-2021.pem alpn h2,http/1.1
http-response set-header Access-Control-Allow-Origin "*"
http-response set-header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, JSNLog-RequestId, activityId, applicationId, applicationUserId, channelId, senderId, sessionId"
EOSphere 使用 Comodo 提供的通配符 SSL 证书,您的结果可能会有所不同,但本示例中的 eosphere-local-cert-key-2021.pem 的结构如下,并按以下顺序排列:
your_company.key
your_company.crt
SectigoRSADomainValidationSecureServerCA.crt
USERTrustRSAAAACA.crt
将上述文件中的文本复制并粘贴到新的单个文件中,并将创建的文件保存到 /etc/ssl/certs/<yourcompany_key>.pem
除了典型的前端配置之外,此示例还将使用访问列表来识别基于请求的目标域的流量。如果您支持具有类似后端请求但具有不同域名的其他 API 服务,这将会很方便。例如 WAX 主网 (wax.eosphere.io) 和 WAX 测试网 (wax-testnet.eosphere.io)。
将以下内容添加到前端 fromtend http-in 部分以覆盖访问列表:
acl wax_acl hdr(host) -i wax.eosphere.io
use_backend wax_api_servers if wax_acl { path_beg /v1/chain }
use_backend wax_api_servers if wax_acl { path_beg /v1/node/get_supported_apis }
此示例匹配对 wax.eosphere.io 的请求
由于我们的后端服务器不支持历史记录,因此我们没有转发 /v1/history .. 您现在开始看到 HAProxy 可以提供的精细控制。
后端
这是指定两个 WAX nodeos 服务器的地方,在这种情况下,负载平衡算法将配置为循环法:
backend wax_api_servers
balance roundrobin
default-server check maxconn 3000
server wax-pn-1 <PRIVATE LAN IP>:8888 cookie server1
server wax-pn-2 <PRIVATE LAN IP>:8888 cookie server2
Prometheus
使用以下附加前端部分启用 Prometheus 服务:
frontend stats
mode http
bind <PRIVATE IP>:8404
option http-use-htx
http-request use-service prometheus-exporter if { path /metrics }
stats enable
stats uri /stats
stats refresh 10s
保存并开始
现在 haproxy.cfg 文件已成功配置保存并退出。
检查配置是否有错误:
> haproxy -c -V -f
/etc/haproxy/haproxy.cfg
Configuration file is valid
重启 HAProxy 服务
> sudo service haproxy restart
> sudo service haproxy status
Active: active (running)
HAProxy 服务器现在将接受由 Prometheus 提供支持的统计仪表板的请求,您可以在其中观察新建的 WAX HAProxy 负载均衡器的运行情况。
HAProxy 统计仪表板
http://<PRIVATE IP>:8404/stats
当然,在将 DNS A 记录指向配置的 HAProxy 公共 IP 地址后,测试对 WAX nodeos 节点负载平衡服务器的外部请求。注意:因为我们有一个访问列表配置为匹配感兴趣的请求,所以测试请求必须使用 DNS 名称而不是 IP 地址进行。
https://<Your Company DNS_Name>/v1/chain/get_info
下一期 WAX 技术指南将研究进一步配置您的负载均衡器以阻止威胁和 API 滥用。
防失联,加入橘猫玩家公会:
Telegram:https://t.me/NFTGamerChina
Discord:https://discord.gg/NU82sXeTNs
抢抓机遇,增创优势,创新辉煌。