nginx七层负载均衡配置详解


Posted in Servers onJuly 15, 2022

一、负载均衡介绍

1)四层负载均衡

所谓四层就是基于IP+端口的负载均衡

四层负载均衡,是指OSI七层模型中的传输层,传输层已经支持TCP/IP的控制,所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载。

2)七层负载均衡

七层是基于URL等应用层信息的负载均衡

七层负载均衡是在应用层,它可以完成很多应用方面的协议请求

3)四层与七层区别

        四层负载均衡数据在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发,七层负载均衡效率没有四层负载均衡高。

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

        但是四层不支持协议的转发(http,https,DNS等)只支持IP,不识别域名。

        七层负载均衡更贴近于服务,如HTTP协议就是七层协议

        支持很多功能,比如支持http信息的改写、头部信息的改写、安全应用规则控制、URL匹配规则控制、以及转发、rewrite等一些规则,在应用层的服务里面可以做的内容更多。

二、nginx下载安装

1、下载nginx源码包

nginx网站域名:http://nginx.org/

nginx七层负载均衡配置详解

[root@server1 ~]# wget http://nginx.org/download/nginx-1.20.2.tar.gz
 
[root@server1 ~]# ls
nginx-1.20.2.tar.gz
 
[root@server1 ~]# tar -zxf nginx-1.20.2.tar.gz 
[root@server1 ~]# ls
nginx-1.20.2  nginx-1.20.2.tar.gz

2、安装并启用

[root@server1 ~]# cd nginx-1.20.2
[root@server1 nginx-1.20.2]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
 
[root@server1 nginx-1.20.2]# ./configure --help #可以看到可用参数
 
[root@server1 nginx-1.20.2]# ./configure --with-http_ssl_module --with-http_stub_status_module  --prefix=/usr/local/nginx
【注:此命令是安装一些模块,此命令必须在nginx源码目录下执行】

nginx七层负载均衡配置详解

nginx七层负载均衡配置详解

nginx七层负载均衡配置详解

解决:

yum install -y gcc

继续编译

nginx七层负载均衡配置详解

解决:

yum install -y pcre-devel

nginx七层负载均衡配置详解

编译成功

nginx七层负载均衡配置详解

此时生成了文件Makefile,此文件会指导我们进行make(将源码编译成本系统可以用的可执行程序)

nginx七层负载均衡配置详解

make完成后,会在该目录下的objs/nginx下生成nginx执行程序,再进行make install 

nginx七层负载均衡配置详解

完成后所有编译好的nginx程序都在指定的路径 /usr/local/nginx下,做一个软连接链接到/usr/local/bin下

[root@server1 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/  ##建立软连接
[root@server1 ~]# which nginx
/usr/local/bin/nginx

检测语法正确后启动nginx

[root@server1 ~]# /usr/local/nginx/sbin/nginx -t   ##查看语法是否有误
[root@server1 ~]# nginx                            ##启动nginx
[root@server1 ~]# nginx -s reload                  ##重新加载nginx
[root@server1 ~]# nginx -s stop                    ##停掉nginx

nginx七层负载均衡配置详解

访问http://172.25.254.1

nginx七层负载均衡配置详解

注意:不能多次启动nginx,每次启动完成后要用nginx -s stop 关闭nginx,因为80端口不能被多次占用

三、nginx七层负载均衡配置

/usr/local/bin/nginx/nginx.conf 为nginx的主配置文件

real server设置:

开启server2、server3虚拟机做负载均衡后端服务器

[root@server2 ~]# systemctl start httpd
echo server2 > /var/www/html/index.html
[root@server3 ~]# systemctl start httpd
echo server3 > /var/www/html/index.html

nginx配置:

nginx七层负载均衡配置详解

补:

可以加权重

nginx七层负载均衡配置详解

也可以更换负载均衡算法

nginx七层负载均衡配置详解

如要升级real server,手动下线

nginx七层负载均衡配置详解

自己写一个模块:

nginx七层负载均衡配置详解

修改配置文件后:

[root@server1 ~]# nginx -t
[root@server2 ~]# nginx -s reload

客户端设置:

[root@westos_student72 westos]# vim /etc/hosts
172.25.254.1 server1  www.westos.org

测试:

[root@westos_student72 westos]# curl www.westos.org
server2
[root@westos_student72 westos]# curl www.westos.org
server3
[root@westos_student72 westos]# curl www.westos.org
server2
[root@westos_student72 westos]# curl www.westos.org
server3
[root@westos_student72 westos]# curl www.westos.org
server2
[root@westos_student72 westos]# curl www.westos.org
server3

关闭server2的httpd服务:

[root@westos_student72 westos]# for i in {1..10}; do curl www.westos.org;done
server3
server3
server3
server3
server3
server3
server3
server3
server3
server3

nginx不再对server2进行调度,说明nginx对后端自带健康检测。

若此时再把server3挂掉:

nginx七层负载均衡配置详解

系统报错,没有可用后端 ,此时我们可以这样设置:

nginx七层负载均衡配置详解

四、nginx扩充调度算法(sticky)

ip_hash调度算法比较符合客户使用习惯,算法为了保证连接稳定根据客户端ip进行负载均衡,相同客户端IP访问时,会访问到同一服务端,一个sever对一个IP。

ip_hash算法缺陷在于:客户端发送请求到nginx服务器,再由nginx服务器到后端RS,后端RS再返回到nginx服务器再返回客户端,所以后端RS不知道是谁访问了自己。

改进:可以用Sticky cookie来实现,类似于浏览器的cookie。客户端发送请求时,后端RS返回信息时会将session信息传回客户端,客户端存到浏览器中,这是RS分配给每一个客户端的,以后每次请求RS就通过这个cookie来判断是哪个客户端。

nginx七层负载均衡配置详解

开源文档中显示此功能只有Nginx Plus才有,此时我们就要先扩充一下我们的调度算法:加上sticky模块重新编译。

1.下载扩展包

扩展包名字:nginx-goodies-nginx-sticky-module-ng-08a395c66e42.zip

下载扩展包,安装解压工具并解压

nginx七层负载均衡配置详解

2.编译前做一些优化:

1、关闭gcc的debug模式,这样编译出的二进制程序会更小

[root@server1 nginx-1.20.2]# vim auto/cc/gcc

nginx七层负载均衡配置详解

2、关闭版本显示

[root@server1 nginx-1.20.2]# vim src/core/nginx.h

nginx七层负载均衡配置详解

3.重新编译

由于nginx是静态编译,所以每次增加新功能时都需要重新编译,而且要加载之前的所有参数

[root@server1 nginx-1.20.2]# cd nginx-1.20.2
[root@server1 nginx-1.20.2]# nginx -s stop ##编译前停掉nginx
[root@server1 nginx-1.20.2]# make clean  ##清除原来编译的内容
 
[root@server1 nginx-1.20.2]# ./configure --with-http_ssl_module --with-http_stub_status_module --prefix=/usr/local/nginx --add-module=/root/nginx-goodies-nginx-sticky-module-ng-08a395c66e42

nginx七层负载均衡配置详解

编译make

[root@server1 nginx-1.20.2]# make

注意不要进行make install安装,因为软件已经安装过,现在直是去更新,执行make install 会进行覆盖安装

覆盖原二进制程序

[root@server5 nginx-1.20.2]# cd objs/
[root@server5 objs]# ls
[root@server5 objs]# du -h nginx
[root@server5 objs]# cp nginx /usr/local/nginx/sbin/
cp: overwrite ‘/usr/local/nginx/sbin/nginx'? y
[root@server5 objs]# cd /usr/local/nginx/sbin/
[root@server5 sbin]# ls
nginx
[root@server5 sbin]# du -h nginx 
936K	nginx

测试:

此时nginx就有了sticky的cookie功能

nginx七层负载均衡配置详解

  检测语法没问题后启动nginx:

nginx七层负载均衡配置详解

 用浏览器访问才能看见效果,因为cookie只能存在于浏览器

nginx七层负载均衡配置详解

nginx七层负载均衡配置详解

此时我们发现用浏览器访问只能访问到server2,而用curl压测是负载均衡的。因为浏览器缓存了cookie值,cookie值不变,后端响应的RS也不会变。

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


Tags in this post...

Servers 相关文章推荐
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
Jun 21 Servers
使用Apache的rewrite
Mar 09 Servers
Nginx设置日志打印post请求参数的方法
Mar 31 Servers
Nginx 根据URL带的参数转发的实现
Apr 01 Servers
nginx结合openssl实现https的方法
Jul 25 Servers
Nginx缓存设置案例详解
Sep 15 Servers
Nginx源码编译安装过程记录
Nov 17 Servers
Linux安装apache服务器的配置过程
Nov 27 Servers
Tomcat starup.bat 脚本实现开机自启动
Apr 20 Servers
Nginx利用Logrotate实现日志分割
May 20 Servers
Windows10安装Apache2.4的方法步骤
Jun 25 Servers
Nginx报错104:Connection reset by peer问题的解决及分析
Jul 23 Servers
Linux安装Docker详细教程
Jul 07 #Servers
Docker安装MySql8并远程访问的实现
Jul 07 #Servers
Docker部署Mysql8的实现步骤
Jul 07 #Servers
教你nginx跳转配置的四种方式
kubernetes集群搭建Zabbix监控平台的详细过程
GPU服务器的多用户配置方法
Jul 07 #Servers
如何让你的Nginx支持分布式追踪详解
You might like
CI框架中$this->load->library()用法分析
2016/05/18 PHP
jquery.tmpl JQuery模板插件
2011/10/10 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
2015/02/17 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
Vue中插入HTML代码的方法
2018/09/21 Javascript
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
Python shutil模块用法实例分析
2019/10/02 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
上海雨人软件技术开发有限公司测试题
2015/07/14 面试题
高级护理专业大学生求职信
2013/10/24 职场文书
小学生红领巾广播稿
2014/01/21 职场文书
创先争优公开承诺书
2014/08/30 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
公司股东出资证明书
2014/11/01 职场文书
大学军训决心书
2015/02/05 职场文书
高校自主招生教师推荐信
2015/03/23 职场文书
python垃圾回收机制原理分析
2022/04/13 Python