Nginx负载均衡详解

  • 1. 负载均衡简介
  • 2. Nginx负载均衡配置状态
  • 3. Nginx负载均衡调度策略
  • 4. Nginx负载均衡示例
  • 1. nginx.conf配置文件
  • 2. upstream.conf配置文件
  • 3. one_server.conf配置文件
  • 4. two_server.conf配置文件
  • 5. three_server.conf配置文件
  • 6. 配置hosts
  • 7. 测试结果


1. 负载均衡简介

  负载均衡是一项基本的网络服务,主要为了解决业务并发压力,增强网络处理能力,减轻单个设备的资源压力,提供整体服务的性能。
  Nginx使用反向代理来实现负载均衡,用到了proxy_pass代理模块,将客户端的请求转发到一组虚拟的服务资源池中。
  Nginx负载均衡与反向代理主要的区别是,反向代理是将请求转发到指定的服务中去处理请求;负载均衡是将请求转发到一组服务资源池中,通过某种策略,将请求固定到某个服务中去处理。

2. Nginx负载均衡配置状态

状态

概述

down

当前的server暂不参与负载均衡

backup

预留的备份服务器,当其他服务器都down机或不可使用时,启用备份服务器,因此此服务器压力是最小的

max_fails

允许请求失败的次数;在fail_timeout时间内,超过max_fail次数,将该服务器标记为不可用,在下一个fail_timeout周期内,再次检测服务器,若服务器可用,就标记为可用。

max_timeout

服务器检测时间,max_fails设置后,必须设置fail_timeout值

max_conns

限制最大的连接数,用于服务器硬件配置不同的情况下

upstream	server	{
	server	IP:8081 down;
	server	IP:8082 backup;
	server	IP:8083 max_fails=1 fail_timeout=10s;
}

3. Nginx负载均衡调度策略

调度算法

概述

轮询

逐一轮询,默认方式

加权(weight)

加权轮询,weight越大,分配的几率越高

ip_hash

安装访问IP的hash结果分配,会将来自同一个IP的请求访问固定到一个后台服务器中,解决session共享问题

url_hash (第三方)

安装访问的URl的hash结果分配

least_conn (第三方)

最少连接数,那个服务器的连接数越小,分配的几率越大

hash关键值 (第三方)

hash自定义的key

#加权轮询
upstream	server	{
	server	IP:8081 weight = 10;
	server	IP:8082 weight = 20;
	server	IP:8083 weight = 30;
}
#hash 关键字
upstream	node	{
    hash $request_uri;
	server	你的IP:8081;
	server	你的IP:8082;
	server	你的IP:8083;
}

4. Nginx负载均衡示例

1. nginx.conf配置文件

#user  node1;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    #default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
   
    keepalive_timeout  65;
	# 在vhosts目录中创建upstream.conf、one_server.conf、two_server.conf、three_server.conf4个配置文件。
    include vhosts/*.conf;
}

2. upstream.conf配置文件

# 加权轮询
upstream serverPool {
	server one_server:8881 max_fails=1 fail_timeout=10s weight=1;
	server two_server:8882 max_fails=1 fail_timeout=10s weight=1;
	server three_server:8883 max_fails=1 fail_timeout=10s weight=1;
}

server {

	listen 8088;

    charset utf-8;

	location / {

		root /home/node1/nginx/html;
		index index.html;
		#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
		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_pass http://serverPool;  #请求转发到服务池
	}
}

3. one_server.conf配置文件

server {
	listen 8881;
	server_name one_server;
	
	location /server {
		echo "我是服务1,很高兴为您服务";
	}
}

4. two_server.conf配置文件

server {
	listen 8882;
	server_name two_server;
	
	location /server {
		echo "我是服务2,很高兴为您服务";
	}
}

5. three_server.conf配置文件

server {
	listen 8883;
	server_name three_server;
	
	location /server {
		echo "我是服务3,很高兴为您服务";
	}
}

6. 配置hosts

vi /etc/hosts
127.0.0.1 one_server
127.0.0.1 two_server
127.0.0.1 three_server

7. 测试结果

nginx 负载均衡熔断 nginx负载均衡的作用_IP