nginx-负载均衡

nginx-负载均衡

  • 前言
  • 一、负载均衡的分类
  • 二、配置负载均衡
  • 三、负载均衡算法
    • [1. 轮询](#1. 轮询)
    • [2. 加权轮询](#2. 加权轮询)
    • [3. 最小连接数](#3. 最小连接数)
    • [4. ip hash](#4. ip hash)
    • [5. 基于url的hash算法](#5. 基于url的hash算法)
    • [6. least_time](#6. least_time)
    • [7. random](#7. random)
  • 四、服务器状态配置
    • [1. bakcup配置](#1. bakcup配置)
    • [2. down配置](#2. down配置)
    • [3. Health checks 健康检查](#3. Health checks 健康检查)
      • [Passive Health Checks](#Passive Health Checks)
      • [Active Health Checks](#Active Health Checks)

前言

反向代理:nginx 作为客户端和后端服务器之间的中间层,客户端直接访问 nginx,Nginx 再将请求转发给后端服务器(客户端不知道实际处理请求的服务器)。
负载均衡池:由多台后端服务器组成的集群,nginx 按规则将请求分配到这些服务器

nginx通过将客户端请求分发到后端多台服务器,将流量 "均匀分配" 到多台服务器,避免单台服务器过载,实现流量均衡、提高系统可用性和扩展性


一、负载均衡的分类

三层负载均衡 在路由器上做负载均衡,到达某个ip地址有多条路由可以走,一般在机房的路由器上实现。 路由器里配置ospf协议支持,等价路由

四层负载均衡 传输层实现,根据ip地址和端口号做转发,支持tcp和udp协议(nginx支持)

七层负载均衡 应用层实现,基于http协议实现 (nginx支持)

从解封装和建立连接角度出发,3层效率 --》4层 --》7层


二、配置负载均衡

在负载均衡器上加载upstream配置

bash 复制代码
# http块中添加
http {
	upstream myweb1 {
		#ip_hash;
		#least_conn;
		#server 192.168.168.136 weight=3;
		server 192.168.168.136;	
		server 192.168.168.137;
	}
   server {
   		# server块中添加
       location / {
           #root   html;
           #index  index.html index.htm;
		# 转发给负载均衡器
		proxy_pass http://myweb1;
       }
	}
}

验证:刷新nginx配置后到浏览器中访问会有轮转效果


三、负载均衡算法

nginx商业网站:HTTP Load Balancing | NGINX Documentation

nginx开源网站:Using nginx as HTTP load balancer

http块中添加

1. 轮询

round-robin :默认 --->简称 rr

bash 复制代码
upstream myweb1 {
	server 192.168.168.136;
	server 192.168.168.137;
}

2. 加权轮询

默认权重值为weight=1,数值越大获得的流量越多

bash 复制代码
upstream myweb1 {
	server 192.168.168.136 weight=3;
	server 192.168.168.137;
}

3. 最小连接数

least-connected: 基于7层的http协议或者4层,先3次握手,建立连接

bash 复制代码
upstream myweb1 {
	least_conn;
	server 192.168.168.136;
	server 192.168.168.137;
}

4. ip hash

基于客户机的ip地址,计算一个hash值,如果hash值一样就一直转发到固定的后端的web服务器。 适合于需要保持session会话信息持久性的场景,购物网站等

bash 复制代码
upstream myweb1 {
	ip_hash;
	server 192.168.168.136;
	server 192.168.168.137;
}

5. 基于url的hash算法

根据请求 URL 的哈希值分配服务器(同一 URL 始终由同一服务器处理)。适合缓存静态资源(需安装第三方模块 ngx_http_upstream_hash_module)

bash 复制代码
upstream backend {
    hash $request_uri consistent;
    server backend1.example.com;
    server backend2.example.com;
}

6. least_time

7. random


四、服务器状态配置

1. bakcup配置

bash 复制代码
http {
    upstream backend {
        server backend1.example.com weight=5;
        server backend2.example.com;
        server 192.0.0.1 backup;  
        # 处于备份状态,前面的服务器挂了,不能用了,才能获得流量。
    }
}

2. down配置

bash 复制代码
upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;  
    # 直接表示这台服务器挂了,不分配流量
}

3. Health checks 健康检查

问题:

1.谁检查谁?

负载均衡器检查后端的真实的web服务器是否在运行网站

2.检查什么?

检查后端的web服务器的网站是否运行

3.如何进行监控检查的呢?

Passive Health Checks

被动检测 --》默认支持

LB向web服务器发起请求报文,但是web服务器没有响应,因此LB才知道web服务器出问题。

fail_timeout 设置必须多次尝试失败才能将服务器标记为不可用的时间,以及将服务器标记为不可用的时间(默认为10秒)
max_fails 设置在fail_timeout服务器标记为不可用的时间内必须发生的失败尝试次数(默认为1次尝试)
backup 备份:当其他的服务器都不提供服务的时候,再启用这台服务器提供服务 --》备胎
slow_start 慢启动 down 将上游的服务器标识为不可用,不会再发送任何的请求给这台服务器

Active Health Checks

主动检查:

LB服务器不管有没有web请求,定期去检查web服务器里的网站是否运行,主动去了解情况。

NGINX Plus 是nginx的商业插件(软件),需要购买的