• 第十六章 四层负载均衡


    一、四层负载均衡

    1.什么是负载均衡?

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

     2.应用场景

    1.四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;nginx就无法保证自己的服务高可用,需要依赖LVS或者keepalive。
    2.tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用四层进行端口的转发就可以了,所以使用四层负载均衡。
    3.数据库读写分离负载
    4.跳板机端口映射

     

     

     3.负载均衡的特点

    1、四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53;
    2、四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口号)
    3、四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同事的使用)
    4、四层的转发效率比七层的高得多,但仅支持tcp/ip协议,不支持http和https协议;
    5、通常大并发场景通常会选择使用在七层负载前面增加四层负载均衡。

    二、四层负载均衡实践

    1.环境准备

    主机IP身份
    lb03 10.0.0.6 四层负载均衡
    lb01 10.0.0.4 七层负载均衡
    lb02 10.0.0.5 七层负载均衡

    2.lb02安装nginx

    1.配置yum源
    2.安装nginx
    3.配置nginx
    4.创建用户
    5.启动nginx

    3.推送lb01配置到lb02

    [root@lb01 ~]# scp /etc/nginx/conf.d/* 172.16.1.5:/etc/nginx/conf.d/

    4.测试lb02七层负载均衡

    [root@lb02 ~]# nginx -t
    [root@lb02 ~]# systemctl start nginx

    #配置hosts访问

    5.配置四层负载均衡

    1.四层负载均衡语法
    Syntax: stream { ... }
    Default:
    Context: main

    #示例:四层负载均衡stream模块跟http模块时同一级别,不能配置在http层里面
    stream {
      upstream backend {
          server backend1.example.com:12345 weight=5;
          server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
      }

      server {
          listen 12345;
          proxy_connect_timeout 1s;
          proxy_timeout 3s;
          proxy_pass backend;
      }
    }

    2.配置nginx配置文件
    [root@lb03 ~]# vim /etc/nginx/nginx.conf
    events {
      worker_connections  1024;
    }

    include /etc/nginx/conf.c/*.conf;

    http { ... }

    3.配置四层负载均衡
    [root@lb03 ~]# mkdir /etc/nginx/conf.c
    [root@lb03 ~]# vim /etc/nginx/conf.c/4lb.conf
    stream {
      upstream lbserver {
          server 10.0.0.4:80;
          server 10.0.0.5:80;
      }

      server {
          listen 80;
          proxy_connect_timeout 1s;
          proxy_timeout 3s;
          proxy_pass lbserver;
      }
    }

    #检查配置并启动
    [root@lb03 ~]# nginx -t
    [root@lb03 ~]# systemctl restart nginx
    #如果启动失败,则删除httpc层内容或者删除conf.d的配置文件

    4.配置hosts访问
    10.0.0.6 linux.blog.com linux.zh.com linux.php.com

    #访问

    5.配置四层负载均衡访问日志
    #四层负载均衡是没有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 lbserver {
          server 10.0.0.4:80;
          server 10.0.0.5:80;
      }

      server {
          listen 80;
          proxy_connect_timeout 1s;
          proxy_timeout 3s;
          proxy_pass lbserver;
      }
    }

    三、四层负载均衡做端口转发

    1.请求负载均衡的5555端口,转发至172.16.1.7的22端口

    stream {
      upstream web_7 {
          server 172.16.1.7:22;
      }  

      server {
          listen 5555;
          proxy_pass web_7;
      }
    }

    1.请求负载均衡的6666端口,转发至172.16.1.51的3306端口

    stream {
      upstream mysql {
          server 172.16.1.52:3306;
          server 172.16.1.53:3306;
          server 172.16.1.54:3306;
          server 172.16.1.55:3306;
          server 172.16.1.56:3306;
      }  

      server {
          listen 6666;
          proxy_pass mysql;
      }
    }

     

  • 相关阅读:
    JS的(new Date()).toLocaleString,系统设置为24小时,仍然显示为12小时。
    js中获取时间new date()的用法
    Warning: require(): open_basedir restriction in effect. 宝塔错误
    未定义数组下标: 0
    layui 弹层组件文档
    TP5模版中的运算符
    tp5倒计时还有几天几时几分
    【原创】tp5软件过期提醒
    a标签的title属性 换行
    电子签章盖章之jQuery插件jquery.zsign
  • 原文地址:https://www.cnblogs.com/jhno1/p/13608424.html
Copyright © 2020-2023  润新知