nginx负载均衡

nginx:正向代理 反向代理 负载均衡。

nginx当中有两种代理方式:

七层代理(http协议)

四层代理(tcp/udp流量转发)

七层代理:

七层代理,代理的是http的请求和响应

客户端请求代理服务器,由代理服务器转发客户端的httpd请求。转发到内部的服务器(可以是单台,也可以是一组)

nginx负载均衡_第1张图片

后端的webserver,先把响应送达代理服务器,最后再到客户端。

反向代理:客户端访问的是代理服务器,代理服务器转发http请求,但是客户端不知道访问的是哪一台服务器。

正向代理:客户端也是访问的是代理服务器,代理服务器转发http请求,客户端只知道代理服务器的当中,后端的webserver的IP地址,客户端也不知道。

四层代理:基于tcp/ip协议层的转发代理方式。基于ip和端口号实现负载均衡,或者正向代理。

四层代理无法获取http请求中的URL信息,只能对TCP/UDP的数据包进行转发。

四层代理和七层代理之间的区别:(面试题)

1,七层代理走都是用户态,需要对http的请求进行处理和解析,解析过程中,可以根据请求头和请求体的内容进行流量控制,内容过滤,转发速度比较慢,但是提供的功能更高级,用户的体验更好。

四层代理的基于IP地址和端口号,只将IP和端口转到后端服务器,不对请求做任何处理,只是负责转发,而且四层走的是内核态,四层转发速度比较快。四层代理无法提供更高级的功能,只是转发。

2,选择场景:

七层代理:需要对http请求进行控制和处理,只能选择七层代理(常见的代理方式)

四层代理:只需要转发tcp/udp数据包,可以选择四层,也可以选择七层。

七层可以对端口进行转发,也可以对域名进行代理

四层只能是IP和端口

负载均衡算法:有写是无法在四层代理使用。

3,模块:

七层代理只能写在http模块的全局当中。

upstream:用于处理http请求,支持反向代理,负载均衡,缓存功能

在upstream模块中可以对配置多个服务器

四层代理的模块:

stream只能写在全局模块当中的单独配置。stream代理无谓协议,只管流量。

正向代理:

类似于,科学上网,加速器

企业架构都是反向代理:

客户端通过代理服务器访问,但是后端有多台。

七层代理:

http全局配置

upstream test {

server 192.168.233.62;

server 192.168.233.62;

}

location {

proxy_pass http://test;

}

负载均衡的算法:

1,rr(round robin) 负载均衡最简单的算法,轮询。钱钱钱轮流分配到后端服务器。

默认算法,可以不加。

默认算法,每发起一次都是新的请求,服务器上没有缓存。

服务器处理能力相当,而且对访问量比较小的网站适用。

2,加权轮询 weight 建立在默认轮询算法发基础之上。为后端服务器分配不同的权重,处理能力强的服务器可以分配的权重值高一些。

轮询次数基本上按照权重进行分配。服务器上也没有缓存。

中大型网站可以使用加权轮询。

权重高的服务器会被频繁的请求响应,权重低的可能会闲置,回合另一种算法配合使用

3,最少连接数算法。会把请求放到连接数较少的服务器。

最少连接数算法可以单独使用,但是一般都是结合加权轮询一块使用,避免所有的请求都发送到处理能力强的服务器。提高整个集群的稳定性。

中型网站,大型网站,日常访问可以满足。

4,ip_hash:iphash会根据客户端ip地址解析一个hash值,然后将请求发送到对应的后端服务器,下一次用户再访问时,同一客户的请求将会被分配到同一台服务器

ip_hash第一次访问之后,后续访问都是有缓存的。

如果后端服务器发送变化,可能会进行重新分配。

ip_hash适用于高并发,请求不会跳转,请求的时缓存。

5,url_hash 根据请求的url地址计算hash值,然后将请求发送到相应的后端服务器,相同的url地址请求会被分配到同一个服务器。

url_hash和ip_hash是结合在一块使用,可以适用于并发较高的场景,只要是ip_hash和url_hash,访问之后的访问都是缓存。

工作中需要哪个就打开哪个。

基于域名的反向代理

nginx负载均衡_第2张图片

nginx负载均衡_第3张图片

upstream {

server www.kgc.com;

server www.benet.com;

}

location {

proxy_pass http://ky32;

proxy_set_header HOST $host;

proxy_set header X-Real-IP $remote_addr;

}

四层代理

stream {

upstream test {

server 192.168.233.62:80;

server 192.168.233.63:80;

}

server {

listen 80;

proxy_pass test;

}

}

在四层代理中可以使用加权轮询,最小连接数算法也可以实现负载均衡

但是ip_hash url_hash不可以在stream中使用

四层不能对请求处理,只是装发数据包。

http七层代理:可以处理请求地址和请求的url。

总结:

四层代理和七层代理:

四层:基于tcp/udp协议的IP+端口,数据包转发。对请求没有任何操作和处理。

七层代理:基于http协议,对内容进行处理,转发到后台服务器。

速度:四层的速度快,内核,不做任何处理,转发速度快

七层走的是用户态,需要对内容进行处理,转发书店相对较慢。

正向代理和反向代理:

正向代理:都是通过代理服务器访问,明确指向后端服务器。一般都是一对一。

反向代理:都是通过代理服务器访问,一个代理服务器会有多台服务器供代理服务器进行转发请求,只有一对多才涉及到负载均衡的算法问题,

1,轮询默认算法可以不加(工作中一般不用)

2,加权轮询:给后端服务器设置一个不同的权重,通过权重分发客户端的请求。权重高的,轮询的次数就越多,权重低的,轮询的次数就越少,但不绝对。

权重高的服务器会被频繁请求。 weight=3

3,最小连接数,会把请求转发到当前连接数较小的服务器,避免请求全集中到权重高的服务器。可以和加权轮询配合适用。使用大部分场景

4,ip_hash,根据客户端请求的IP地址生成一个hash值,然后转发到后端服务器,下一次再访问还是之前的服务器。而且还有缓存。

需要把请求的客户端IP地址转发到固定的服务器,可以使用这个方法。大并发可以,小并发也可以。但是后端服务器发生变化,请求的后端服务器也会发生变化 (后端服务器数量变少了,后端服务器的数量少了,请求的地址可能会变。后端服务器的数量多了,请求的地址未必会变。)

缩容的情况,业务量比较少,不需要那么多后端服务器,才会缩容。一般都只会扩。

5,url_hash:根据请求的url地址生成一个hash值,然后转发到后端服务器,但是下一次访问,如果请求的url不变,还是访问的后端服务器,而且也有缓存。

url地址发生变化,或者后端服务器也发生变化,可能会变更后端服务器的地址。

配置方式:

http:七层正向 反向

location {

proxy_pass http://192.168.233.62;

}

httpd的全局变量配置中定义upstream模块中

upstream ky32 {

least_conn;

ip_hash;

hash $requst_uri consistent;

server 192.168.233.30 weight=2;

server 192.168.233.40 weight=3;

}

server块的location当中:指定代理服务器的方法:

Location {

Proxy_pass http://ky32;

}

四层

只能写在全局配置当中:

Stream{

Upstream test {

Server 192.168.120.40:80;

Server 192.168.120.30:80;

#默认轮询

#加权轮询

#最小连接数

}

Server {

Listen 80;

Proxy_pass http://test;

}

nginx负载均衡_第4张图片

你可能感兴趣的:(nginx,负载均衡,运维)