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 相关文章推荐
Apache压力测试工具的安装使用
Mar 31 Servers
nginx前后端同域名配置的方法实现
Mar 31 Servers
Nginx进程管理和重载原理详解
Apr 22 Servers
Nginx四层负载均衡的配置指南
Jun 11 Servers
Nginx反向代理至go-fastdfs案例讲解
Aug 02 Servers
详解使用内网穿透工具Ngrok代理本地服务
Mar 31 Servers
Kubernetes中Deployment的升级与回滚
Apr 01 Servers
nginx七层负载均衡配置详解
Jul 15 Servers
windows server2016安装oracle 11g的图文教程
Jul 15 Servers
Nginx如何配置根据路径转发详解
Jul 23 Servers
win7配置本地ftp服务器的图文教程
Aug 05 Servers
源码安装apache脚本部署过程详解
Sep 23 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
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
ExtJS 简介 让你知道extjs是什么
2008/12/29 Javascript
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
Python实现的检测网站挂马程序
2014/11/30 Python
python实现多线程的两种方式
2016/05/22 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
python中dict()的高级用法实现
2019/11/13 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
爱心倡议书范文
2014/05/12 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
学习保证书
2015/01/17 职场文书
教师节感谢信
2015/01/22 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
2016年万圣节家长开放日活动总结
2016/04/05 职场文书
Win11 BitLocker 驱动器加密
2022/04/19 数码科技