大型网站高并发处理Nginx+lvs

news/2024/5/9 8:59:18/文章来源:https://blog.csdn.net/qq_38982845/article/details/83593904

一.负载均衡

为啥会出现负载均衡

在海量并发的环境下,用户每一次请求服务器,都需要大量的创建线程,每一次的线程都必须分配资源(CPU、内存、带宽、磁盘 IO等),当资源不足的时候就会使得服务器宕机而无法提供服务。那么如何保证网站在流量峰值时能够顺利运作呢? 首先来介绍几个概念

1.高并发

见名知意,高(大量的),并发就是可以使用多个线程或者多个进程,同时处理(就是并发)不同的操作。简而言之就是每秒内有多少个请求同时访问。

2.负载均衡

负载均衡:将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】,也是分布式系统架构设计中必须考虑的因素之一。

3.tomcat 并发图

在这里插入图片描述
有 tomcat 的并发测试图可以发现,当每秒 300 个请求同时访问tomcat 时,tomcat 已经开始承受不住,出现波动。那么大型网站是如何处理高并发的呢?以下是高并发场景下,实现负载均衡的一个分布式架构图。
在这里插入图片描述
常见互联网分布式架构,分为客户端层、反向代理 nginx 层、站
点层、服务层、数据层。只需要实现“将 请求/ / 数据 均匀分摊到多个
操作单元上执行”,就能实现负载均衡

二.Nginx真面目

1.什么是 Nginx

Nginx 是一款轻量级的 Web 服务器/ 反向代理服务器【后面有介绍】及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev 所开发,其特点是占有内存少,并发能力强,nginx 的并发能力确实在同类型的网页服务器中表现非常好。
•2004 年 10 月 4 日 第一个公开版本 0.1.0 发布。其将源代码以类 BSD 许可证的形式发布。
•官方测试 nginx 能够支撑 5 5 万并发链接,并且 CPU、内存等资
源消耗却非常低,运行非常稳定。

2.哪些地方使用了 Nginx (非常多)

在这里插入图片描述

3.Nginx的优缺点
  1. nginx 相对于 apache 的优点: 轻量级,同样起 web 服务,比 apache 占用更少的内存及资源高并发,nginx
  2. 处理请求是 异步非阻塞(如前端 ajax)的,而 apache 则是阻塞型的,在高并发下 nginx处理请求是 异步非阻塞(如前端 ajax)的,而 apache 则是阻塞型的,在高并发下 nginx能保持低资源低消耗高性能高度模块化的设计,编写模块相对简单 还有,它社区活跃,各种高性能模块出品迅速(十几年时间发展) apache 相对于 nginx 的优点: Rewrite 重写 ,比 nginx 的 rewrite 强大模块超多,基本想到的都可以找到少 bug ,nginx 的 bug 相对较多。(出身好起步高)
  3. Nginx 配置简洁, Apache 复杂

三.Nginx的安装

1.安装依赖
需要的依赖  gcc   openssl-devel   pcre-devel   zlib-devel
安装的步骤  yum -y install gcc openssl-devel pcre-devel zlib-devel

在这里插入图片描述

2. 解压文件
解压   tar -zxvf nginx-1.8.1.tar.gz  (这里是下载好的压缩包)

在这里插入图片描述

3.configure 配置
进入解压后的源码目录,然后执行 configure 命令进行配置(指定安装的位置)
./configure --prefix=/usr/soft/nginx   

在这里插入图片描述

4. 编译并安装
make && make install

在这里插入图片描述

安装好后,会在/usr/soft 下生成 nginx 目录(这是我编译前指定的),这个目录就是 nginx 的软件了。	
5.nginx 的常用命令
启动命令  nginx_home/sbin/nginx

在这里插入图片描述
启动后,访问虚拟机的 80 端口,可查看到以下界面,Nginx 默认监听 80 端口,当出现以上信息,说明安装启动成功。
在这里插入图片描述
一旦 nginx 启动,就可以通过调用带有 -s 参数的可执行文件来控制它。使用语法: nginx -s 信号信号可以是下列之一:

stop     快速关机
quit     优雅的关机
reload   重新加载配置文件
reopen   重新打开日志文件
例如,要重新加载修改后的配置并重启,可以执行以下命令: nginx  -s  reload

四.Nginx 实现高并发的配置

1.nginx配置大览 (下图为要修改的位置)

在这里插入图片描述

#进程数,建议设置和 CPU 个数一样或 2 倍worker_processes 2;
#日志级别error_log logs/error.log warning;(默认 error 级别)
# nginx 启动后的 pid 存放位置
#pid logs/nginx.pid;events {#配置每个进程的连接数,总的连接数= worker_processes * worker_connections# 根据物理内存大小来配置,默认 1024worker_connections 10240;}http {include mime.types;default_type application/octet-stream;sendfile on;#连接超时时间,单位秒keepalive_timeout 65;server {listen 80;server_name localhost#默认请求location / {root html; #定义服务器的默认网站根目录位置index index.php index.html index.htm; #定义首页索引文件的名称}#定义错误提示页面error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}
}
2. 负载均衡配置(轮循的方式,按顺序依次)
nginx 支持以下负载均衡机制(或方法):a) 循环 - 对应用程序服务器的请求以循环方式分发,b) 最少连接数 - 将下一个请求分配给活动连接数最少的服务器c) ip-hash - 哈希函数用于确定下一个请求(基于客户端的 IP地址)应该选择哪个服务器。
Nginx默认为负载平衡配置

使用 nginx 进行负载平衡的最简单配置可能如下所示:

http {upstream sxt{server 192.168.56.123:8080;server 192.168.56.124:8080;server 192.168.56.125:8080;}server {listen 80;server_name localhost;location / {proxy_pass http://sxt;}}
}

在上面的示例中,在upstream sxt 上配置的应用程序3 个实例。如果没有专门配置负载均衡方法,则默认为循环法。所有请求都被 代理到服务器组 sxt,并且 nginx 应用 HTTP 负载平衡来分发请求。

加权负载平衡(也属于轮循方式)

通过使用服务器权重,还可以进一步影响 nginx 负载均衡算法,谁的权重越大,分发到的请求就越多。下面如果有五次请求,那么123的tomcat会访问3次,这个适用于不同的硬件性能不一样的时候,性能好的权重应该更大.

upstream sxt {server 192.168.56.123:8080 weigth=3;server 192.168.56.124:8080;server 192.168.56.125:8080;
}
3.最少连接负载平衡

在连接负载最少的情况下,nginx 会尽量避免将过多的请求分发给繁忙的应用程序服务器,而是将新请求分发给不太繁忙的服务器,避免服务器过载。

upstream sxt {least_conn;server 192.168.56.123:8080;server 192.168.56.124:8080;server 192.168.56.125:8080;
}
4.ip-hash映射的方式

上述的循环或最少连接数的负载平衡方法,每个后续客户端的请求都可能被分发到不同的服务器。不能保证相同的客户端总是定向到相同的服务器。
如果需要将客户端绑定到特定的应用程序服务器 - 换句话说,就是始终选择相同的服务器而言,就要使客户端的会话“粘滞”或“持久” 。ip-hash 负载平衡机制就是有这种特性。使用 ip-hash,客户端的 IP 地址将用作散列键,以确定应该为客户端的请求选择服务器组中的哪台服务器。此方法可确保来自同一客户端的请求将始终定向到同一台服务器,除非此服务器不可用。

upstream sxt{ip_hash;server 192.168.56.123:8080;server 192.168.56.124:8080;server 192.168.56.125:8080;
}
5.Nginx的访问控制

Nginx 还可以对 IP 的访问进行控制,allow 代表允许,deny 代表禁止.Nginx不会遍历查找条件,而是找到第一个限制条件就行了,如192.168.78.1,就为禁止访问啦!

location / {deny 192.168.78.1;allow 192.168.78.1;allow 192.168.78.0/24;allow 10.1.1.0/16;allow 192.168.1.0/32;deny all;proxy_pass http://sxt;
}

五.虚拟主机

1.何为虚拟主机

虚拟主机是指在网络服务器上分出一定的磁盘空间,用户可以租用此部分空间,以供用户放置站点及应用组件,提供必要的数据存放和传输功能。说白了虚拟主机就是把一台物理服务器划分成多个“虚拟”的服务器,各个虚拟主机之间完全独立,在外界看来,每一台虚拟主机和一台单独的主机的表现完全相同。所以这种被虚拟化的逻辑主机被形象地称为“虚拟主机”。

优点:
由于多台虚拟主机共享一台真实主机的资源,每个虚拟主机用户承受的硬件费用、网络维护费用、通信线路的费用均大幅度降低。许多企业建立网站都采用这种方法,这样不仅大大节省了购买机器和租用专线的费用,网站服务器服务器管理简单,诸如软件配置、防病毒、防攻击等安全措施都由专业服务商提供,大大简化了服务器管理的复杂性;同时也不必为使用和维护服务器的技术问题担心,更不必聘用专门的管理人员。

类别:

1、基于域名的虚拟主机,通过域名来区分虚拟主机
2、基于端口的虚拟主机,通过端口来区分虚拟主机
3、基于 ip 的虚拟主机,很少用
2.基于域名的虚拟主机配置
http {upstream shsxt{server 192.168.56.123:8080;server 192.168.56.124:8080;}upstream bjsxt{server 192.168.56.125:8080;server 192.168.56.126:8080;}server {listen 80;//访问 sxt2.com 的时候,会把请求导到 bjsxt 的服务器组里server_name sxt2.com;location / {proxy_pass http://bjsxt;}
}server {listen 80;//访问 sxt1.com 的时候,会把请求导到 shsxt 的服务器组里server_name sxt1.com;location / {proxy_pass http://shsxt;}}}

注意:基于域名的虚拟机主机 在模拟应用场景时,需要在 windows 系统的 hosts文件里配置域名映射。(C:\Windows\System32\drivers\etc\hosts)
在这里插入图片描述
如上图所示,将 sxt1 和 sxt2 的域名映射到 nginx 服务器 IP 上。启动 nginx 后,分别访问 sxt1.com ,sxt2.com
在这里插入图片描述

图 1
在这里插入图片描述
图 2
由图 1,图 2 可看出,当访问 sxt1.com 的时候,nginx 将请求分发给了 tomcat20 和 tomcat21当访问 sxt2.com 的时候,nginx 将请求分发给了 tomcat22.

六.基于端口的虚拟主机

http {upstream shsxt{server 192.168.56.123:8080;server 192.168.56.124:8080;}upstream bjsxt{server 192.168.56.125:8080;server 192.168.56.126:8080;}server {//当访问 nginx 的 80 端口时,将请求导给 bjsxt 组listen 80;server_name localhost;location / {proxy_pass http://bjsxt;}}server {//当访问 nginx 的 81 端口时,将请求导给 shsxt 组listen 81;server_name localhost;location / {proxy_pass http://shsxt;}}
}

当访问 nginx 的 80 端口时,请求被分发给了 tomcat20 和 tomcat21
在这里插入图片描述
在这里插入图片描述
当访问 nginx 的 81 端口时,请求被分发给了 tomcat22
在这里插入图片描述

七.正向代理和反向代理

正向代理

举个栗子:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。像我们经常通过 vpn 访问国外的网站,此时就是正向代理。客户端必须设置正向代理服务器,当然前提是要知道正向代理服的 务器的 IP 地址,还有代理程序的端口。

再比如下面的翻墙:

在这里插入图片描述

反向代理

•反向代理(Reverse Proxy )方式是指以代理服务器来接受 internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器
在这里插入图片描述
反向代理隐藏了真实的服务端,当我们请求 www.baidu.com 的时候,就像拨打 10086 一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,www.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx 就是性能非常好的反向代理服务器,用来做负载均衡。

八.Nginx 的 的 session 的一致性问题

http 协议是无状态的,即你连续访问某个网页 100 次和访问 1次对服务器来说是没有区别对待的,因为它记不住你。那么,在一些场合,确实需要服务器记住当前用户怎么办?比如用户登录邮箱后接下来要收邮件、写邮件,总不能每次操作都让用户输入用户名和密码吧,为了解决这个问题session 的方案就被提了出来,事实上它并不是什么新技术,而且也不能脱离 http 协议以及任何现有的 web 技术session 的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie 的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie 就消失了。

1.Session 共享

首先我们应该明白,为什么要实现共享,如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,但是如果你使用了负载均衡把请求分发到不同的机器呢?这个时候会话 id 在客户端是没有问题的,但是如果用户的两次请求到了两台不同的机器,而它的 session 数据可能存在其中一台机器,这个时候
就会出现取不到 session 数据的情况,于是 session 的共享就成了一个问题

2.Session一致性解决方案
– 1、session 复制

– tomcat 本身带有复制 session 的功能。

– 2、共享 session

– 需要专门管理 session 的软件,
– memcached 缓存服务,可以和 tomcat 整合,帮助 tomcat共享管理 session。

3.安装 memcached
  1. 安装 memcached 内存数据库
    yum -y install memcached
 查看memcached安装的位置:   whereis  memcached验证安装:  memcached -h /etc/rc.d/init.d/memcached status   (这个是默认的位置)查看配置文件:   cat /etc/sysconfig/memcached启动:   memcached  /etc/rc.d/init.d/memcached start重启:   memcached  /etc/rc.d/init.d/memcached restart

在这里插入图片描述

  1. web 服务器连接 memcached 的 jar 包拷贝到 tomcat 的 lib, 还可以在网上下载jar包,方法如下(要在tomcat的lib目录下):
    wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.5.2-2.rf.src.rpm
    rpm -ivh rpmforge-release-0.5.2-2.rf.src.rpm

    1. 配置 tomcat 的 conf 目录下的 context.xml
<ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes="n1:192.168.56.123:11211"sticky="true"lockingMode="auto"sessionBackupAsync="false"requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"sessionBackupTimeout="1000"transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

配置 memcachedNodes 属性,配置 memcached 数据库的 ip 和端口,默认 11211,多个的话用逗号隔开.目的?让tomcat 服务器从memcached缓存里面拿session 或者是放 session

  1. 修改 index.jsp,取 sessionid 看一看
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<html lang="en">SessionID:<%=session.getId()%></br>SessionIP:<%=request.getServerName()%></br><h1>this is tomcat 1</h1>
</html>

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

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

相关文章

“网络白痴”初学SEO成长经验心得

三个月前因为工作上的需要&#xff0c;开始接触网络知识。因为我的工作面对的是网站&#xff0c;负责对网站进行优化&#xff0c;所以在范围那么大的网络知识中只需要学习其中的一小部分就可以了。 网站优化在行业中叫做“seo”(Search Engine Optimization)汉译为搜索引擎优化…

我为什么要做个人网站——互联网乌托邦的理想

2019年3月6日夜&#xff0c;我在qq空间第一次公开我的个人网站。 这是我的第一个网站&#xff0c;不&#xff0c;现在它还不能算是一个网站&#xff0c;因为做好的&#xff0c;仅仅一个欢迎页面&#xff0c;而真正的网站&#xff0c;是要有更丰富的页面和内容的&#xff0c;这是…

电商网站--放大镜效果的实现

最近有做一个PC端的简单官网,主要是进行商品的展示,目前没有收藏,加入购物车,购买的功能,商品详情页有商品图片,各种详细信息的展示,原型上是没有放大镜的功能的,当时有空余时间,我就想着试试放大镜的效果吧,js可以实现,但是网上页有各种插件,不用白不用,那就用插件吧 // 1,,,…

编译安装nginx网站服务与虚拟主机配置

文章目录 一、Nginx简介二、编译安装Nginx&#xff0c;以及优化服务2.1、编译安装nginx2.1.1 xftp导入nginx依赖包2.1.2 yum安装依赖包2.1.3 解压软件包&#xff0c;并配置configure进行编译安装2.1.4 优化执行路径并创建不可登录的程序用户2.1.5 制作管理脚本 2.2 Nginx的访问…

一个小女孩是如何拯救全球第三大社交网站的?

很多互联网产品都从用户那里得到过很大的帮助&#xff0c;最基本的是用户会对自己使用的产品进行评论或者提出建议。但也有用户为自己喜爱的产品做出过巨大的贡献。 2008年印象笔记(Evernote)陷入了困境&#xff0c;账上的钱只够支撑三周。CEO Phil Libin 打算关掉这家公司。 就…

SNS是什么?有哪些类型的SNS网站?

SNS&#xff0c;全称Social Networking Services&#xff0c;即社会性网络服务&#xff0c;专指在帮助人们建立社会性网络的互联网应用服务。SNS若在互联网领域就有三层含义&#xff0c;他们的英文缩写分别是&#xff1a;服务 Social Network Service&#xff0c;软件 Social N…

Mysql在大型网站的应用架构演变

原创文章&#xff0c;转载请注明&#xff1a; 转载自http://www.cnblogs.com/Creator/ 本文链接地址: Mysql在大型网站的应用架构演变 本文已经被多处转载&#xff0c;包括CSDN推荐以及码农周刊等等,阅读数超过5w,回流到我博客流量的还是比较少,不过这不重要, 后续会分享更多技…

使用you-get将网站视频下载到本地的具体操作

周五&#xff0c;我朋友给我一个b站的链接。他想要下载里面的视频。但是电脑上的b站是没有提供下载功能的&#xff0c;身为程序员。当然得帮兄弟这个忙啦。 此次操作我们会用到两个小东西&#xff1a;you-get、ffmpeg you-get使用方法 电脑需要安装python。输入命令 pip3 in…

某网站首页双12 活动 banner主色调选择

文章目录 案例背景 1 检验指标的确定2 确定检验统计量3 埋点收集数据4 确定H0,H15 确定显著性水平6 计算样本量7 利用统计工具实现检验 案例背景 某网站首页双12 活动 banner主色调选择&#xff08;现提供两个版本的banner)&#xff0c; banner 为网站PC端或App 的顶部或底部横…

Hadoop环境中使用Hive工具实现电商网站用户运营分析

文章目录 一、分析目标二、数据说明三、实现步骤1.建立用户指标体系2.建立分阶段用户标签2.1 按用户行为统计每日的不同阶段用户规模2.2 按周为单位分析最近两周的不同阶段用户的变化2.3 对比分析新用户群体与激活用户群体的人群画像、行为数据特点 3、用户复购分析3.1 计算2月…

手把手教你!0基础小白也可以使用谷歌服务器搭建自己的博客网站

准备工作 visa卡&#xff08;用于谷歌的认证&#xff09;fan&#xff08;翻&#xff09;qiang&#xff08;墙&#xff09;工具&#xff08;用于登陆谷歌&#xff09; 一 申请及注册谷歌云 1.登录Google Cloud官网并进行账户注册&#xff1a;https://cloud.google.com/ ,我们…

网站看板娘--偷就完事了(大雾)

最近项目做完了&#xff0c;想到博客园有些博主的博客有看板娘&#xff0c;就偷过来了 下面将一步步还原我偷的过程&#xff08;笑&#xff09; 首先准备一个html&#xff0c;放在tomcat的webapps的文件夹下&#xff0c;下载好的live2d文件夹&#xff08;提取码&#xff1a;d…

基于java的在线答疑网站系统——计算机毕业设计

网络答疑系统已经成为远程教育网站不可缺少的组成部分&#xff0c;它对提高远程教育的质量起着至关重要的作用。但目前的网络答疑系统功能比较简单、答疑效率低、智能性不高。随着人工智能和自然语言处理等相关技术的发展&#xff0c;未来的网络答疑系统将会在智能性、开放性、…

基于java的婚恋交友动态网站——计算机毕业设计

“网络红娘”的出现不仅对传统交友方式和恋爱观形成强烈冲击&#xff0c;更形成了一门具有良好发展前景的新兴产业。与欧美国家相比&#xff0c;我国婚恋网站起步较晚&#xff0c;目前仍处于跑马圈地的群雄纷争时代&#xff0c;一家独大的行业巨头尚未出现。虽然部分专业婚恋网…

Java+MySQL 基于Springboot+vue的鲜花销售商城网站——毕业设计

项目编号:JavaMySQL spring272-基于Springbootvue的鲜花销售商城网站#毕业设计 开发语言&#xff1a;Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue 鲜花一直以来都是人们生活中的一个增色剂。尤其是在一些特殊的节日鲜…

Java+MySQL 基于Springboot+vue的零食销售商城网站——毕业设计

项目编号:JavaMySQL spring271-基于Springbootvue的零食销售商城网站#毕业设计 开发语言&#xff1a;Java 开发工具:IDEA /Eclipse 数据库:MYSQL5.7 应用服务:Tomcat7/Tomcat8 使用框架:springbootvue ​随着人们生活条件的改善&#xff0c;人们对生活的追求也越来越高。…

计算机毕业设计之java+ssm电影视频预约推荐网站

本基于SSM框架的电影预约推荐系统主要包含了等系统用户管理、影视分类管理、电影预约信息管理、预约信息审核管理多个功能模块,系统采用了jsp的mvc框架,SSM(springMvcspringMybatis)框架进行开发. 管理员的登录模块&#xff1a;管理员登录系统对本系统其他管理模块进行管理。 …

计算机毕业设计之java+SSM动物园门票预订网站系统

现代化动物园管理系统日趋复杂&#xff0c;传统的以手工方式为主的管理操作模式&#xff0c;局限性日趋突显&#xff1a;宣传手段单一&#xff0c;管理效率低,系统采用了jsp的mvc框架,SSM(springMvcspringMybatis)框架进行开发,本系统使用mysql&#xff0c;独立运行,不依附于其…

基于jsp+java的音乐网站

介绍&#xff1a; jspservletmysqleclipse技术 效果截图&#xff1a; 数据库表&#xff1a; CREATE TABLE admin ( id int(11) NOT NULL AUTO_INCREMENT, adminName varchar(20) COLLATE utf8_bin DEFAULT NULL, adminPwd varchar(20) COLLATE utf8_bin DEFAULT NULL,…

基于java的出租车预约网站

出租车预约网站能够有效的解决大家上班下班打不到车&#xff0c;加快吃饭逛街的效率&#xff0c;天阴下雨无障碍出行&#xff0c;自己有车不舍得开等问题,使得用户查询车辆信息更加方面快捷&#xff0c;同时便于管理员对车辆和用户的管理&#xff0c;从而给出租车管理公司的预约…