温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

服务器运维中Node节点如何实现负载均衡

发布时间:2025-11-14 19:24:13 来源:亿速云 阅读:122 作者:小樊 栏目:系统运维

服务器运维中 Node 节点负载均衡实践

一 架构分层与适用场景

  • 单机多进程:在同一台机器的多个 CPU 核心上运行多个 Node 进程,解决单进程无法吃满多核的问题。适合起步与中小规模,通常与进程管理工具(如 PM2)配合。
  • 节点间反向代理/四层七层负载均衡:用 Nginx/HAProxy 将流量分发到多台机器的多个 Node 实例,适合横向扩容、灰度发布、TLS 终止、缓存与压缩等集中能力。
  • 服务内 RPC 客户端负载均衡:微服务或内部 RPC 调用时,在客户端按策略选择目标实例(如权重、最少连接、一致性哈希),适合服务网格/自研 RPC 框架场景。

二 常用方案与关键配置

  • Nginx 反向代理示例
    • 作用:HTTP/HTTPS 接入、反向代理、负载分发、静态资源与压缩、限流与熔断(按需)。
    • 要点:开启 HTTP/1.1、升级 WebSocket、透传真实客户端信息。
    • 配置片段:
      http {
        upstream node_app {
          server 10.0.1.11:3000;
          server 10.0.1.12:3000;
          server 10.0.1.13:3000;
        }
        server {
          listen 80;
          location / {
            proxy_pass http://node_app;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'Upgrade';
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
          }
        }
      }
      
  • HAProxy 示例
    • 作用:高性能 L4/L7 负载均衡、健康检查、会话保持、权重与最小连接等策略。
    • 配置片段:
      global
        log /dev/log local0
        log /dev/log local1 notice
        daemon
      
      defaults
        log global
        mode http
        option httplog
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms
      
      frontend http_front
        bind *:80
        default_backend http_back
      
      backend http_back
        balance roundrobin
        server node1 10.0.1.11:3000 check
        server node2 10.0.1.12:3000 check
        server node3 10.0.1.13:3000 check
      
  • Node.js 内置 Cluster 模块
    • 作用:单机多进程,利用多核;主进程监控并重启异常工作进程。
    • 要点:优雅关闭、处理未捕获异常、避免端口冲突。
    • 示例:
      const cluster = require('cluster');
      const http = require('http');
      const numCPUs = require('os').cpus().length;
      
      if (cluster.isMaster) {
        for (let i = 0; i < numCPUs; i++) cluster.fork();
        cluster.on('exit', (worker) => cluster.fork());
      } else {
        http.createServer((req, res) => res.end('OK')).listen(3000);
      }
      
  • PM2 进程管理
    • 作用:一键多进程、守护与自动重启、零停机重启、集群模式。
    • 命令:pm2 start app.js -i max(按 CPU 核数启动工作进程)。

三 负载均衡算法选型

  • 轮询(Round Robin):简单均匀,适合节点性能相近。
  • 加权轮询(Weighted RR):按节点能力分配权重,提升整体吞吐。
  • 最少连接(Least Connections):更贴近真实负载,适合长连接/慢请求。
  • 源 IP 哈希(IP Hash):同一客户端固定到同一后端,利于会话保持;扩容时可能不均,可结合一致性哈希优化。
  • 一致性哈希(Consistent Hashing):节点增删时仅影响相邻键,配合虚拟节点可显著改善分布均匀性。

四 健康检查与故障转移

  • 主动健康检查:在 Nginx/HAProxy 中为每个 Node 实例配置 check,自动摘除异常节点;必要时结合应用层心跳接口做更细粒度探测。
  • 进程/实例自愈:使用 PM2 或 systemd 的 Restart=always 策略,主进程监控工作进程退出并重新拉起,减少人工介入。
  • 优雅停机:在负载均衡器摘除节点后,等待现有连接排空再退出进程,避免半开连接与业务中断。

五 部署与运维要点

  • 会话与粘性:无状态优先;如需粘性,使用 IP Hash 或 一致性哈希;跨节点共享会话时结合 Redis 等集中存储。
  • WebSocket/长连接:反向代理需开启 HTTP/1.1 与 Upgrade/Connection 头,确保协议升级与连接复用。
  • 传输与压缩:在 Nginx 侧启用 TLS 终止、压缩与缓存,降低后端压力、提升首包与整体响应。
  • 观测与容量:暴露 /health 与 /metrics,结合日志与链路追踪,按 P95/P99 延迟与错误率动态扩缩容;为关键路径配置超时、重试与熔断策略。
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手