Niginx 集群负载均衡策略

Niginx 集群负载均衡策略

 所需物料

1.Nginx服务

步骤略

本人 nginx version: nginx/1.16.0

2.Java Servlet 测试项目

新建java web 项目,项目名称为:tt

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/IndexServlet")
public class IndexServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public IndexServlet() { }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        //输出Session的Id
        System.out.println("[session-id]	"+request.getSession().getId());
        //制造网络请求延迟效果
        try {
            System.out.println("[-线程睡眠中-]");
            Thread.sleep(3000);
            System.out.println("[-线程睡眠结束-]");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("");
        System.out.println("");
        System.out.println("");
        response.getWriter().append("Served at: ").append(request.getContextPath());
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

3.tomcat部署服务

共启用了3个Tomcat,服务端口分别是:8081、8082、8083;

分别访问 http://localhost:8081/tt/index

分别访问 http://localhost:8082/tt/index

分别访问 http://localhost:8083/tt/index

进行服务验证,看服务是否可以正常访问

 ----------------------------好戏开始了----------------------------

集群调度:轮询(默认)

调度规则:轮询调取集群中的服务;

修改 nginx.conf 配置文件,重启Nginx;

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    #配置集群集合
    upstream tomcatserver1 {
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;   
        server 127.0.0.1:8083;     
    } 
    
    server {  
        listen       80;  
        server_name  localhost;  
        location / {  
            proxy_pass   http://tomcatserver1;  
            index  index.html index.htm;  
        } 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

浏览器多次访问  http://localhost/tt/index 进行测试。会看到3个Tomcat 被轮训调用。

集群调度:ip_hash

调度规则:同一个session会被分配到同一个 服务中,主要解决集群session问题;

修改 nginx.conf 配置文件,重启Nginx;

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    #配置集群集合
    upstream tomcatserver1 {
        #调度方式 ip_hash
        ip_hash; 
        server 127.0.0.1:8081;
        server 127.0.0.1:8082;   
        server 127.0.0.1:8083;     
    } 
    
    server {  
        listen       80;  
        server_name  localhost;  
        location / {  
            proxy_pass   http://tomcatserver1;  
            index  index.html index.htm;  
        } 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

集群调度:Weight

调度规则:根据权重来处理,权重越高被调用的概率越高,主要用于后端服务器性能不均的情况;

修改 nginx.conf 配置文件,重启Nginx;

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    #配置集群集合
    upstream tomcatserver1 {
        #调度方式 Weight
        server 127.0.0.1:8081 weight=3;
        server 127.0.0.1:8082 weight=2;   
        server 127.0.0.1:8083 weight=1;     
    } 
    
    server {  
        listen       80;  
        server_name  localhost;  
        location / {  
            proxy_pass   http://tomcatserver1;  
            index  index.html index.htm;  
        } 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}

集群调度:url_hash

调度规则:相同的url地址会被分配到同一个服务器,用于缓存数据,如:我将系统图片都缓存在了8081、8082服务器,每当我请求图片的时候必须去请求8081 或 8082服务器;

修改 nginx.conf 配置文件,重启Nginx;

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

	#配置集群集合
    upstream tomcatserver1 {
		#调度方式 url_hash
		hash $request_uri;
		server 127.0.0.1:8081;
		server 127.0.0.1:8082;   
		server 127.0.0.1:8083;     
	} 
	
	server {  
        listen       80;  
        server_name  localhost;
	# 假如请求静态资源的路径格式是 localhost:80/tt/state/xx/xx/……		
        location /tt/state {  
            proxy_pass   http://tomcatserver1;  
            index  index.html index.htm;  
        } 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}
原文地址:https://www.cnblogs.com/devan/p/11237016.html