• 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;
            }
        }
    
    }
    
  • 相关阅读:
    AtCoder Regular Contest 066 F Contest with Drinks Hard
    AtCoder Grand Contest 002 D
    AtCoder Regular Contest 076 F
    AtCoder Grand Contest 004 C
    AtCoder Regular Contest 067 F
    转载:Unity3D游戏对象消失enabled、Destroy与active的区别
    Unity3d-AngryBots实例解读
    本类对象的引用作为参数,可以直接访问其私有成员
    构建完全二叉树、控制台打印二叉树
    转载:C++类内存分布
  • 原文地址:https://www.cnblogs.com/devan/p/11237016.html
Copyright © 2020-2023  润新知