面试题答案
一键面试配置思路
- 定义上游服务器组:将所有微服务实例添加到一个上游服务器组中,并为每个实例设置权重。
- 健康检查:利用Nginx的健康检查模块(如ngx_http_upstream_module提供的功能)来检测服务实例的健康状态。
- 负载均衡策略应用:在HTTP或其他相关上下文中引用上游服务器组,实现基于权重和健康检查的负载均衡。
相关配置指令
-
upstream指令:定义上游服务器组。
upstream backend { server backend1.example.com weight=5; server backend2.example.com weight=3; server backend3.example.com weight=2; }
server
:指定后端服务器地址。weight
:设置服务器权重,权重越高,分配到的请求越多。
-
健康检查相关指令(以ngx_http_upstream_module默认健康检查机制为例):
- Nginx默认会尝试连接后端服务器,如果连接成功则认为服务器健康。在较新版本中也可通过第三方模块如
ngx_http_upstream_check_module
实现更复杂的健康检查(如HTTP、TCP等协议的详细状态检查)。假设使用默认机制,无需额外配置健康检查指令即可实现基本的健康实例判断。若使用ngx_http_upstream_check_module
模块,配置如下:
upstream backend { server backend1.example.com weight=5; server backend2.example.com weight=3; server backend3.example.com 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; }
check
:开启健康检查,interval
表示检查间隔(单位毫秒),rise
表示连续成功多少次认为服务器恢复健康,fall
表示连续失败多少次认为服务器不健康,timeout
表示检查超时时间(单位毫秒),type
表示检查类型,这里是http
类型。check_http_send
:指定发送的HTTP检查请求内容。check_http_expect_alive
:指定认为服务器健康的HTTP响应状态码。
- Nginx默认会尝试连接后端服务器,如果连接成功则认为服务器健康。在较新版本中也可通过第三方模块如
-
proxy_pass指令:在HTTP上下文中将请求转发到上游服务器组。
server { listen 80; server_name your_domain.com; location / { proxy_pass http://backend; 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; } }
proxy_pass
:指定将请求转发到名为backend
的上游服务器组。- 其他
proxy_set_header
指令用于设置转发请求时的一些HTTP头信息。