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 相关文章推荐
Mac环境Nginx配置和访问本地静态资源的实现
Mar 31 Servers
uwsgi+nginx代理Django无法访问静态资源的解决
May 10 Servers
解决xampp安装后Apache无法启动
Mar 21 Servers
Kubernetes控制节点的部署
Apr 01 Servers
使用Docker容器部署rocketmq单机的全过程
Apr 03 Servers
Tomcat starup.bat 脚本实现开机自启动
Apr 20 Servers
docker compose 部署 golang 的 Athens 私有代理问题
Apr 28 Servers
Windows server 2012搭建FTP服务器
Apr 29 Servers
阿里云服务器Ubuntu 20.04上安装Odoo 15
May 20 Servers
Windows server 2016服务器基本设置
Aug 14 Servers
服务器nginx权限被拒绝解决案例
Sep 23 Servers
源码安装apache脚本部署过程详解
Sep 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
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
2015/03/01 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
浅谈Fetch 数据交互方式
2018/12/20 Javascript
js实现简易计算器功能
2019/10/18 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
python3 读写文件换行符的方法
2018/04/09 Python
python版本五子棋的实现代码
2018/12/11 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
python实现扫描局域网指定网段ip的方法
2019/04/16 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
豪华床上用品 :Jennifer Adams
2019/09/15 全球购物
英国领先的游戏零售商:GAME
2019/09/24 全球购物
教师岗位职责范本
2013/12/29 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
观后感开头
2015/06/19 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python
MySQL读取JSON转换的方式
2022/03/18 MySQL
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js