目录

  • Nginx四层负载均衡
  • 四层负载均衡基本概述
  • 四层负载均衡配置
  • 使用stream做端口转发

Nginx四层负载均衡

四层负载均衡基本概述

什么是四层负载均衡

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

四层负载应用场景

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

负载均衡软件

  • nginx
  • 四层负载(nginx 1.9版本以后有stream模块,才可以做四层负载)
  • stream
  • 七层负载
  • upstream
  • LVS
  • 四层负载
  • HAproxy
  • 四层负载
  • 七层负载

四层负载均衡总结

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

四层负载均衡配置

环境准备

主机名

WanIP

LanIP

角色

应用

lb01

10.0.0.5

172.16.1.5

七层负载

nginx

lb02

10.0.0.6

172.16.1.6

四层负载

nginx

web01

10.0.0.7

172.16.1.7

web网站

nginx、php

web02

10.0.0.8

172.16.1.8

web网站

nginx、php

db01

10.0.0.51

172.16.1. 51

数据库

MariaDB

部署四层负载均衡

# 1.添加nginx官方源
[root@lb02 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

# 2.安装nginx
[root@lb02 ~]# yum install -y nginx

# 3.配置四层负载
stream {
    upstream backend {
    	server 172.16.1.5:80;
	}
	server {
		listen 90;
		proxy_pass backend;
	}
}
http{
	...
}

使用stream做端口转发

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

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

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

[root@lb01 ~]# 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;
    }
}