zoukankan      html  css  js  c++  java
  • Nginx四层负载均衡实践

    1.什么是四层负载均衡

    四层负载均衡是基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,他的组装在四层 的基础之上,无论四层还是七层都是指的OSI网络模型。

    2.四层负载均衡应用场景

    1、四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;如:nginx就无法保证自己的服务高可用,需 要依赖LVS或者keepalive。 
    2、如:tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用四层进行端口的转发 就可以了,所以使用四层负载均衡。
    

    四层+七层构建大规模集群架构使用场景
    四层七层构建大规模集群架构.png

    3.四层负载均衡总结

    • 四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53;

    • 四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口号)

    • 四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同事的使用)

    • 四层的转发效率比七层的高得多,但仅支持tcp/ip协议,不支持http和https协议;

    • 通常大并发场景通常会选择使用在七层负载前面增加四层负载均衡。

    4.Nginx四层负载均衡场景实践

    Nginx如何配置四层负载均衡

    1、通过访问负载均衡的5555端口,实际是后端的web01的22端口在提供服务; 
    2、通过访问负载均衡的6666端口,实际是后端的mysql的3306端口在提供服务。
    

    先配置两台lb负载均衡

    [root@lb02 ~]# cat /etc/yum.repos.d/nginx.repo   
    [nginx‐stable]  name=nginx stable repo baseurl=http://nginx.org/packages/centos/7/$basearch/  
    gpgcheck=0  
    enabled=1 
    gpgkey=https://nginx.org/keys/nginx_signing.key 
        
    #在lb02上安装nginx 
    [root@lb02 yum.repos.d]# yum install ‐y nginx 
        
    #在lb02上同步lb01的所有nginx相关配置  
    [root@lb02 ~]# scp ‐r root@172.16.1.5:/etc/nginx /etc/
        
    #启动nginx 
    [root@lb02 conf.d]# nginx ‐t  
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 
    nginx: configuration file /etc/nginx/nginx.conf test is successful  
        
    [root@lb02 conf.d]# systemctl enable nginx  
    Created symlink from /etc/systemd/system/multi‐user.target.wants/nginx.service to  /usr/lib/systemd/system/nginx.service.  
    [root@lb02 conf.d]# systemctl start nginx
    

    ①创建存放四层负载均衡配置文件的目录

    [root@lb02 ~]# vim /etc/nginx/nginx.conf  
    events {          
        ....  
    }  
    include /etc/nginx/conf.c/*.conf;  
    http {          
        .....  
    } 
    [root@lb02 ~]# mkdir /etc/nginx/conf.c
    

    ②配置四层负载均衡

    [root@web03 conf.c]# cat lb_domain.conf   
    stream {      
        upstream lb {              
            server 172.16.1.5:80 weight=5 max_fails=3 fail_timeout=30s;              
            server 172.16.1.6:80 weight=5 max_fails=3 fail_timeout=30s;      
        } 
        server {              
            listen 80;              
            proxy_connect_timeout 3s;              
            proxy_timeout 3s;              
            proxy_pass lb;      
        }  
    }  
    [root@web03 conf.c]# nginx ‐t  
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok 
    nginx: configuration file /etc/nginx/nginx.conf test is successful  
    [root@web03 conf.c]# systemctl reload nginx 
    #配置本机hosts解析后浏览器访问并查看nginx日志
    

    ③四层负载均衡开启日志

    #四层负载均衡是没有access的日志的,因为在nginx.conf的配置中,access的日志格式是配置在http下的,而四层负载均衡配置是在http以外的;
    
    #如果需要日志则需要配置在stream下面  
    
    [root@web03 conf.c]# cat lb_domain.conf   
    stream {      
        log_format  proxy '$remote_addr $remote_port ‐ [$time_local] $status $protocol '                    '"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;           access_log /var/log/nginx/proxy.log proxy;      
        upstream lb {              
            server 172.16.1.5:80 weight=5 max_fails=3 fail_timeout=30s;              
            server 172.16.1.6:80 weight=5 max_fails=3 fail_timeout=30s;      } 
        server { 
            listen 80;              
            proxy_connect_timeout 3s;              
            proxy_timeout 3s;              
            proxy_pass lb;      
        }  
    }
    

    5.Nginx四层负载均衡端口转发

    ①使用nginx四层负载均衡实现tcp的转发

    请求负载均衡 5555    ‐‐‐>     172.16.1.7:22;  请求负载均衡 6666    ‐‐‐>     172.16.1.51:3306;
    

    ②配置nginx四层负载均衡实现tcp的转发

    [root@lb4‐01 ~]# cat /etc/nginx/conf.c/lb_domain.conf   
    stream {      
        log_format  proxy '$remote_addr $remote_port ‐ [$time_local] $status $protocol '                        '"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;       access_log /var/log/nginx/proxy.log proxy; 
        
    #定义转发ssh的22端口      
     upstream ssh_7 {              
         server 10.0.0.7:22;      
        }  
        
    #定义转发mysql的3306端口      
    upstream mysql_51 {              
        server 10.0.0.51:3306;      
        }      
        server {              
            listen 5555;              
            proxy_connect_timeout 3s;              
            proxy_timeout 300s;              
            proxy_pass ssh_7;      
        } 
        server {              
            listen 6666;              
            proxy_connect_timeout 3s;              
            proxy_timeout 3s;              
            proxy_pass mysql_51;      
        }  
    }
    
  • 相关阅读:
    Spring AOP原理
    Spring Boot引入Oracle Jar
    Cookie
    资源验证
    HTTP各种特性
    高性能网络编程之IO和NIO阻塞分析
    Http协议基础及发展历史
    Http原理与实践
    设计模式-回顾
    http://jingyan.baidu.com/article/fcb5aff78e6a48edab4a7146.html
  • 原文地址:https://www.cnblogs.com/centlnx/p/12729215.html
Copyright © 2011-2022 走看看