Nginx反向代理和负载均衡

集群简介:

简单来说就是多个服务器合作干一件事,通过技术将多个服务器组合起来,统一调度管理。

集群特点:

高性能,高可用,高并发,可伸缩性。

集群的分类:

负载均衡集群

高可用集群

高性能计算集群

常见的软硬件集群产品:

软件:ngixn,lvs,haproxy,keepalived,heartbeat

硬件:F5,Netscaler,Radware,A10等

反向代理与负载均衡概念简介:

例如:lvs等负载均衡软件是转发用户请求的数据包,而Nginx反向代理是接收用户的请求之后,然后重新发起请求,请求后端服务器的节点。

Nginx反向代理和负载均衡_第1张图片

 

nginx简单的负载均衡测试:

http {

include mime.types;

default_type application/octet-stream;

upstream proxy {

server 192.168.1.251 weight=2;

server 192.168.1.109 weight=1;

}

server {

listen 80;

server_name www.yy.com;

 

location / {

proxy_pass http://proxy;

root html;

index index.html index.htm;

}

 

通过upstream 指定的组名称进行负载均衡配置,在location区块中进行配置。

其中的proxy字段为指定的一个组,可以随意设置。

客户端进行测试:

例如负载均衡服务器为192.168.1.33

客户端进行访问测试:curl www.yy.com

依次显示的页面为后端服务器192.168.1.251和192.168.1.109服务器的页面。

 

upstream模块介绍:

nginx的负载均衡依赖于ngx_http_upstream_module 模块,所支持的代理方式又proxy_pass ,fastcgi_pass ,memcached_pass等。

 

2通过域名做负载均衡:

http {

include mime.types;

default_type application/octet-stream;

upstream proxy {

server www.yy.com weight=2;

}

server {

listen 80;

server_name www.yy.com;

location / {

proxy_pass http://proxy;

root html;

index index.html index.htm;

}

}

需要注意的是,通过域名的话,需要内网中有dns服务器,或者在负载均衡服务器上配置hosts解析文件。

负载均衡upstream多个参数的讲解

weight=2 服务器权重,数字越大代表接受的请求越大

max_fails =1 最大失败次数,企业中建议2~3次

backup 热备配置,如果配置中所有服务器宕机了,那么就会向他转发请求

fail_timeout=10 定义失败后,下次检查的间隔时间

down 表示不可用

 

upstream 模块调度算法

调度算法一般是分为两类:即静态调度算法,和动态调度算法。

静态调度算法:即负载均衡根据自身设定的规则进行分配,不考虑后端节点服务器的情况,例如:rr,wrr,ip_hash都属于静态调度算法

动态调度算法:即负载均衡服务器会通过后端服务器节点状态进行分配请求,例如:连接数少的服务器获得优先请求,响应时间短的优先获得请求,例如:least_conn.fair 都属于动态调度算法。

1:rr轮询算法,(默认调度算法)

将客户端的请求,逐步分配到后端不同的节点服务器,相当与lvs的rr算法,如果后端服务器宕机,宕机服务器会在负载均衡地址池中删除,保证客户端访问不受影响

2:wrr(权重轮询,静态调度算法)

在rr算法中加上权重,即为权重轮询算法,权重值越大,分配的请求越多,可根据服务器性能灵活分配。

3:ip_hash(静态调度算法)

ip_hash算法的原理很简单,根据请求所属的客户端IP计算得到一个数值,然后把请求发往该数值对应的后端。

所以同一个客户端的请求,都会发往同一台后端,除非该后端不可用了。ip_hash能够达到保持会话的效果。

每个请求按客户端ip的hash结果分配,当新的请求到达时,当新的请求到达时,先将客户端ip通过hash算法,hash出一个值,在随着客户端的请求时,会将hash值相同的分配到同一台服务器,该算法可以解决动态页面的session共享的问题,但有时会导致分配不均匀,注意:设置ip_hash的算法时,地址池中的weight和backup将不可用。

4:fair(动态调度算法)

此算法通过后端服务器的响应时间动态分配,响应时间短的将会优先分配。这是更加智能的调度算法,此种算法可以通过页面的大小和响应时间长短,进行动态负载均衡,注意:nginx本身不支持这种算法,必须下载nginx的模块:upstream_fair

示例 upstteam proxy {

server 192.168.1.2;

server 192.168.1.3 ;

fair;

}

5:least_conn 算法

least_conn 算法会根据后端节点的连接数来决定分配情况,那个机器连接数少就分发,

 

6:url_hash 算法

与ip_hash类似,这里是通过访问url 的hash结果进行分配请求,让每个URL定向到同一个后端服务器,进一步提高后端服务器的缓存的命中率

示例: upstream proxy {

server squid1:3322;

server squid2:3322;

hash $request_uri;

hash_method crc32;

}

7:一致性hash算法

一致性hash算法一般用于代理后端业务为缓存服务的场景,将用户请求的url或者指定的字符串进行计算,然后调度到后端服务器中。

你可能感兴趣的:(nginx)