Nginx负载均衡详解

一、负载均衡介绍

1、负载均衡的定义

单体服务器解决不了并发量大的请求,所以,我们可以横向增加服务器的数量(集群),然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。

负载均衡的意思是在服务器集群中,需要有一台服务器作为调度者,客户端所有的请求都由调度者接收,调度者再根据每台服务器的负载情况,将请求分配给对应的服务器去处理。

在这个过程中,调度者如何合理分配任务,保证所有服务器将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡的需要处理的问题了。

2、nginx负载均衡

nginx在 nginx.conf配置文件中通过 upstream模块 和 server模块的配合使用,就可以实现负载均衡。

2.1 upstream 模块

upstream 模块:负载均衡模块,通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。

在http的 upstream模块中,可以通过 server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。

常用的状态有:

  • weight:服务访问的权重,默认是1。
  • down:表示当前的server暂时不参与负载均衡。
  • backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
  • max_fails:在fail_timeout时间内,允许请求最大的失败次数,默认为1。当达到最大失败时,会在fail_timeout时间内不允许再次被选择。,返回 proxy_next_upstream 模块定义的错误。
  • fail_timeout:单位为秒,默认是10秒。指定一段时间内,请求经历了max_fails次失败后,该server不能访问的时间(暂停服务的时间)。max_fails可以和fail_timeout一起使用。

注意:当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是backup。

2.2 nginx负载均衡配置

nginx.conf 负载均衡的基本配置内容如下,以轮询策略为例:

worker_processes  1;events {worker_connections  1024;
}http {# upstream模块:server_group_name 自定义服务组名upstream  server_group_name {# server指令指定后端服务器的IP地址和端口server    localhost:8080;server    192.168.xxx.xxx:8081 down;server    192.168.xxx.xxx:8082  max_fails=3  fail_timeout=20s;server    192.168.xxx.xxx:8083;}# server模块server {listen       80;server_name  localhost;location / {# proxy_pass:代理转发,将单体服务http://127.0.0.1:80,改为服务组名proxy_pass http://server_group_name/;# proxy_redirect default;}}
}

二、Nginx负载均衡实战

浏览效果:在浏览器访问:http://192.168.xxx.xxx/test.html时,由于配置的负载均衡会将请求平均分发到两台服务器中,访问时会出现不同界面。。

1、准备工作

这里准备两台tomcat服务器,一台服务器的端口为8080,另一台服务器的端口为8080;

在这两台tomcat服务器的webapps目录中的 ROOT文件夹中创建一个 test.html文件,用于测试。

# 添加 html文件并加入内容
echo "<h1>This is 8080 Port</h1>" > /usr/local/tomcat8080/webapps/ROOT/test.html
echo "<h1>This is 8080 Port -------</h1>" > /usr/local/tomcat8080/webapps/ROOT/test.html

启动两个tomcat服务。

#启动tomcat8080
/usr/local/tomcat8080/bin/startup.sh

浏览器直接访问tomcat服务。

在这里插入图片描述

2、Nginx负载均衡配置

第一步:修改Nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf

配置内容如下,以轮询策略为例:

worker_processes  1;events {worker_connections  1024;
}http {# upstream模块:自定义服务组名upstream my_tomcat_server {server 192.168.xxx.1xx:8080;server 192.168.xxx.2xx:8080;}server {listen       80;server_name  192.168.xxx.xxx;  # 指定虚拟主机的IP,或者外网域名location / {root   html;# proxy_pass:代理转发,指定我们配置负载均衡的服务名my_tomcat_serverproxy_pass http://my_tomcat_server; index  index.html index.htm; }}
}

第二步:重启Nginx

修改 nginx完之后,保存退出,重启Nginx。

/usr/local/nginx/sbin/nginx -s reload

# 先执行停止命令再执行启动命令
[root@centos7 sbin]# /usr/local/nginx/sbin/nginx -s quit
[root@centos7 sbin]# /usr/local/nginx/sbin/nginx

第三步:浏览器访问OK

在浏览器访问:http://192.168.xxx.xxx/test.html时,由于配置的负载均衡会将请求平均分发到到这两台服务器中,所以,访问时会出现不同界面。

在这里插入图片描述

第四步:关闭服务

#关闭Nginx
/usr/local/nginx/sbin/nginx -s quit
#关闭tomcat
/usr/local/tomcat8080/bin/shutdown.sh
/usr/local/tomcat8080/bin/shutdown.sh

三、Nginx负载均衡分配策略介绍

1、轮询[默认]

轮询方式是Nginx负载默认的方式。

该策略会使得每个请求按时间顺序逐一分配到不同的后端服务器,如果其中某个后端服务器 down 掉,该策略能自动从轮询列表中剔除该服务。

轮询方式是将所有请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

    # upstream模块:自定义服务组名upstream my_tomcat_server {server localhost:8080; # 服务器的ip:portserver 192.168.xxx.xxx:8081;}

2、权重(weight)

该策略会指定每个服务的权重比例,权重越高被分配的客户端(请求)也就越多,weight 和访问比率成正比。主要用于后端服务器性能不均的情况。

  • weight指定轮询权值,默认值为1。通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能。

不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。

    upstream my_tomcat_server {server localhost:8080  weight=2;server 192.168.xxx.xxx weight=5; # 权重设置为5,5>2,所以请求时会多跳转到这个服务}

3、ip_hash(哈希)

该策略会按照每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器。有效解决了动态网页存在的session共享问题。

源地址哈希法:根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。

注意:ip_hash和 weight也可以配合使用。

    upstream my_tomcat_server {ip_hash;server localhost:8080;server 192.168.xxx.xxx; }
# ip_hash和 weight也可以配合使用upstream my_tomcat_server {ip_hash;server localhost:8080  weight=1;server 192.168.xxx.xxx weight=2;}

4、最少连接(least_conn)

该策略会将请求分配到连接数最少的服务上。

    upstream my_tomcat_server {least_conn;server localhost:8080;server 192.168.xxx.xxx; }

5、第三方策略

Nginx支持集成第三方的策略插件。

比如:

  • fair:此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,即响应时间短的优先分配。比上面更加智能的负载均衡算法。下载安装 Nginx的upstream_fair模块。
  • url_hash:按访问 url的 hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。下载安装 Nginx 的hash软件包。

– 求知若饥,虚心若愚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/87479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 读写锁

读写锁是一把锁 /*读写锁的类型 pthread_rwlock_tpthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);int pthread_rwlock_destory(pthread_rwlock_t *rwlock);int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);int pt…

多台群晖实现按计划WOL网络自动唤醒数据冷备份

几年前买了2盘位的DS218&#xff0c;但是随着照片的增加已经不够用。年中购入了4盘位的群晖DS923、2块16T西数数企业级硬盘、1块2T intel企业级 SSD 1.什么是冷备份 冷备是离线备份&#xff0c;备份好的数据可以单独存取&#xff0c;定期冷备可以保证数据安全&#xff0c;适合…

设计模式篇---桥接模式

文章目录 概念结构实例总结 概念 桥接模式&#xff1a;将抽象部分与它的实现部分解耦&#xff0c;使得两者都能够独立变化。 毛笔和蜡笔都属于画笔&#xff0c;假设需要有大、中、小三种型号的画笔&#xff0c;绘画出12种颜色&#xff0c;蜡笔需要3*1236支&#xff0c;毛笔需要…

Unity当中的灯光类型

文章目录 前言一、Directional平行光二、Point点灯三、Spot 聚光灯四、Area面光灯&#xff0c;只用于烘培 前言 Unity当中的灯光类型 一、Directional平行光 Unity当中最重要的灯管类型&#xff0c;类似现实中的太阳光 二、Point点灯 类似现实中的灯泡&#xff0c;萤火虫&a…

java版网页代码生成器系统myeclipse定制开发mysql数据库网页模式java编程jdbc生成无框架java web网页

一、源码特点 java版网页代码生成器系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&#xff0c;使…

力扣:105. 从前序与中序遍历序列构造二叉树(Python3)

题目&#xff1a; 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&am…

指针笔试题讲解

文章目录 题目答案与解析1、234、5、6、7、8、 题目 int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; }//由于还没学习结构体&#xff0c;这里告知结构体的大小是20个字节 //由于还没学习结…

第十二届钧瓷文化旅游节主题曲:让世界看见钧瓷的魅力

下面大禹智库是以产业,古镇,营销为主题专门为第十二届钧瓷文化旅游节创作的《让世界看见钧瓷的魅力》的歌词。 编辑搜图 古镇千年的沉淀,窑火燃烧的传说 传承着古老的技艺,匠人们用心铸就 钧瓷的魅力,吸引着世界的目光 这里的风景,如诗如画,如梦如幻 编辑搜图 钧瓷文…

QT程序打包图片无法正常显示

QT程序打包图片无法正常显示 环境&#xff1a; QT4.8.2VS2017opencv3.416 问题&#xff1a; 本机测试正常&#xff0c;图片可正常显示功能也可正常进行&#xff0c;但打包发送给没有环境数据的电脑上进行测试就会出现图片无法显示的问题。 原因&#xff1a; 并没有找到理论支撑…

代码随想录第34天 | 343. 整数拆分 96.不同的二叉搜索树

343. 整数拆分 /*** param {number} n* return {number}*/ var integerBreak function(n) {let dpnew Array(n1)dp.fill(1)for(let i3;i<n;i)for(let j1;j<i/2;j){dp[i] max(dp[i],max(j*(i-j),dp[i-j]*j))} function max(a,b){return a>b?a:b }return dp[n] }; 想…

Linxu下c语言实现socket+openssl数据传输加密

文章目录 1. Socket连接建立流程2、SocketSSL的初始化流程3、初始化SSL环境&#xff0c;证书和密钥4、SocketSSL 的c语言实现4.1 编写SSL连接函数4.2 编写加密服务端server.c4.3 编写加密客户端client.c 5、使用tcpdump检验源码获取 在进行网络编程的时候&#xff0c;我们通常使…

体育运动模板推荐

最近的朋友圈一半是晒国庆城市布置的美景的&#xff0c;一半当然就是杭州亚运会了。目前杭州亚运会正在如火如荼的进行中&#xff0c;绝美的开幕式&#xff0c;运动健儿们奋力拼搏的精神&#xff0c;在杭州亚运会的舞台上&#xff0c;每个人都是独一无二的英雄。亚运会的舞台&a…

C语言学习(1)—— 环境安装和配置

运行C语言和C程序需要安装MinGW和VSCode。 一. 安装MinGW 1、进入官网下载MinGW&#xff1a;https://sourceforge.net/projects/mingw-w64/files/ 2、解压缩 3、配置环境变量 4、检查是否安装成功 二. 安装VSCode 1、进入官网下载VSCode&#xff1a;https://code.visualstud…

Frp内网穿透

Frp简介 Frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 Frp工作原理&#xff1a; 服务端运行&#xff0c;监听一个主端口&#xff0c;等待…

如何扫描MSI安装文件的路径

今天有个需求&#xff0c;需要扫描已经安装应用, 其中有个华云桌面 其中的UninstallString 值是 MsiExec.exe /X{D20A661B-0CBA-4DE3-A1F6-353D8153725D} 无法直接获取其安装目录&#xff0c; MsiGetProductInfoW 等API INSTALLPROPERTY_INSTALLLOCATION 也不好使 自己写一个…

YTM32的LINFlexD实现UART功能详解

文章目录 引言简介原理与机制同UART模式相关的寄存器时钟与波特率数据缓冲区发送过程接收过程 软件参考文献 引言 初看YTM32B1ME的手册时&#xff0c;一眼看上去&#xff0c;竟然没有找到UART模块的章节&#xff0c;心想这车规MCU的产品定义也太激进了&#xff0c;直接把工业和…

Vue之vue-cli搭建SPA项目

目录 ​编辑 前言 一、vue-cli简介 1. 什么是vue-cli 2. vue-cli的重要性 3. vue-cli的应用场景 二、Vue-cli搭建SPA项目 1. 构建前提&#xff08;node.js安装完成&#xff09; 2. 安装vue-cli 3. 使用脚手架vue-cli(2.X版)来构建项目 4. 分析创建spa项目的八个问题 …

Rust 学习笔记

Rust 学习笔记 Hello world 代码一 fn main() { // 在这里编写你的 Rust 代码 println!("Hello world!"); } 什么是Rust 语言&#xff1f; Rust是一门系统编写语言 &#xff0c;专注于安全 &#xff0c;尤其是并发安全&#xff0c;支持函数式和命令式等编程…

基于规则架构-架构案例2019(三十九)

电子商务 某电子商务公司为了更好地管理用户&#xff0c;提升企业销售业绩&#xff0c;拟开发一套用户管理系统。该系统的基本功能是根据用户的消费级别、消费历史、信用情况等指标将用户划分为不同的等级&#xff0c;并针对不同等级的用户提供相应的折扣方案。在需求分析与架…

计算机网络相关知识点(二)

TCP如何保证传输过程的可靠性&#xff1f; 校验和&#xff1a;发送方在发送数据之前计算校验和&#xff0c;接收方收到数据之后同样需要计算&#xff0c;如果不一致&#xff0c;那么代表传输有问题。 确认应答序&#xff0c;序列号&#xff1a;TCP进行传输时数据都进行了编号…