不同ip地址只是找到服务器,但是端口号能送到一台服务器上不同的程序,一个程序默认只能占用一个端口号,nginx默认端口号为80。
解决大并发情况下将流量分散到多台后端服务器上,从而解决web达不到,访问不了的问题。
-
配置前工作
准备多台主机
web1:192.168.67.136
web2:192.168.67.139
LB-1:192.168.67.141
保证每一台nginx都是编译安装而且是启动状态。
-
负载均衡
操作详情可见官方文档:Using nginx as HTTP load balancer
在LB-1主机进行操作:
cd /usr/local/nginx-1/conf
vim nginx.conf写入:
worker_processes 2;
events {
worker_connections 2048;
}
http {
#定义一个负载均衡器 名字叫scweb,会将流量分发到下面的2台服务器里
upstream scweb {
server 192.168.67.136;
server 192.168.67.139;
}
#定义一个虚拟主机,对外提供web服务
server {
listen 80;
#定义一个访问网页的根目录,定义一个路由,转发到scweb负载均衡配置上去处理
location / {
proxy_pass http://scweb;
}
}
}
编辑完毕后nginx -s reload 刷新nginx,去浏览器输入LB-1主机ip地址查看网页效果,刷新几次查看负载均衡效果。
-
算法
调用算法(负载均衡算法):以上配置文件是轮询算法
- round-robin:轮询算法,但是要求几台主机配置完全一样
- least-connected:least_conn最小连接数,哪台主机连接次数最少就连这台后端主机
- ip_hash:ip_hash让客户机总是访问相同的web服务器,运维客户机的ip地址没有改变,适合session信息保存在服务器的场景。
轮询算法基础上能改权重,server 192.168.67.136 weight=10;每个后端网站权重默认为1,加权重就能提高访问web1的概率。
要是web1的nginx关闭了,那么负载均衡器只会连接到web2服务器,说明负载均衡有健康检测功能。