美文网首页
nginx7层负载均衡

nginx7层负载均衡

作者: 麟之趾a | 来源:发表于2020-05-10 23:00 被阅读0次

nginx补充

master进程: 加载配置文件,管理worker进程,平滑升级
worker进程:基于BSD(kevent),linux(epoll)来实现并发机制
磁盘高级特性: sendfile,AID,mmap(内存映射)

正向代理

代理客户端的IP和PORT。正向代理,基于某种特定的协议代理,不能全部代理。比如http协议只能代理http请求

反向代理

proxy_pass

location /admin/ {
         proxy_pass http://10.0.0.12/;
        }
[root@mysql ~]# curl http://10.0.0.11/admin/index.html
shou ye 10.0.0.12
# 在10.0.0.12后面加/,意味着前端代理/admin/路径替换为10.0.0.12的跟路径
curl http://10.0.0.11/admin ==> curl http://10.0.0.12/
当location 后面的路径是一个url,会替换为 proxy_pass的url
--------------------------------------------------------------------------------------------------------------
location /admin/ {
         proxy_pass http://10.0.0.12;
        }
[root@mysql ~]# curl http://10.0.0.11/admin/index.html
10.0.0.12

# 在 192.168.10.62后面不加/,意味着前端代理/admin到后端10.0.0.11 依然admin访问
curl http://10.0.0.11/admin   ---------------------> curl http://10.0.0.12/admin
--------------------------------------------------------------------------------------------------------------------------
  location ~* /admin/ {
         proxy_pass http://10.0.0.12/;
        }
[root@mysql ~]# nginx -t
nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block in /etc/nginx/nginx.conf:47
nginx: configuration file /etc/nginx/nginx.conf test failed
如果location中定义了匹配url中使用了正则表达式,或在if语句,或者在limit_except 中
使用 proxy_pass指令,则proxy_pass 不能使用 / 路径

proxy_set_header

修改反向代理到服务端的header内容
proxy_set_header HOST $host; 修改反向代理后端服务器的header的host 主机信息
proxy_set_header X-Forward-For $proxy_x_forward_for 增加请求头的客户端IP信息
$proxy_x_forward_for 在日志后面附加IP,如果是多级代理。会附加多个代理IP
$remote_addr 在日志中只能增加客户端IP

proxy_cache

image.png
http{
proxy_cache_path /nginx/cache levels=1:1:1 keys_zone=pcache:10m max_size=2g;
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
        proxy_cache pcache;
        proxy_cache_key $request_uri;
        proxy_cache_methods GET HEAD;
        proxy_cache_min_uses 2;
        proxy_cache_valid 200 302 10m;
        proxy_cache_use_stale http_502;
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
        location  /admin/ {
         proxy_pass http://10.0.0.12;
        }
}

proxy_cache_path 定义了缓存,定了缓存的路径 levels:采用几级目录来存放缓存值。1:1:1代表3级目录,且每级目录最多16个子目录。最多定义3 及每级子目录有256个目录  keys_zone:定义了缓存的名字,10m这是缓存值元数据,在内存中占多大空间 max_size=2g则是缓存磁盘的文件最大占多少

proxy_cache 决定使用哪个缓存,可以在server,location,http中定义。不同的标签定义,不同的适用范围
proxy_cache_key ;把什么当做键,作为缓存命中
proxy_cache_methods 什么方法可以用于获得缓存
proxy_cache_min_uses 在interactive_time的时间内,命中几次就可以不用清除。interactive_time也为一个参数,默认参数的值就可以
proxy_cache_valid;定义各种不同的内容缓存的时间
proxy_cache_use_stale  定义了当后端服务器出现什么情况的可以走缓存

--------------------------------------------------------------------------------------------------------------------------------
proxy_connect_timeout time;后端服务器与代理服务器端连接的超时时间,默认60秒,最大不超过75秒
proxy_read_timeout time;后端服务器读取代理服务器请求的超时时间,即响应的超时时间。两次响应的时间间隔的时间
proxy_send_timeout time;代理服务器向后端服务器,发送请求的超时时间

客户端连接代理服务器的超时时间 keepalive_timeout

fastcgi代理

image.png

php对fastcgi的并发处理能力不是很好,可采用Apache+php加载php模块来使用,使用apache prework模型来处理。静态由nginx处理

location ~* \.php$  {
        fastcgi_pass 10.0.0.12:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /data/nginx$fastcgi_script_name;
        include fastcgi_params;
        }

10.0.0.12
yum -y install php-fpm php-cli
vim /etc/php-fpm.d/www.conf
listen = 0.0.0.0:9000
listen.allowed_clients = 10.0.0.12,10.0.0.11,127.0.0.1
user nginx
group nginx

-------------------------------------------------------------------------------------------------------------------------
fastcgi_pass 和proxy_pass 一样此处使用的是fastcgi协议
fastcgi_param 要修改的参数 因为fastcgi没有root定义,所以用户访问的根路径,fastcgi不会知道,此处定义php文件的跟路径/data/nginx $fastcgi_script_name fastcgi脚本的名字,即访问的php的路径uri
include fastcgi_params;fastcgi_params 中定义了一些用户变量要传递给php-fpm,以确保每个用户访问的内容,都是自己的内容。这个文件中也可以$fastcgi_script_name fastcgi 这个脚本的路径,不过在配置文件中改
fastcgi_cache_path 一些fastcgi代理缓存的内容,与proxy一致。

upstream模块

http{
 upstream websrv {
        server 10.0.0.12:80;
        server 10.0.0.15:80;
        }
server {
 location / {
         proxy_pass http://websrv;
        }

}
}
---------------------------------------------------------------------------------------------------------------------------
Syntax: server address [parameters];
Default:    —
Context:    upstream

#parameters说明
least_conn: 最少连接 ==> LVS LC
wegiht 权重
max_conns=number 定义服务器的并发最大连接数
max_fails=number 健康检查状态  0代表不检查,失败重试的次数
faile_timeout = second 健康检查状态,超时多长时间失效
backup  备用主机,server全挂了它才会响应,可以作为灰度发布
down 人为把sever down了
# 调度算法
ip_hash:不支持backup,相当于sh,基于IP地址,做粘性session
hash key; hash把什么就把什么当键调度,key为cookie就基于cookie调度(商业版支持cookie绑定)
hash key [consisten]
hash $request_uri   基于LVS的DH,所有请求连接都在同一台服务器上,提高缓存命中率
(根据hash 表保存对应的记录,传统方式)

取模法

对key进行hash算法,然后对后端服务器权重总和进行取模,假设A(2),B(1),权重为3.取模为0,1,2.0分配到A,1分配到A,2分配到B。根据取模的余数,分配连接到服务器
问题:当后端服务器权重出现改变,或者后端服务器节点出现变化时。会导致连接全部打乱,导致雪崩效应

一致性哈希算法

会解决取模算法弊端,伯克利大学的教授发明对key的hash进行232次方取模,得到余数范围0-232-1,并将0-232-1的所有数平均分配到一个圆上,对后台服务器的IP进行232次方取模,

image.png 。假设3台服务器平均落到圆上的3个位置,对key进行取模。3台服务器平均分配到圆上的3个位置。依据对连接url取模的位置落点,到圆上的三个位置的长短进行分配连接,假设A宕了,只影响AB这一段
问题: image.png
3台服务器没有分配到圆上,为了解决这一问题,采用虚拟服务器方法。对各个服务器各加50台虚拟服务器,对虚拟服务器进行取模。真实服务器,承担虚拟服务器的连接数。这样就可以平均分配服务器的连接数
hash key [consisten]
hash key 取模法
hash key [consisten] 一致性哈希算法(消耗更多的性能,计算量更大)

keepalive connections;
保持连接的个数,默认没有。客户端30000个请求,反向代理也需开启30000个socket连接后端服务器。则所有请求后端某一台server的都保持连接,不用开启新的socket和不用三次握手。由于前端访问量具大,所以需要定义多少个连接是长连接。此处长连接是针对worker进程
upstream websrv {
server 10.0.0.12:80;
server 10.0.0.15:80;
keepalive 32;
}

stream 模块

无法解析某个具体服务,所以每个server中一定有个proxy_pass,可以为后端某个协议的具体主机,其余高级功能与http模块的反向代理一样

stream {
  server {
        listen 2099;
        proxy_pass 10.0.0.12:22;

        }
}

相关文章

  • nginx7层负载均衡

    nginx补充 master进程: 加载配置文件,管理worker进程,平滑升级worker进程:基于BSD(ke...

  • 四层&七层负载均衡

    四层&七层负载均衡 负载均衡层次归类nginx应用层七层负载均衡LVSTCP层传输层四层负载均衡 常用的负载均衡有...

  • 简述四层和七层负载均衡的特点及Haproxy、nginx与LVS

    1、四层负载均衡与七层负载均衡 四层负载均衡指的是负载均衡设备通过报文中的目标IP地址和端口负载均衡算法,选择到达...

  • 四层LVS 与 七层Nginx负载均衡 的区别?

    一、四层负载均衡与七层负载均衡: (1)四层负载均衡: 四层负载均衡工作在 OSI 七层模型的第四层(传输层),指...

  • nginx 负载均衡

    linux负载均衡总结性说明(四层负载/七层负载) 一,什么是负载均衡1)负载均衡(Load Balance)建立...

  • 四层负载均衡转发模式

    负载均衡又分为四层负载均衡和七层负载均衡。四层负载均衡工作在OSI模型的传输层,主要工作是转发,它在接收到客户端的...

  • HAProxy调度、ACL控制和负载均衡以及LNMT实现动静分离

    1、简述四层和七层负载均衡的特点及Haproxy与LVS之间的对比 什么是四层负载均衡? 四层负载均衡指的是负载均...

  • 3.Nginx的反向代理

    nginx反向代理 反向代理就是负载均衡负载均衡分为四层负载和七层负载四层负载:基于IP+端口的负载七层负载:基于...

  • Nginx-负载均衡

    章节目录 什么是负载均衡 使用负载均衡要解决的问题 基于LVS的中间件架构GSLBSLB四层负载均衡和七层负载均衡...

  • Haproxy负载均衡及其调度算法详解

    四层和七层负载均衡的特点 四层负载均衡:即在OSI第4层工作,就是TCP层,可以根据IP+端口进行负载均衡。此种L...

网友评论

      本文标题:nginx7层负载均衡

      本文链接:https://www.haomeiwen.com/subject/khisnhtx.html