当前位置: 首页 > news >正文

Nginx实现简单的负载均衡

Nginx (engine x) 是一个高性能的HTTP和反向代理服务器。

什么是负载均衡

负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。其意思就是分摊到多个操作单元上进行执行。

简单来说:

当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。

我们有很多台服务器,组成一个服务器集群,当用户访问请求时,先访问一个中间服务器,中间服务器可以分发请求给压力最小的一台服务器,这样,可以让每台服务器的压力趋于平衡。

安装nginx

nginx官方下载

完成安装后,开启nginx,输入127.0.0.1:8080出现下图代表成功

nginx常用命令

启动nginx(windows下start nginx);

nginx -t 查看nginx的配置文件的目录是否配置正确

nginx -s reload 重新载入nginx(当配置信息发生修改时)

nginx -s quit 停止ngix

启动node项目,分别监听3000和3001端口

不懂的童鞋可以查看express hello world实例

如下

配置nginx

1.打开nginx安装目录的conf文件夹下的nginx.conf文件

worker_processes 1;//nginx进程,一般设置为和cpu核数一样
   events{
      worker_connections 1024; //最大连接数(最大并发数)
   }
   http{
   upstream firsttest{  //upstream表示负载服务器池,定义名字为firsttest的服务器池
   #ip_hash;自动定位到第一次的服务器
   #weight 权重
   server 127.0.0.1:3000;
   server 127.0.0.1:3001;
   }
   server {
   listen 8080;//#监听端口
   location / {//# 根目录下
   proxy_pass http://firsttest;//使用那个负载服务器池
   }
   }
   }复制代码

2.访问127.0.0.1:8080

Nginx会将访问8080端口的请求反向代理到3000或者3001上,这就是一个很简单的负载均衡,不断刷新,访问到3000或者3001比例大概是1:1这是默认轮询。

3.我们也可以指定轮询几率,设置权重weight.

weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大,如下,请求落在3000的几率是2/3,落到3001的几率是1/3。

upstream firsttest{
   #ip_hash;自动定位到第一次的服务器
   #weight 权重
   server 127.0.0.1:3000 weight=2;
   server 127.0.0.1:3001;
   }复制代码

4.ip_hash指令

上述方式存在一个问题就是说,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态,这样显然不行。

我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

upstream firsttest{
   #ip_hash;自动定位到第一次的服务器
   #weight 
权重

ip_hash;
   server 127.0.0.1:3000 weight=2;
   server 127.0.0.1:3001;
   }复制代码

这样一个简单的nginx负载均衡就完成了,当然,如果真的要做到真正的负载均衡远远不止这些,还需要配置很多的命令,也需要时间去学习,感谢大家观看。


相关文章:

  • 使用 Newtonsoft.Json 序列化 WPF 的 DependencyObject
  • QQ聊天实录:本年度最动人的爱情故事
  • 手机文件误删除,要怎样恢复?
  • HtmlAttribute HTML属性处理类
  • 当无人编辑坐镇新闻编辑部?未来人机社会共存指南
  • 两个listbox实现选项的添加删除和搜索
  • $jQuery 重写Alert样式方法
  • unbunt的svn重启动命令
  • JQ实现购物车价格计算
  • Android UI开发第二十九篇——Android中五种常用的menu(菜单)
  • 安装配置资产管理软件GLPI
  • 走得不是很前但还是走在时代尖端
  • 一行python 生成终端二维码
  • Node.js 0.8.22 稳定版发布
  • SLAM技能树
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 230. Kth Smallest Element in a BST
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Javascript基础之Array数组API
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • MySQL-事务管理(基础)
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Sass 快速入门教程
  • 笨办法学C 练习34:动态数组
  • 从零开始在ubuntu上搭建node开发环境
  • 服务器从安装到部署全过程(二)
  • 计算机常识 - 收藏集 - 掘金
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 两列自适应布局方案整理
  • 什么软件可以剪辑音乐?
  • 微信小程序设置上一页数据
  • 项目管理碎碎念系列之一:干系人管理
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • !!java web学习笔记(一到五)
  • #AngularJS#$sce.trustAsResourceUrl
  • #stm32整理(一)flash读写
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (1)虚拟机的安装与使用,linux系统安装
  • (6)设计一个TimeMap
  • (a /b)*c的值
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (ZT)一个美国文科博士的YardLife
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (算法)求1到1亿间的质数或素数
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)树状数组
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .Net CF下精确的计时器
  • .NET CLR基本术语
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置