文章目录

一、背景

二、负载均衡策略

  • Nginx 默认提供了 以下几 种负载均衡策略:
  1. 轮询(默认):每个请求按时间先后顺序分配到不同的后端服务器;如果后端服务器宕机 ,Nginx能自动排除。
    示例如下:
# 轮询
http{
upstream backend {
server srv1.backend.com;
server srv2.backend.com;
server srv3.backend.com;
}
server {
listen 80;
location / {
proxy_pass http://backend ;
}
}
}
  1. IP 哈希:每个请求按访问 ip 的 hash结果分配,使得每个客户端可以固定访问一个后端服务器,这可以解决会话持久性的问题。
    示例如下:
# IP 哈希
http{
upstream backend {
ip_hash;
server srv1.backend.com;
server srv2.backend.com;
server srv3.backend.com;
}
server {
listen 80;
location / {
proxy_pass http://backend ;
}
}
}
  1. 最少连接:下一个请求将被分派到活动连接数量最少的服务器;不会把过多的请求来使忙碌的应用程序服务器超负荷运行,而是将新的请求分发到不太忙的服务器。
    示例如下:
# 最少连接
http{
upstream backend {
least_conn;
server srv1.backend.com;
server srv2.backend.com;
server srv3.backend.com;
}
server {
listen 80;
location / {
proxy_pass http://backend ;
}
}
}

三、参数

  1. 加权系数:在使用轮询负载均衡策略的时候, 通过服务器进行的请求分配或多或少概率是相等的; 当为服务器的配置指定权重参数时,权重将会作为负载均衡决策的一部分进行计算,即权重越大的服务器将被分配更多的请求访问
    示例如下:
# 轮询 & 加权系数
http{
upstream backend {
server srv1.backend.com weight=5; # 为此服务器增加权重
server srv2.backend.com;
server srv3.backend.com;
}
server {
listen 80;
location / {
proxy_pass http://backend ;
}
}
}
  1. 健康检查参数: 根据健康参数设置值,如果特定服务器的响应失败并出现错误, nginx则会把这台服务器标记为失效,并会尝试在一段时间内避免后续入站的请求选择此服务器

健康检查参数参数

说明

max_fails

允许请求失败的次数

fail_timeout

允许请求失败的次数达到后,服务器暂停转发的时间

示例如下:

# 健康检查
http{
upstream backend {
server srv1.backend.com max_fails=3 fail_timeout=30s ;
server srv2.backend.com max_fails=3 fail_timeout=30s ;
server srv3.backend.com max_fails=3 fail_timeout=30s ;
}
server {
listen 80;
location / {
proxy_pass http://backend ;
}
}
}