MST

星途 面试题库

面试题:微服务架构下Nginx负载均衡的高级配置优化

在一个复杂的微服务架构里,Nginx作为负载均衡器,现有大量请求且后端微服务实例性能存在差异。请阐述如何通过Nginx配置实现基于权重的负载均衡,同时结合健康检查机制确保将请求发送到健康的实例上,详细说明配置思路及关键参数。
32.5万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

配置思路

  1. 定义后端服务器组:在Nginx配置文件中,使用upstream指令定义一个后端服务器组,将不同性能的微服务实例添加到该组中。
  2. 设置权重:为每个后端服务器实例设置权重,性能好的实例权重可设高些,性能差的实例权重设低些,以此实现基于权重的负载均衡。
  3. 健康检查机制:使用第三方模块(如ngx_http_upstream_check_module)来实现健康检查,定期向各个后端实例发送请求,根据响应状态判断实例是否健康。

关键参数

  1. upstream
upstream backend {
    server 192.168.1.10:8080 weight=5; # 性能较好的实例,权重为5
    server 192.168.1.11:8080 weight=3; # 性能次之的实例,权重为3
    server 192.168.1.12:8080 weight=2; # 性能较差的实例,权重为2
}
  • server:指定后端服务器的IP地址和端口。
  • weight:设置该服务器的权重,权重值越高,被分配到请求的概率越大。
  1. 健康检查配置(以ngx_http_upstream_check_module为例)
http {
    # 加载健康检查模块
    load_module modules/ngx_http_upstream_check_module.so; 

    upstream backend {
        server 192.168.1.10:8080 weight=5; 
        server 192.168.1.11:8080 weight=3; 
        server 192.168.1.12:8080 weight=2; 

        check interval=3000 rise=2 fall=5 timeout=1000 type=http;
        check_http_send "HEAD / HTTP/1.0\r\n\r\n";
        check_http_expect_alive http_2xx http_3xx;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}
  • check interval=3000:设置健康检查的时间间隔为3000毫秒(3秒)。
  • rise=2:表示连续2次健康检查成功,认为服务器恢复正常。
  • fall=5:表示连续5次健康检查失败,认为服务器不健康。
  • timeout=1000:设置健康检查请求的超时时间为1000毫秒(1秒)。
  • type=http:指定健康检查的类型为HTTP。
  • check_http_send "HEAD / HTTP/1.0\r\n\r\n":设置发送给后端服务器的健康检查请求内容。
  • check_http_expect_alive http_2xx http_3xx:设置期望后端服务器返回2xx或3xx状态码表示服务器健康。