高性能Nginx服务器(2)----负载均衡

location正则表达式

  • nginx的localtion的作用是匹配路径的地址

  • location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。

  • location的语法:
    (1)以=开头表示精确的匹配
    (2)=/ 表示/后面的路径地址不能带任何字符串,否则匹配不上
    (3)^~开头表示uri以某个常规字符串开头,不是正则匹配
    (4)~开头表示区分大小写的正则匹配
    (5)~*开头表示不区分大小写的正则匹配
    (6)/ 通用匹配。如果没有其他的匹配,任何请求都会匹配到

  • 跨域问题
    是由于域名或者端口号不同,浏览器的安全机制让其不能访问。但内部通信不存在跨域问题。这时候可以使用nginx进行访问,我们使用同一个域名同一个端口号搭建nginx网关进行访问,都访问同一个nginx,只不过location配置不同,根据不同的请求,利用nginx跳转到不同的server服务器上
    如:

server {
        listen       80;
        server_name  www.itmayiedu.com;
        location /tomcat01/ {
            # 这是一个IP地址(因为方便就没有配多个)
		    proxy_pass http://127.0.0.1:8080;
            index  index.html index.htm;
        }
}

server {
        listen       80;
        server_name  www.itmayiedu.com;
        location /tomcat02/ {
           # 这是另一个ip地址(应该和第一个不同,太麻烦所以没有配置)
		    proxy_pass http://127.0.0.1:8080;
            index  index.html index.htm;
        }
    }

注意:这里localtion /tomcat01/ 一定要在结束的时候加上/

  • nginx可以做网关的作用,但如果同时有nginx和网关的话,nginx主要做的是反向代理,网关的作用是权限控制(黑名单,白名单,负载均衡等)
    在这里插入图片描述

负载均衡的作用

  • 负载均衡,建立在现有的网络结构之上,他提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽,增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。
  • 负载均衡,Load Balance,其意思就是分摊到多个操作单元上执行,例如web服务器,FTP服务器,企业关键应用服务器和其他的关键人物服务器等,从而共同完成工作任务。
  • 负载均衡就是,将所有的请求先到负载均衡器中,再由负载均衡器采用负载均衡算法(轮训,IP绑定,权重等策略)分发到不同实际的服务器中,这也就是服务器集群,集群的目的就是减轻单台服务器的压力
    在这里插入图片描述
    由上图:
    (1)我们的请求是先到了LVS层,LVS会虚拟一个IP出来,再由LVS将请求发给nginx代理服务器
    (2)LVS在传输层进行了负载均衡,Nginx在应用层做了负载均衡
    (3)客户端先到LVS,再到Nginx,再由Nginx作为代理服务器,请求真实的服务器

负载均衡的缺点

  • 使用负载均衡之后,实际用到的服务器会被集群多台,那么这个时候就会产生分布式的很多问题。比如:
    (1)分布式session一致性
    (2)分布式定时任务调度幂等性
    (3)分布式全局生成ID
    (4)分布式锁
    …等等,一堆分布式问题

网络模型图

在这里插入图片描述

  • 我们用的socket技术就是传输层的

四层和七层负载均衡的区别

  • 负载均衡器分为四层负载均衡器和七层负载均衡器
  • 四层负载均衡(就是说是网络的第四层,即传输层),在网络模型中的传输层中,主要基于TCP协议报文实现负载均衡(比如,LVS,F5(硬件负载均衡器),haproxy就是四层负载均衡器),使用改写报文源地址和目的地址方式
  • 七层负载均衡(网络模型的第七层,即应用层),在网络模型中的应用层中,基于URL或者HTTP协议实现负载均衡,一般是针对web服务实现负载均衡的
  • nginx目前是支持四层负载均衡和七层负载均衡的,1.9之后才开始支持4层负载均衡的。

upstream Server负载均衡

  • upstream server翻译过来就是上游服务器,意思就是负载均衡服务器设置,就是说是真实访问的服务器
  • 负载均衡算法:配置多个上游服务器(真实业务逻辑访问的服务器)的负载均衡机制
  • 失败重试机制:当上游服务器(真实业务逻辑访问的服务器)出现超时或者服务器不存活的时候,是否考虑重试机制补偿
  • 服务器心跳检测:当上游服务器(真实业务逻辑访问的服务器)监控检测,心跳检测。有TCP和HTTP协议两种。
    不建议使用重试机制和心跳检测,重试机制可能发生重复问题,不保证幂等性;心跳检测一般由keepalive做,不由nginx实现。

Nginx配置负载均衡

  • Nginx负载均衡提供上游服务器(真实业务逻辑访问的服务器),负载均衡,故障转移,失败重试,容错,健康检查等。当上游服务器发生故障的时候(就是真实业务逻辑访问的服务器发生故障的时候),可以转移到其他上游服务器(其他的真实服务器)

upstream Server配置

  • upstream Server的主要配置是:IP地址和端口号(配置上游服务器的IP地址和端口号)
	###定义上游服务器(需要被nginx真实代理访问的服务器) 默认是轮训机制
    upstream  backServer{
	    server 127.0.0.1:8080;
	    server 127.0.0.1:8081;
	}
 	
	server {
        listen       80;
        server_name  www.itmayiedu.com;
        location / {
		    ### 指定上游服务器负载均衡服务器
		    proxy_pass http://backServer;
            index  index.html index.htm;
        }
    }

  • 默认采用的是轮训的机制,server端的访问变为proxy_pass http://upstream的名字

负载均衡算法

  1. 轮训(默认)
  • 每一个请求按照时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户的访问不受影响,服务器的配置相差不多的时候使用轮训机制
  1. weight(轮训权值)
  • weight的值越大分配到该服务器上的概率就越大,主要用于后端每台服务器性能不均衡的情况下,或者仅仅为在主从的情况下设置不同的权值,达到合理有效的利用主机资源。
  1. ip_hash
  • 每个请求按照访问ip的哈希结果分配。使来自同一个IP的访客固定访问一台后端服务器。并且可以有效的解决动态网页存在session共享的问题。也叫作IP绑定
  1. fair
  • 比weight,ip_hash更加智能的负载均衡算法,fair算法可以根据页面的大小和加载的时间长短,智能的进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果要使用这个,必须安装upstream_fair模块
  1. url_hash(第三方)
  • 按照访问的URL的哈希结果来分配请求,使每一个URL定向到一台后端服务器,可以进一步的提高后端缓存服务器的效率。Nginx本身不支持url_hash,如果需要用,需要安装Nginx的hash包

  • 举例说明:
    (1)轮询,因为默认就是,我们无需加其他配置

	###定义上游服务器(需要被nginx真实代理访问的服务器) 默认是轮训机制
    upstream  backServer{
	    server 127.0.0.1:8080;
	    server 127.0.0.1:8081;
	}
 	
	server {
        listen       80;
        server_name  www.itmayiedu.com;
        location / {
		    ### 指定上游服务器负载均衡服务器
		    proxy_pass http://backServer;
            index  index.html index.htm;
        }
    }

(2)权重(weight)

   upstream  backServer{
	server 127.0.0.1:8080 weight=1;
	server 127.0.0.1:8081 weight=2;
	}
 	
	server {
        listen       80;
        server_name  www.itmayiedu.com;
        location / {
		    ### 指定上游服务器负载均衡服务器
		 proxy_pass http://backServer;
         index  index.html index.htm;
        }
    }

(2)绑定IP(ip_hash)

upstream  backServer{
	    server 127.0.0.1:8080 ;
		server 127.0.0.1:8081 ;
		ip_hash; 
	}
 	
	server {
        listen       80;
        server_name  www.itmayiedu.com;
        location / {
		    ### 指定上游服务器负载均衡服务器
		    proxy_pass http://backServer;
            index  index.html index.htm;
        }
    }

故障转移

  • Nginx在反向代理转发到真实服务器的时候(上游服务器),如果上游服务器(真实服务器)出现了down机或者有延迟超时的情况下,直接轮询下一台,轮询下一个节点(轮询的原因是配置的是轮询机制),不会再走已经down的真实服务器
  • Nginx配置故障转移:
server {
        listen       80;
        server_name  www.itmayiedu.com;
        location / {
		    ### 指定上游服务器负载均衡服务器
		    proxy_pass http://backServer;
		    ### nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间
			proxy_connect_timeout 1s;
			### nginx发送给上游服务器(真实访问的服务器)超时时间
            proxy_send_timeout 1s;
			### nginx接受上游服务器(真实访问的服务器)超时时间
            proxy_read_timeout 1s;
            index  index.html index.htm;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值