Nginx四层负载均衡的配置指南


Posted in Servers onJune 11, 2021

一、四层负载均衡介绍

什么是四层负载均衡

所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。

Nginx四层负载均衡的配置指南

Nginx四层负载均衡的配置指南

应用场景

1.四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;

2.负载均衡可以做端口转发

3.数据库读写分离

四层负载均衡特点

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

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

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

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

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

二、四层负载均衡环境搭建

环境准备

主机 IP 身份
lb4 172.16.1.6,10.0.0.6 四层负载均衡
lb01 172.16.1.4,10.0.0.4 七层负载均衡
lb02 172.16.1.5,10.0.0.5 七层负载均衡

lb4和lb02搭建Nginx

# 配置yum源
[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

# 安装Nginx
[root@lb02 ~]# yum install nginx -y
[root@lb4 ~]# yum install nginx -y

# 创建用户
[root@lb02 ~]# groupadd www -g 666 && useradd www -u 666 -g 666 -s /sbin/nologin -M
[root@lb4 ~]# groupadd www -g 666 && useradd www -u 666 -g 666 -s /sbin/nologin -M

# 配置nginx
[root@lb02 ~]# vim /etc/nginx/nginx.conf 
user  www;
[root@lb4 ~]# vim /etc/nginx/nginx.conf 
user  www;

# 启动Nginx
[root@lb4 ~]# systemctl start nginx && systemctl enable nginx && systemctl status nginx
[root@lb02 ~]# systemctl start nginx && systemctl enable nginx && systemctl status nginx

将lb01配置同步到lb02

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

测试lb02的负载均衡

[root@lb02 ~]# nginx -t && systemctl restart nginx

#配置hosts测试
10.0.0.5 linux.wp.com

三、配置四层负载均衡

四层负载均衡语法

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;
    }
}

配置nginx主配置文件

[root@lb4 ~]# vim /etc/nginx/nginx.conf
#注释http层所有内容
user  www;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
#添加一个包含文件
include /etc/nginx/conf.c/*.conf;
#http {
#    include       /etc/nginx/mime.types;
#    default_type  application/octet-stream;
#    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                      '$status $body_bytes_sent "$http_referer" '
#                      '"$http_user_agent" "$http_x_forwarded_for"';
#    access_log  /var/log/nginx/access.log  main;
#    sendfile        on;
#    #tcp_nopush     on;
#    keepalive_timeout  65;
#    #gzip  on;
#    include /etc/nginx/conf.d/*.conf;
#}

配置四层负载均衡

#创建目录
[root@lb4 ~]# mkdir /etc/nginx/conf.c

#配置
[root@lb4 ~]# vim /etc/nginx/conf.c/linux.lb4.com.conf
stream {
    upstream lbserver {
        server 10.0.0.4:80;
        server 10.0.0.5:80;
    }

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

# 启动Nginx
[root@lb4 ~]# nginx -t && systemctl start nginx

# 配置hosts访问
10.0.0.6 linux.lb4.com

四层负载均衡配置日志

#四层负载均衡是没有access的日志的,因为在nginx.conf的配置中,access的日志格式是配置在http下的,而四层负载均衡配置是在http以外的;

#如果需要日志则需要配置在stream下面
[root@lb4 ~]# vim /etc/nginx/conf.c/linux.lb4.com.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_pass lbserver;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
    }
}

#查看所有web服务器日志
[root@web01 ~]# tail -f /var/log/nginx/access.log
[root@web02 ~]# tail -f /var/log/nginx/access.log

四、四层负载端口转发

请求负载均衡的5555端口,跳转到web01的22端口

#简单配置
stream {
	server {
        listen 5555;
        proxy_pass 172.16.1.7:22;
	}
}

#一般配置
stream {
    upstream ssh_7 {
        server 10.0.0.7:22;
    }

    server {
        listen 5555;
        proxy_pass ssh_7;
    }
}

# 测试
[D:\~]$ ssh root@10.0.0.6:5555
成功跳转

请求负载均衡的6666端口,跳转至172.16.1.51:3306

stream {
    upstream db_51 {
        server 172.16.1.51:3306;
    }
    
    server {
        listen 6666;
        proxy_pass db_51;
    }
}

数据库从库的负载均衡

stream {
    upstream dbserver {
        server 172.16.1.51:3306;
        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 5555;
        proxy_pass dbserver;
    }
}

总结

到此这篇关于Nginx四层负载均衡配置的文章就介绍到这了,更多相关Nginx四层负载均衡内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
Jun 21 Servers
Nginx的rewrite模块详解
Mar 31 Servers
Nginx优化服务之网页压缩的实现方法
Mar 31 Servers
详解Nginx 工作原理
Mar 31 Servers
图文详解Nginx版本平滑升级方案
Sep 15 Servers
总结高并发下Nginx性能如何优化
Nov 01 Servers
nginx中封禁ip和允许内网ip访问的实现示例
Mar 17 Servers
Windows Server 2019 安装DHCP服务及相关配置
Apr 28 Servers
Vscode中SSH插件如何远程连接Linux
May 02 Servers
CentOS7安装MySQL8的超级详细教程(无坑!)
Jun 10 Servers
本地搭建minio文件服务器(使用bat脚本启动)的方法
Jul 15 Servers
配置nginx 重定向到系统维护页面
Jun 08 #Servers
nginx配置文件使用环境变量的操作方法
Jun 02 #Servers
nginx+lua单机上万并发的实现
May 31 #Servers
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
Nginx配置Https安全认证的实现
May 26 #Servers
nginx部署多前端项目的几种方法
You might like
是否存在第一台收音机的说法
2021/03/01 无线电
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
详解PHP归并排序的实现
2016/10/18 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
json简单介绍
2008/06/10 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
python实现解数独程序代码
2017/04/12 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
Pandas操作CSV文件的读写实现方法
2019/11/13 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
保送生自荐信范文
2013/10/06 职场文书
文史专业毕业生自荐信
2013/11/17 职场文书
给实习单位的感谢信
2014/02/01 职场文书
11月升旗仪式讲话稿
2014/02/15 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
村党支部书记承诺书
2014/05/29 职场文书
2014年中秋寄语
2014/08/11 职场文书
党员个人承诺书
2015/04/27 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书