配置健康检查机制确保后端微服务实例不可用时移除
- 使用
ngx_http_upstream_module
模块:在 http
块中定义 upstream
组,并在 server
块中使用该 upstream
。例如:
http {
upstream my_microservices {
server 192.168.1.100:8080;
server 192.168.1.101:8080;
# 配置健康检查参数
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://my_microservices;
}
}
}
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"
:发送的HTTP请求内容,这里是一个简单的HEAD请求。
check_http_expect_alive http_2xx http_3xx
:期望的HTTP响应状态码为2xx或3xx表示服务器健康。
实现动态更新负载均衡配置
- 使用
nginx -s reload
命令:手动更新负载均衡配置文件(例如修改 upstream
组中的服务器列表)后,执行 nginx -s reload
命令,Nginx会重新加载配置文件,实现动态更新。
- 使用
nginx-plus
或第三方工具:
- Nginx Plus:支持动态配置API,可以通过API实时添加、删除或修改后端服务器。例如,可以通过RESTful API接口来管理
upstream
组中的服务器。
- 第三方工具如
confd
:结合配置中心(如Consul、Etcd等)使用。confd
根据配置中心的变化,自动生成Nginx配置文件并触发 nginx -s reload
命令,实现动态更新负载均衡配置。以Consul为例,confd
监听Consul中微服务实例的注册和注销事件,然后动态生成Nginx的 upstream
配置。