配置负载均衡服务器集群php
upstream backend { server x.x.x.x:1023; server x.x.x.x:1024; server x.x.x.x:1025; }
对特定请求进行分发html
server { listen 1111; server_name www.siguoya.name; location / { proxy_pass http://backend; } }
nginx负载均衡在分发请求的时候,默认会采用轮询的方式。即:nginx
请求顺序 | 请求分发 |
---|---|
第一次访问:http://www.siguoya.name:1111/ | x.x.x.x:1023 |
第二次访问:http://www.siguoya.name:1111/ | x.x.x.x:1024 |
第三次访问:http://www.siguoya.name:1111/ | x.x.x.x:1025 |
假如Nginx原本要将请求分发到 x.x.x.x:1024 这台服务器的,结果这台服务器挂掉了,那么Nginx就会将这次请求再分发到x.x.x.x:1025,避免影响到用户访问。git
Nginx负载均衡判断后端服务器挂了的依据:github
proxy_next_upstream
,能够对后端响应40四、50二、50三、50四、500等状态码进行备用处理。ngx_http_upstream_check_module
若是咱们想要测试某个服务器down掉,负载均衡会怎样处理,能够登陆到特定的后端服务器,执行以下命令,伪装该服务器已经down掉:redis
iptables -A INPUT -p tcp --dport 1024 -j DROP
upstream backend { #down表示当前的服务器暂时不可用,不参与负载均衡 server www.aaa.com down; #max_conns=100表示此服务器的最大链接数为100 server www.bbb.com:1234 max_conns=100; #weight表示权重,权重越大,被分配到的次数就越多 server www.ccc.com weight=3; #backup表示这是预留的备份服务器,只在其余的节点都不可用的时候才启用 server www.ddd.com backup; #max_fails在连续超过3次失败后,30秒内不要再分发请求到此服务器,默认fail_timeout为10秒 server x.x.x.x:8080 max_fails=3 fail_timeout=30s; }
方式 | 说明 |
---|---|
轮询 | 按时间顺序逐一分配 |
加权轮询 | 权重值越大,被分配到的次数就越多 |
ip_hash | 请求按访问IP的hash结果来分配,同一个IP固定的访问某台后端服务器 |
least_conn | 哪台服务器链接数少,就分发给哪台服务器 |
url_hash | 按照访问URL的hash结果来分配,同一URL固定的访问某台后端服务器 |
hash关键数值 | hash自定义的key |
通过实际测试,ip_hash并不能彻底保持cookies的连续性,最好仍是将cookies存放在redis等内存型数据库中
upstream heartide { ip_hash; server x.x.x.x:1023; server x.x.x.x:1024; server x.x.x.x:1025; }
能够经过以下方法,定位负载均衡到底将请求分配给了哪台服务器,这有助于咱们针对后端集群中特定的某台服务器进行调试。shell
add_header Backend-Server $upstream_addr;
nginx.conf
中的 worker_processes
、php.ini
中的 pm
参数等是否设置为auto
。若是都是 auto
,则能够买不一样配置的服务器。若是不是,则须要修改相关配置文件,避免性能参数设置与机器硬件不相匹配专有网络+EIP+NAT
的解决方案,统一后端集群服务器的出口IPOSS
中,便于统一存储、分析Redis
、OSS
等位置进行集中存储