负载均衡Nginx

负载均衡
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 负载均衡名为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务

四层负载均衡(F5、LVS),工作在TCP协议下
七层负载均衡(Nginx、haproxy),工作在Http协议下

Nginx应用场景
反向代理
负载均衡
HTTP服务器,动静分离

核心组件

gx_nginx upstream负载均和模块,可以实现网站的负载均衡功能及节点的健康检查
ngx_http_proxy_moduleProxy模块,用于把请求后抛给服务器节点或upstream服务器池

工作原理

   NGINX启动后,有一个主进程master process和一个或多个工作进程worker process,主进程的作用主要是读入
和检查NGINX的配置信息,以及维护工作进程;工作进程才是真正处理客户端请求的进程。具体要启动多少个工作进程,
可以在NGINX的配置文件nginx.conf中通过worker_processes指令指定。

NGINX控制命令

nginx -s [ stop | quit | reopen | reload ]
nginx -s stop: 强制停止NGINX,不管工作进程当前是否正在处理用户请求,都会立即退出。
nginx -s quit:“优雅地”退出NGINX,执行这个命令后,工作进程会将当前正在处理的请求处理完毕后,再退出。
nginx -s reload:重载配置信息。当NGINX的配置文件改变之后,同过执行这个命令,使更改的配置信息生效,而无
需重新启动nginx.

Nginx的配置文件 nginx.conf

worker_processes  1; 指定nginx进程数,一般设置和CPU核数一致

worker_connections  1024; 每个工作进程的连接数上限

http {}设定http服务器,利用它的反向代理功能提供负载均衡支持

include mime.types;  设定mime类型,类型由mime.type文件定义

sendfile on;指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用

keepalive_timeout  65; 连接超时时间,单位为秒

gzip  on;开启gzip压缩,压缩html

upstream yan { 用于实现负载均衡
	weigth参数表示权值,权值越高被分配到的几率越大     
	down 表示单前的server暂时不参与负载  
	backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。    
	
	定义的语法规则:server 192.168.1.121  weight=1;

server {  }配置代理服务器的地址,即Nginx安装的服务器地址、监听端口、默认地址  
	listen       80;  侦听80端口
	server_name  localhost;对于server_name,如果需要将多个域名的请求进行反向代理,可以配置多个server_name来满足要 
	location / {  
		root   html;  默认主页目录在nginx安装目录的html子目录
		index  index.html index.htm;设置欢迎首页
		proxy_pass http://yan; #跟载均衡服务器的upstream对应     
	}
    }  

upstream yan{
	ip_hash; 
	server       127.0.0.1:8080;
	server       127.0.0.1:9080;
    }

负载均衡策略
Nginx提供轮询round robin、IP 哈希client IP和加权轮询3种方式,默认情况下,Nginx采用的是轮询。

轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

	upstream backserver { 
		server 192.168.1.14; 
		server 192.168.1.15; 
	} 

加权轮询
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

	 upstream backserver { 
		     server 192.168.1.14 weight=1; 
		     server 192.168.1.15 weight=2; 
		} 

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

       upstream backserver { 
		    ip_hash; 
		    server 192.168.0.14; 
		    server 192.168.0.15; 
		} 

fair
fair策略是扩展策略,默认不被编译进nginx内核。其原理是根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行分流。这种策略具有很强的自适应性,但是实际的网络环境往往不是那么简单,因此要慎用

url_hash第三方
与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下

重试策略
可以为每个backserver指定最大的重试次数,和重试时间间隔,所使用的关键字是max_fails和 fail_timeout。

	upstream backserver { 
	    server 192.168.1.14  weight=1  max_fails=2 fail_timeout=30s; 
	    server 192.168.1.15  weight=2  max_fails=2 fail_timeout=30s;
	} 
	失败重试次数为3,且超时时间为30秒。

热机策略

upstream backserver { 
		    server 192.168.1.14  weight=1  max_fails=2 fail_timeout=30s; 
		    server 192.168.1.15  weight=2  max_fails=2 fail_timeout=30s;

		    server 192.168.1.16 backup;
		}

当所有的非备机non-backup都宕机或繁忙busy时就会使用由backup标注的备机。必须要注意的是,backup不能和ip_hash关键字一起使用

动静分离
1、前端Nginx收到静态请求,直接从NFS中返回给客户端。
2、前端Nginx收到动态请求转交给通过FastCGI交给PHP服务器处理。
如果得到静态结果直接从NFS取出结果交给Nginx然后返回给客户端。
如果需要数据处理服务器连接数据库后将结果返回给Nginx
3.前端Nginx收到图片请求以.jpg、.png、.gif等请求交给后端Images服务器处理

 location / {
            proxy_pass http://yan
    } 
    location ~* \.(jpg|gif|js|css)$ { location匹配将图片交给Image处理
            proxy_pass http://10.10.0.23:80;# Image服务器要开启web服务,或者直接使用root d:/images;
    }



 location [=|~|~*|^~] /uri/ { … } 

= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。

~ 开头表示区分大小写的正则匹配

~*  开头表示不区分大小写的正则匹配

!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则

/ 通用匹配,任何请求都会匹配到。

多个location配置的情况下匹配顺序为:首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值