高并发负载均衡——nginx与lvs

时间:2022-09-21 00:22:05

一、企业级web项目架构

一、企业级web项目架构图

  高并发负载均衡——nginx与lvs

二、架构分析

  1. 客户端通过企业防火墙发送请求
  2. 在App服务器如tomcat接收客户端请求前,面对高并发大数据量访问的企业架构,会通过加入负载均衡主备服务器将请求进行转发到不同web服务其中。
  3. 服务器通过访问数据库进行交互,同样高并发大数据会涉及到数据库处理高并发的方案
  4. 另外会添加多台服务器用作缓存、消息处理等

三、高并发

  1、高并发一般会发生在下面两处

  1. 负载均衡处
  2. 数据库高并发;

  2、高并发初期解决方案

  应对高并发,解决方案大多从服务器级别和应用程序级别【硬件和软件】两个方向进行

  第一个方向:增大服务器的CPU,增加内存,或者直接购买高性能服务器。但随着业务的不断增加,服务器性能也达到瓶颈。

  第二个方向:从应用程序级别也就是软件设计编码方向,如HTML静态化、图片服务器分离、分布式缓存,减少客户端访问时并发请求的数据。

  3种利用负载均衡解决高并发访问的方案

二、DNS

一、什么是DNS

  简单理解:Domain Name System,域名系统是因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网。例如我们将程序发布到192.168.55.145 和144两台服务器上,通过DNS可以设置一个统一的访问入口,如www.Max1209.com对这两台服务器上的服务进行访问。用户直接访问www.Max1209.com主机名而不需记住机器IP,通过主机名,最终得到该主机名进行域名解析得到对应的IP地址进行访问。

二、DNS实现负载均衡

  在DNS服务器中,可以为多个不同的IP配置同一个名字,这个数据被发送给其他名字服务器,而最终查询这个名字的客户机将在解析这个名字时随机使用其中一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,因此不同的客户访问的也就是不同地址的Web服务器。

  简单说,也就是一个外观,给部署了同一个网站的n多台服务器设置同一个名字,不同地区或者不同特点的用户访问同一个名字,实际接收客户请求的是外观里的不同ip的服务器,从而达到负载均衡的目的。

  同时面对更高访问量需求,DNS可以以设置成树状,多个DNS服务器将请求分发给下一个DNS服务器,N层解析之后再访问到应用服务器,这样就可以增加应用服务器的个数,应对更大并发数据请求。

  高并发负载均衡——nginx与lvs

  但使用DNS负载均衡的时候,如果服务器发生故障,DNS继续把请求发送给故障机器,一直到把故障服务器从DNS中移走为止,这样用户就只能等到DNS连接超时后才能访问到目标网站。

三、负载均衡实现的效果

  解决方案便可以横向扩充n台应用服务器,并且客户端访问与应用服务器中间加上负载均衡配置,负载均衡能实现的效果主要有三个:

  1. 转发功能:按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
  2. 故障移除:通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。
  3. 恢复添加:如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。

三、nginx

一、nginx简介

  1、nginx应用

  Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,*使用nginx网站用户有:百度、新浪、网易、腾讯等。

  2、nginx的优点

  1. 可以运行在多个平台:Linux、Windows等
  2. 在高并发情况下,Nginx 可支持高达50000个并发连接数的响应。

二、nginx如何实现负载均衡

  1、Nginx反向代理

  Nginx利用自身反向代理功能,在conf配置文件中添加反向代理地址,以代理服务器的身份接受客户端发送过来的请求,然后将请求转发给内部网络上的应用服务器,并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器,不过它只负责转发请求,不负责处理。

  2、Nginx转发策略:upstream目前支持的分配算法

  Nginx转发请求可按照调度规则通过轮询、ip哈希、URL哈希、权重等多种方式对应用服务器做负载均衡,同时还支持后端服务器的健康检查,也就是上面讲的故障移除和恢复添加功能。

    1、轮询(默认)

  每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,能自动剔除。

    2、权重

  通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。

    3、ip_哈希算法

  每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。

三、配置Nginx的负载均衡与分发策略:upstream配置

  扩展知识点:Nginx配置4层负载

  https://www.aliyun.com/jiaocheng/130203.html

  https://blog.csdn.net/hu2010shuai/article/details/54668471

  总结:

  默认支持七层代理转发:基于HTTP;--with-stream为四层代理转发:基于TCP,UDP;

  Nginx TCP负载均衡原理上和LVS等是一致的,工作在更为底层,性能会高于原来HTTP负载均衡不少。但是,不会比LVS更为出色,LVS被置于内核模块,而Nginx工作在用户态,而且,Nginx相对比较重。

  1、通过在upstream参数中添加的应用服务器IP后添加指定参数即可实现

upstream tomcatserver1 {
server 192.168.72.49: weight=;
server 192.168.72.49:;
} server {
listen ;
server_name .max.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcatserver1;
index index.html index.htm;
}
}

  通过以上配置,便可以实现,在访问8080.max.com这个网站时,由于配置了proxy_pass地址,所有请求都会先通过nginx反向代理服务器,在服务器将请求转发给目的主机时,读取upstream为 tomcatsever1的地址,读取分发策略,配置tomcat1权重为3,所以nginx会将大部分请求发送给49服务器上的tomcat1,也就是8080端口;较少部分给tomcat2来实现有条件的负载均衡,当然这个条件就是服务器1、2的硬件指数处理请求能力。

  2、upstream深入配置

upstream myServer {    

    server 192.168.72.49: down;
server 192.168.72.49: weight=;
server 192.168.72.49:;
server 192.168.72.49: backup;
}
    1、down

  表示单前的server暂时不参与负载

    2、Weight

  默认为1.weight越大,负载的权重就越大。

    3、max_fails

  允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误

    4、fail_timeout

  max_fails 次失败后,暂停的时间。

    5、Backup

  其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

四、Nginx的高可用

  除了要实现网站的高可用,也就是提供n多台服务器用于发布相同的服务,添加负载均衡服务器分发请求以保证在高并发下各台服务器能相对饱和的处理请求。同样,负载均衡服务器也需要高可用,以防如果负载均衡服务器挂掉了,后面的应用服务器也紊乱无法工作。

  实现高可用的方案:添加冗余。添加n台nginx服务器以避免发生上述单点故障。具体方案详见下文:keepalive+nginx实现负载均衡高可用

四、LVS

一、LVS简介

  1、什么是LVS

  Linux Virtual Server,Linux虚拟服务器,主要使用集群技术实现和Linux操作系统实现一个高性能、高可用的服务器虚拟的服务器集群系统。

  2、LVS主要组成部分

    1、负载调度器(load balancer/ Director)

  它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。简单理解这个调度器跟Nginx的反向代理服务、DNS的域名解析实现的是同样功能。对外提供统一虚拟IP,实际用户访问的是LVS通过转发请求到指定服务器上的应用。

    2、服务器池(server pool/ Realserver)

  一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。

    3、共享存储(shared storage)

  它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。这也是LVS跟Nginx区别之处:LVS可通过共享存储结构实现多个应用服务器间的session共享。

  3、LVS如何实现负载均衡

  LVS主要通过IP负载均衡技术VS/NAT、VS/TUN、VS/DR实现负载均衡。简单介绍第一个VS/NAT,它是一种最简单的方式,所有的RealServer只需要将自己的网关指向Director即可。客户端可以是任意操作系统,但此方式下,一个Director能够带动的RealServer比较有限。在VS/NAT的方式下,Director也可以兼为一台RealServer。

二、LVS+Keepalived高可用

  https://www.cnblogs.com/happy-king/p/9192282.html

高并发负载均衡——nginx与lvs的更多相关文章

  1. 千万级高并发负载均衡软件HAproxy

    1负载均衡产品介绍 基于硬件的负载均衡设备例如F5,Big-IP,基于软件的负载均衡产品HAproxy,LVS,nginx在这些软件产品中,又分为基于操作系统的软负载实现和基于第三方应用的软负载实现. ...

  2. Django高并发负载均衡

    1 什么是负载均衡? 当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能.那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台 ...

  3. Django 高并发负载均衡

    1 什么是负载均衡? 当一台服务器的性能达到极限时,我们可以使用服务器集群来提高网站的整体性能.那么,在服务器集群中,需要有一台服务器充当调度者的角色,用户的所有请求都会首先由它接收,调度者再根据每台 ...

  4. 千万级高并发负载均衡软件haproxy配置文件详解

    balance roundrobin         #轮询方式 balance source               #将用户IP经过hash计算后,使同一IP地址的所有请求都发送到同一固定的后 ...

  5. linux系统多网卡热备实现高并发负载均衡

    #nmcli实现bonding #先停止NetworkManagerservice NetworkManager stop chkconfig NetworkManager off   //开机自启动 ...

  6. 四层和七层负载均衡的特点及常用负载均衡Nginx、Haproxy、LVS对比

    一.四层与七层负载均衡在原理上的区别 图示: 四层负载均衡与七层负载均衡在工作原理上的简单区别如下图: 概述: 1.四层负载均衡工作在OSI模型中的四层,即传输层.四层负载均衡只能根据报文中目标地址和 ...

  7. Nginx(haproxy)+keepalived+Tomcat双主高可用负载均衡

    周末的时候一个正在学Linux的朋友问我,高可用怎么玩?我和他微信了将近三个小时,把Nginx和haproxy双主高可用教给他了,今天突然想把这个给写进博客里,供给那些正在学习Linux系统的朋友们, ...

  8. Keepalived+lvs 搭建高可用负载均衡

    本站点停止更新,请访问:blog.coocap.com 不了解负载均衡高可用的童鞋,强烈建议先看keepalived+nginx高可用负载均衡: 传送门(求粉):http://www.cnblogs. ...

  9. LVS+Keepalived高可用负载均衡集群架构实验-01

    一.为什么要使用负载均衡技术? 1.系统高可用性 2.  系统可扩展性 3.  负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...

随机推荐

  1. Hammer.js分析(一)——基础结构

    从github上面将源码下载下来,会发现有个src文件夹.当前版本是2.0.6. 总的结构如下: 一.常量 这里将常量全部列在一起是可以在对比源码的时候,更方便的查看相应内容. var VENDOR_ ...

  2. Httpsqs队列基本操作

    一,安装 ulimit -SHn 65535 wget http://httpsqs.googlecode.com/files/libevent-2.0.12-stable.tar.gz tar zx ...

  3. MVC自动生成数据库【Code-FIrst方式】

    一般我们写好实体之后,配置好数据上下文对象,还有在配置文件中改好连接字符串之后. 还不能生成数据库,自动生成数据库,有两步关键步骤:   1.   Enable Migrations   2. Upd ...

  4. github host你懂得,如果你是程序员请不要乱传,求求了

    可用截止测试时间 2015-01-12 github相关的hosts 207.97.227.239 github.com 65.74.177.129 www.github.com 207.97.227 ...

  5. 几种更新(Update语句)查询的方法【转】

    正 文: 数据库更新就一种方法Update,其标准格式:Update 表名 set 字段=值 where 条件不过根据数据的来源不同,还是有所区别的:  1.从外部输入这种比较简单例:update t ...

  6. Minimum Sum(思维)

    Problem 1603 - Minimum Sum Time Limit: 2000MS   Memory Limit: 65536KB    Total Submit: 563  Accepted ...

  7. Angular DirtyChecking(脏值检查) $watch, $apply, $digest

    Dirty Checking (脏值检查) Digest cycle and $scope Digest cycle and $scope First and foremost, AngularJS ...

  8. 移动应用开发者最应该知道的8款SDK

    2017年双11全球狂欢节结束后,据大数据公司统计显示,2017年双11全网销售额达2539.7亿,移动端销售占比91.2%.不难看出,智能手机因随身携带.时刻在线等特点,已取代PC,成为网络生活新的 ...

  9. html中不常用但必须知道的标签

    1.<b>加粗</b> 为天地立心,为生民立命,为往圣继绝学,为万世开太平 2.<s>删除线</s> 为天地立心,为生民立命,为往圣继绝学,为万世开太平 ...

  10. 线性代数导论 &vert; Linear Algebra 课程

    搞统计的线性代数和概率论必须精通,最好要能锻炼出直觉,再学机器学习才会事半功倍. 线性代数只推荐Prof. Gilbert Strang的MIT课程,有视频,有教材,有习题,有考试,一套学下来基本就入 ...