查看原文
其他

WAX技术指南第五期:如何构建一个可靠的WAX负载均衡器

NFT Gamer NFT Gamer 2023-02-23
点击蓝字关注我们

原文:EOSphere (Ross Dold) 
翻译:WAX Eastern (NFT Gamer)


我们之前的 WAX 技术指南文章主要关注构建和运行 WAX 软件,但这只是向 WAX 生态系统提供可靠服务的一部分。

WAX 技术指南第 5 期将引导您完成构建和运行负载均衡器服务的过程,以可靠地扩展以满足 WAX 的安全性和性能需求。


01


如何设置可靠的 WAX 负载均衡器


如果您没有提前计划提供公会级服务的负载和可用性要求,那么将您的 WAX 协议网络 API 服务扩展到每天数百万个请求可能是一个挑战。


在基础设施面向公众实施负载均衡器是可靠地扩展 API 服务产品的绝佳方式。


负载均衡器的使用主要有以下好处:

  • 在多个后端服务器之间平衡用户请求

  • SSL 握手和加密/解密卸载

  • 减少后端服务器必须管理应用程序和网络用户会话的负担

  • 为您向互联网上的用户提供的 WAX 服务创建安全分界点


EOSphere 在利用 HAProxy 软件满足我们的负载均衡器要求方面取得了巨大成功。


HAProxy 是一个免费、非常快速且可靠的解决方案,可为基于 TCP 和 HTTP 的应用程序提供高可用性、负载平衡和代理。它特别适合非常高流量的网站,并为世界上许多访问量最大的网站提供支持。近年来,它已成为事实上的标准开源负载均衡器,现在随大多数主流 Linux 发行版一起提供,并且通常默认部署在云平台中。


本文将提供一个示例,说明如何根据我们自己的经验和建议构建和配置 HAProxy 以在 WAX 协议网络上进行使用。


02


要求


硬件(虚拟环境运行效果很好)

注意:根据您收到的流量不同,您可根据需要进行扩展

  • 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证书


03


安装软件


在此示例中,我们将从 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


04


配置


现在您已经安装了全新的 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.crtSectigoRSADomainValidationSecureServerCA.crtUSERTrustRSAAAACA.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.iouse_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



05


保存并开始


现在 haproxy.cfg 文件已成功配置保存并退出。


检查配置是否有错误:

> haproxy -c -V -f /etc/haproxy/haproxy.cfgConfiguration file is valid


重启 HAProxy 服务

> sudo service haproxy restart > sudo service haproxy statusActive: 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 滥用。


END


往期回顾BREAK AWAY


真金不怕火炼——FTX黑天鹅下链游依然坚挺


Alien Worlds挖矿创收新渠道


WAX 2022年回顾及2023路线图更新



防失联,加入橘猫玩家公会:


Telegram:https://t.me/NFTGamerChina

Discord:https://discord.gg/NU82sXeTNs









抢抓机遇,增创优势,创新辉煌。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存