-
Linux Nginx 负载均衡
2020-03-05 11:07:04负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。负载...负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。
- 软/硬件负载均衡
软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。
软件解决方案缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,受到操作系统的限制;由于操作系统本身的Bug,往往会引起安全问题。
硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。
负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网络上。一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。
- 本地/全局负载均衡
负载均衡从其应用的地理结构上分为本地负载均衡(Local Load Balance)和全局负载均衡(Global Load Balance,也叫地域负载均衡),本地负载均衡针对本地范围的服务器群做负载均衡,全局负载均衡针对不同地理位置、不同网络结构的服务器群做负载均衡。
本地负载均衡不需要花费高额成本购置高性能服务器,只需利用现有设备资源,就可有效避免服务器单点故障造成数据流量的损失,通常用来解决数据流量过大、网络负荷过重的问题。同时它拥有形式多样的均衡策略把数据流量合理均衡的分配到各台服务器。如果需要在现在服务器上升级扩充,不需改变现有网络结构、停止现有服务,仅需要在服务群中简单地添加一台新服务器。
全局负载均衡主要解决全球用户只需一个域名或IP地址就能访问到离自己距离最近的服务器获得最快的访问速度,它在多区域都拥有自己的服务器站点,同时也适用于那些子公司站点分布广的大型公司通过企业内部网(Intranet)达到资源合理分配的需求。
全局负载均衡具备的特点:
-
提高服务器响应速度,解决网络拥塞问题,达到高质量的网络访问效果。
-
能够远距离为用户提供完全的透明服务,真正实现与地理位置无关性
-
能够避免各种单点失效,既包括数据中心、服务器等的单点失效,也包括专线故障引起的单点失效
负载均衡部署方式
负载均衡有三种部署方式:路由模式、桥接模式、服务直接返回模式。路由模式部署灵活,约60%的用户采用这种方式部署;桥接模式不改变现有的网络架构;服务直接返回(DSR)比较适合吞吐量大特别是内容分发的网络应用。约30%的用户采用这种模式。
-
路由模式(推荐)
路由模式的部署方式,服务器的网关必须设置成负载均衡机的LAN口地址,且与WAN口分署不同的逻辑网络。因此所有返回的流量也都经过负载均衡。这种方式对网络的改动小,能均衡任何下行流量。
-
桥接模式
桥接模式配置简单,不改变现有网络。负载均衡的WAN口和LAN口分别连接上行设备和下行服务器。LAN口不需要配置IP(WAN口与LAN口是桥连接),所有的服务器与负载均衡均在同一逻辑网络中。
由于这种安装方式容错性差,网络架构缺乏弹性,对广播风暴及其他生成树协议循环相关联的错误敏感,因此一般不推荐这种安装架构。
-
服务直接返回模式
这种安装方式负载均衡的LAN口不使用,WAN口与服务器在同一个网络中,互联网的客户端访问负载均衡的虚IP(VIP),虚IP对应负载均衡机的WAN口,负载均衡根据策略将流量分发到服务器上,服务器直接响应客户端的请求。因此对于客户端而言,响应他的IP不是负载均衡机的虚IP(VIP),而是服务器自身的IP地址。也就是说返回的流量是不经过负载均衡的。因此这种方式适用大流量高带宽要求的服务。
Nginx 是一款高性能的HTTP和反向代理服务工具,现在很多大型网站都使用 Nginx 做负载均衡,由于支持高并发和资源占用低,越来越受到欢迎,下面介绍 Nginx 几种常用的负载均衡策略。
-
Nginx常用的几种负载均衡配置
- 轮询模式:这种方式是nginx.conf配置文件的默认配置方式,当客户端访问服务的时候,请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
- weight权重模式:这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大
- ip_hash:配置很简单,在upstream中采用ip_hash指令,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。此种策略,可以实现同一个用户访问同一台服务器,会话不会丢失,但是可能会分配不均
- fair(第三方插件):这种方式根据后端服务器的响应时间进行分配,响应快的优先分配请求
- url hash(第三方插件):此种方式和ip_hash比较类似,根据url的hash值进行分配,将url分配到同一个后端服务器,当服务器存在缓存时比较有效
-
nginx.conf 中命令说明
down 表示单前的server暂时不参与负载
weight 默认为1.weight越大,负载的权重就越大。
max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
fail_timeout:max_fails次失败后,暂停的时间。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻
- 实验环境
- Server 192.168.1.2 CentOS 7.5 Nginx+负载均衡
- Web 1 192.168.1.3 CentOS 7.5 Nginx+PHP
- Web 2 192.168.1.4 CentOS 7.5 Nginx+PHP
- Web 3 192.168.1.5 CentOS 7.5 Nginx+PHP
- 分别在 Server 和 Web 端安装 Nginx,使用 Nginx 官网提供的 Yum 方式安装
-
Nginx Yum 官方源 http://nginx.org/packages/
CentOS 7.X :rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
CentOS 6.X :
rpm -Uvh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
-
yum -y install nginx PS:确保 /etc/yum.repo.d/nginx.repo 为 enabled = 1 开启状态
-
Nginx+PHP 安装详细设置请参照拙作:Linux Nginx + PHP 安装及调优https://blog.csdn.net/gaofei0428/article/details/104058580
- 安装完成后,首先在 Server 192.168.1.2 端配置 Nginx 负载均衡
- vim /etc/nginx/nginx.conf
- 在 http {......} 字段添加以下信息
- http {
..........
upstream myweb{ #开启负载均衡及定义名称
ip_hash; #采用 ip_hash 方式的负载均衡配置
server 192.168.1.3 max_fails=10 fail_timeout=60s;
server 192.168.1.4 max_fails=10 fail_timeout=60s;
server 192.168.1.5 max_fails=10 fail_timeout=60s;
}
#连接探测设置,如果发现后端异常,在单位周期为fail_timeout设置的时间,中达到max_fails次数,这个周期次数内,如果后端同一个节点不可用,那么接将把节点标记为不可用,并等待下一个周期(同样时常为fail_timeout)再一次去请求,判断是否连接是否成功
include /etc/nginx/conf.d/*.conf;
}- 确认无误保存退出,接下来编辑 /etc/nginx/conf.d/default.conf
- vim /etc/nginx/conf.d/default.conf
- server {
listen *:80;
server_name www.myweb.com;
location / {
proxy_pass http://myweb; #使用前面定义的负载均衡配置
proxy_set_header Host $host; #允许重新定义或者添加发往后端服务器的请求头。$host
变量值在请求包含“Host”请求头时为“Host”字段的值,在请求未携带“Host”请求头时为虚拟主机的主域名
proxy_set_header X-Forwarded-For $remote_addr; #增加节点服务器记录的IP字段
}
} - 确认无误保存退出,启动 Nginx
- 接下来来 Web 端分别安装、配置及启动 Nginx + PHP
- 具体设置请参照拙作:https://blog.csdn.net/gaofei0428/article/details/104058580
- 下面开始测试,这里为了测试效果,暂时把 #ip_hash; 设置注释掉
- 更改物理机的 HOSTS 文件 添加 192.168.1.2 www.myweb.com
- 打开浏览器输入 www.myweb.com 按住 F5 可以看到变化
-
nginx负载均衡
2020-12-24 19:38:29nginx负载均衡简介 随着网站的发展,服务器压力越来越大,我们可能首先会将数据库,静态文件分离出去。但是随着发展,单独业务API的请求的压力也会变得很大,这时候我们可能需要做负载均衡将一台服务器面临的压力...nginx负载均衡简介
随着网站的发展,服务器压力越来越大,我们可能首先会将数据库,静态文件分离出去。但是随着发展,单独业务API的请求的压力也会变得很大,这时候我们可能需要做负载均衡将一台服务器面临的压力分散到多台服务器上。
nginx 不仅可以作为强大的web服务器,也可以作为反向代理服务器,而且nginx还可以按照调度规则实现动静分离,还可以对后端的服务器做负载均衡。
nginx负载均衡配置
nginx的负载均衡主要是对proxy_pass和upstream的配置。
http { upstream upstream_name{ server ip1:port; server ip2:port; #如 server 192.168.1.10:8080 } server { listen 8080; server_name localhost; location / { proxy_pass http://upstream_name; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
我这里没有把默认的一些配置贴出来。
首先,在http下添加 upstream upstream_name {} 来配置要映射的服务器。
其中的upstream_name大家可以指定为服务的域名或者项目的代号。
server下的location 我们将 / 下的全部请求转发到 http://upstream_name ,也就是我们上面配置的服务器列表中的某一台服务器上。具体是哪台服务器,nginx会根据配置的调度算法来确认。
nginx负载均衡策略
nginx的负载均衡策略有4种:
轮询(默认)
最基本的配置方法,它是upstream的默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器。
参数有:
参数 描述
fail_timeout 与max_fails结合使用
max_fails 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了
fail_time 服务器会被认为停机的时间长度,默认为10s。
backup 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
down 标记服务器永久停机了。
注意:在轮询中,如果服务器down掉了,会自动剔除该服务器。
缺省配置就是轮询策略。
此策略适合服务器配置相当,无状态且短平快的服务使用。
权重在轮询策略的基础上制定沦陷的几率。例如
upstream foo { server localhost:8001 weight=2; server localhost:8002; server localhost:8003 backup; server localhost:8004 max_fails=3 fail_timeout=20s; }
这里例子中,weight参数用于制定轮询的几率,weight默认值为1;weight的数值和被访问的几率成正比。
注意:
权重越高分配到需要处理的请求越多。
此策略可以与least_conn和ip_hash结合使用。
此策略比较适合服务器的硬件配置差别比较大的情况。
ip_hash负载均衡器按照客户端IP地址的分配方式,可以确保相同客户端的请求一直发送到相同的服务器。这样每个访客都固定访问一个后端服务器。
upstream foo { ip_hash; server localhost:8001 weight=2; server localhost:8002; server localhost:8003; server localhost:8004 max_fails=3 fail_timeout=20s; }
注意:
在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
ip_hash不能与backup同时使用。
此策略适合有状态服务,比如session。
当有服务器需要剔除,必须手动down掉。
least_conn 最小连接把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果
upstream foo { least_conn; server localhost:8001 weight=2; server localhost:8002; server localhost:8003 backup; server localhost:8004 max_fails=3 fail_timeout=20s; }
此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。
除了上面这些调度策略之后,还有一些第三方的调度策略可以集成到nginx中。在实际运用中,需要根据不同的场景选择不同的策略,大多是多种策略结合使用以达到实际需求的性能。
参考资料:
https://www.cnblogs.com/lave/p/10477375.html -
nginx 负载均衡
2018-08-31 14:40:49示例: ... #配置nginx 负载均衡 upstream www.hello.com { server 127.0.0.1:8081 weight=1; server 127.0.0.1:8082 weight=2; } #server配置 server { listen 80; server_name www....示例:
#配置nginx 负载均衡 upstream www.hello.com { server 127.0.0.1:8081 weight=1; server 127.0.0.1:8082 weight=2; } #server配置 server { listen 80; server_name www.hello.com; location / { #重点是这里 和上边的域名一样 proxy_pass http://www.hello.com; proxy_redirect default; } }
网址访问:http://www.hello.com/examples/index2.html
8081出现一次
8082出现俩次
-
NGINX负载均衡算法
2019-03-14 17:51:24NGINX负载均衡算法Nginx负载均衡算法NGINX常见用途NGINX负载均衡算法 Nginx负载均衡算法 NGINX常见用途 反向代理 负载均衡 动静分离 NGINX负载均衡算法 RR轮训。default 每个请求按着时间顺序注意分配到后端...NGINX负载均衡算法
Nginx负载均衡算法
NGINX常见用途
- 反向代理
- 负载均衡
- 动静分离
NGINX负载均衡算法
- RR轮训。default
每个请求按着时间顺序注意分配到后端服务器上。如果后台服务宕掉,能自动剔除掉。upstream test { server localhost:8080; server localhost:8081; } server { listen 81; server_name localhost; client_max_body_size 1024M; location / { proxy_pass http://test; proxy_set_header Host $host:$server_port; } }
- 权重。用于后端服务器性能不均的情况。
upstream test { server localhost:8080 weight=9; server localhost:8081 weight=1; }
- ip_hash。解决登录问题。
upstream bakend { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }
- fair。根据后台服务器的反应时间来分配机器。
upstream backend { server server1; server server2; fair; }
- url_hash。URL的哈希结果来分配
upstream resinserver{ server 10.0.0.10:7777; server 10.0.0.11:8888; hash $request_uri; hash_method crc32; }
-
nginx 负载均衡策略
2020-10-01 14:40:08Nginx负载均衡有四种方案配置 1.轮询 轮询即Round Robin,根据Nginx配置文件中的顺序,依次把客户端的Web请求分发到不同的后端服务器上。 注意: 缺省配置就是轮询策略; nginx负载均衡支持http和https协议,只需要... -
Nginx 负载均衡
2019-07-19 17:43:48Nginx 负载均衡 什么是负载均衡 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 负载均衡,英文名称... -
Nginx负载均衡详解
2019-06-05 13:44:46Nginx负载均衡详解Nginx的负载均衡策略轮询权重weightip_hashleast_conn第三方策略 接上一篇的入门,本篇主要介绍Nginx的负载均衡策略 Nginx的负载均衡策略 轮询 描述: 所有请求按照时间顺序地轮流分配到应用... -
lvs+nginx负载均衡
2020-10-23 16:44:03lvs+nginx负载均衡 分类:Keepalived,Linux,Load Balancing,Nginx 标签:Load Balancing 1 学习目标 掌握什么是负载均衡及负载均衡的作用和意义。 了解lvs负载均衡的三种模式。 了解lvs-DR负载均衡部署方法。 ... -
Nginx负载均衡学习
2018-07-25 10:45:39Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡 https://www.javazhiyin.com/949.html Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+... -
Nginx负载均衡实例
2020-01-04 17:44:19本文主要介绍 Nginx负载均衡实例 1.前置准备 可启动的Jar项目(示例中引用了一个SpringBoot 简单web项目,下载:传送门); 环境准备(Centos7、JDK 1.8、nginx 1.6.2)安装请参考:传送门; 2.启动后台服务 这里... -
ribbion负载均衡和Nginx负载均衡的区别
2020-05-05 19:27:161、nginx负载是服务端的负载;ribbion的负载,是代码中微服务的负载(客户端负载);这两个负载并不冲突。 2、服务端负载:用户请求到了nginx以后,nginx负载决定把请求转发到哪台服务器; (负载的列表是存在nginx... -
nginx负载均衡实现https
2018-09-22 20:28:05如何通过nginx负载均衡跳转httpsweb端拷贝证书与密钥 scp -rp -P52113 /application/nginx/conf/key 10.0.0.5:/application/nginx/conf/在nginx负载均衡服务端配置vim /application/nginx/conf/nginx.confworker_... -
kylin集群Nginx负载均衡
2017-12-13 00:00:00Nginx负载均衡1, Nginx负载均衡简介跨多个应用程序实例的负载平衡是优化资源利用率,最大化吞吐量,减少延迟以及确保容错配置的常用技术。可以使用nginx作为非常高效的HTTP负载均衡器,将流量分配给多个应用程序... -
如何配置Nginx负载均衡
2020-09-09 19:12:36Nginx负载均衡配置 1.nginx首相配置nginx目录下的nginx.conf vim /etc/nginx/nginx.conf #添加如下配置 user nginx; worker_processes 2; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; ... -
Nginx负载均衡/SSL配置
2019-10-20 13:59:12当一个域名指向多台web服务器时,添加一台nginx负载均衡服务器,通过nginx负载均衡即可将来自于客户端的请求均衡的发送给每台web服务器,避免单台服务器负载过高而其余服务器较为空闲的不均衡情况出现 以... -
Nginx负载均衡
2020-03-21 16:03:14在nginx中负载均衡主要实现用户访问请求进行调度分配和后端服务器的压力分担。 负载均衡调度算法 轮询(rr) :按时间顺序逐一分配到不同的后端服务器(默认) 权重(weight):加权轮询(wrr)。weight值越大,分配到的... -
Nginx系列:Nginx 负载均衡的几种方式!
2019-06-21 11:33:35Nginx系列:Nginx 负载均衡的几种方式! 前言 今天博主将为大家分享:Nginx系列:Nginx 负载均衡的几种方式!不喜勿喷,如有异议欢迎讨论!在阅读这篇之前可以去看博主的windows10系统下安装nginx的安装并配置! ... -
DNS负载均衡与NGINX负载均衡策略
2017-11-23 23:00:17①客户端与反向代理服务器之间的DNS负载均衡②反向代理服务器与应用服务器之间的负载均衡(这种负载均衡有很多,可以是weblogic的负载均衡,可以是Apache+Tomcat负载均衡,也可以是nginx负载均衡,这里只讨论nginx... -
ribbion负载均衡和Nginx负载均衡的区别(面试问题)
2020-05-01 20:20:13ribbion负载均衡和Nginx负载均衡的区别 在SpringCloud框架使用哪个好 负载均衡算法写在哪里 1、nginx负载是服务端的负载;ribbion的负载,是代码中微服务的负载(客户端负载);这两个负载并不冲突。 2、服务端负载... -
nginx负载均衡检测节点状态
2019-04-30 21:25:13nginx负载均衡检测节点状态 -
Nginx如何实现负载均衡,Nginx负载均衡的几种方式。
2018-07-09 18:29:13今天给大家分享一下,修真院官网JAVA任务6中需要使用的Nginx负载均衡1.背景介绍在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但是随着业务量越来越大,无论是性能上还是稳定性上都有了更大的挑战。这... -
nginx负载均衡(权重)
2019-09-06 11:24:38nginx负载均衡的配置。把请求通过nginx的反向代理分发到多台服务器处理,可以减轻单台服务器的处理压力,提高访问速度。 1、增加nginx负载均衡代码 #服务器分发池列表(注意server只填IP+端口,要写入http里面,... -
Nginx负载均衡的6种配置
2020-11-21 21:08:07配置思路 Nginx做负载均衡,需要借助nginx的upstream模块和proxy_pass反向代理模块共同实现 upstream模块: 用来定义服务器组,将后端服务器添加到组中,并定义向后调度的算法!...在NGINX负载均衡器上源码安装NGI -
Nginx(六):Nginx负载均衡
2018-02-26 15:17:25Nginx负载均衡的配置: 通过 Nginx 中的 upstream 指令可以实现负载均衡,在该指令中能够配置负载服务器组 。目前负载均衡有 4 种典型的配置方式,分别为轮询方式、权重方式、 ip_hash 方式,以及利用第三方模块的... -
使用nginx负载均衡之ip hash实现session共享
2020-07-21 21:01:43nginx的ip hash实现session共享一: nginx负载均衡之轮询策略二: nginx负载均衡之ip hash策略 一: nginx负载均衡之轮询策略 配置nginx.conf开启负载均衡使用默认轮询策略 2. 启动nginx服务 3. 浏览器访问 二: ...