nginx负载均衡

nginx负载均衡_第1张图片

Nginx :正向代理 反向代理 负载均衡是和反向代理使用

1、Nginx有两种代理方式

七层代理(http协议):代理的是http的请求和响应 客户端请求代理服务器 由代理服务器转发客户端的httpd请求 转发到内部的服务器(可以是单台也可以是一组)

后端的webserver再把响应送达代理服务器 最后再到客户端(转发http协议)

nginx负载均衡_第2张图片

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

nginx负载均衡_第3张图片

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

四层代理(tcp/udp流量转发):基于tcp/ip协议层的转发代理方式 基于ip和端口号实现负载均衡或者正向代理 四层代理无法获取http请求中的URL信息 只能对TCP/UDP的数据包进行转发

面试题:四层代理和七层代理直接的区别:

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

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

2、选择场景 :

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

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

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

四层只能是IP和端口

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

3、模块:

七层代理只能写在http模块的全局配置当中 upstream 用于处理http请求 支持反向代理 负载均衡 缓存功能 在upstream模块中可以配置多个服务器

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

正向代理 类似于VPN 科学上网 加速器

nginx负载均衡_第4张图片

企业架构都是反向代理 客户端通过代理服务器访问 但是后端有多台

七层代理写法 http全局配置

Upstream 自定义名 {

              Server 192.168.1.3

              Server 192.168.1.4

}

Location{

Proxy_pass http://自定义名

}

负载均衡的算法 算法都是配置在代理里面的:

  1. rr(round robin)负载均衡最简单的算法 轮询 将请求轮流分配到后端服务器 是默认算法 可以不加 每发起一次都是新的请求 服务器上没有缓存 适用场景:服务器处理能力接近 而且对访问量比较小的网站适用
  2. weight 加权轮询 建立在默认轮询算法的基础之上 为后端服务器分配不同的权重 处理能力强的服务器分配的权重要高一些 轮询次数基本上按照权重分配的 服务器上也没有缓存 适用于中大型网站可以使用 权重高的服务器会被频繁的请求响应 权重低的可能闲置 会和负载均衡算法一起使用

nginx负载均衡_第5张图片

  1. 最少连接数算法: 会把请求发送到连接数量较少的服务器上 可以单独使用 但是一般都是结合加权轮询一块使用 避免所以请求都发送到处理能力强的服务器 提高集群的稳定性 中大型网站日常使用可以满足

nginx负载均衡_第6张图片

  1. ip_hash:iphash会根据客户端IP地址解析出一个hash值 然后将请求发送到对应的后端服务器 下一次用户再访问时 同一客户端的请求将会分配到之前访问的服务器上 第一次访问之后 后续访问缓存 如果后端服务器数量发生变化 可能会进行重新分配 ip_hash适用于高并发 请求不会跳转 请求的是缓存

nginx负载均衡_第7张图片

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

url_hash和ip_hash结合一起使用 适用高并发场景 访问之后第二次都是访问缓存 可以降低服务器压力

nginx负载均衡_第8张图片

  1. 基于域名的反向代理

Upstream ky32 {

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

}

nginx负载均衡_第9张图片nginx负载均衡_第10张图片

nginx负载均衡_第11张图片

第一台主机

nginx负载均衡_第12张图片

第二台服务器

nginx负载均衡_第13张图片

第三台服务器

四层反向代理 配置在全局模块中 可以使用加权轮询 最小连接数算法也可以实现负载均衡

但是ip_hash url_hash不可以再stream中使用 四层不能对请求处理 只是转发数据包

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

nginx负载均衡_第14张图片

总结:

四层转发和七层转发

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

七层:基于http协议 对请求的内容进行处理 转发到后端服务器

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

七层走的是用户态 需要对内容进行处理 转发速度相对较慢

正向代理和反向代理:

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

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

  1. 轮询 默认算法 可以不加
  2. 加权轮询 给后端服务器设置不同权重 通过权重分发客户端请求 权重高的轮询次数多 不绝对 weight=数字
  3. 最小连接数 会把请求转发到当前连接数较小的服务器 避免请求集中到高性能或高权重的服务器 可以和加权轮询一起使用 适用大部分场景
  4. Ip_hash 根据客户端请求的ip地址生成一个hash值 然后转发到后端服务器 下一次再访问 还是之前的服务器 而且还有缓存 需要把请求客户端地址 转发到固定的服务器 可以使用这个方法 高并发可以满足 如果后端服务器发生变化 请求的后端服务器也会发生变化(后端服务器数量变少了或增加 未必会发生变化)
  5. url_hash 根据请求的url地址生成hash值 然后转发到后端服务器 但是下一次访问如果请求的url不变 还是上一次访问的服务器 而且也有缓存 url地址发生变化或后端服务器数量发生变化 可能会变更后端服务器的地址

配置方式:

http七层:正向 反向

正向:location{

Proxy_pass http://192.168.1.3;

}

反向:http的全局配置中定义upstream模块

负载均衡的算法配置中upstream模块中

upstream Ky32{

least_conn;

ip_hash; hash

$request_url consisten;

server 192.168.1.4 weight=2;

server 192.168.1.5 weight=3;

#默认轮询  加权轮询

}

Sever块的location中 制定代理服务器的方法

Location{

Proxy_pass http://ky32;

}

四层:只能卸载全局配置中

Stream{

Upstream test{

Server 192.168.1.3:80;

Server 192.168.1.4:80;

}

Server {

Listen 80;

Proxy_pass http://test;

}

}

正向代理 反向代理 默认轮询 加权轮询 最小连接数 ip_hash hash $request_uri consistent 基于域名 四层反向代理配合算法

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