负载均衡就是将负载分摊到多个操作单元上执行,从而提高服务器的可用性和响应速度,带给用户更好的体验。nginx负载均衡有四种方式:轮询,加权轮询,ip_hash,第三方模块。
轮询是nginx负载均衡默认设置的,每个请求按照时间顺序逐一分配到不同的后端服务器,如果有服务器宕机,则会剔除
server {
listen 81;
server_name localhost;
location /{
root html;
index index.html index.htm;
}
location /user{
proxy_pass http://web-server;
}
upstream web-server{
server 192.168.78.128;
server 192.168.78.200;
}
}
它一般是通过upstream去配置,当我访问localhost:81/user时会被代理到192.168.78.128或者192.168.78.200,刷新页面这两个页面会轮流出现,加权轮询负载均衡就是在他们后面加个weight值
server {
listen 81;
server_name localhost;
location /{
root html;
index index.html index.htm;
}
location /user{
proxy_pass http://web-server;
}
upstream web-server{
server 192.168.78.128 weight=1 max_fails=1 fails_timeout=2;
server 192.168.78.200 weight=3 max_fails=2 fails_timeout=2;
server 192.168.79.155 backup;
server 192.168.78.165 down;
}
}
这样每4次就会有3次是192.168.78.200,一次192.168.78.128,不过192.168.78.200也不一定是连续3次出现,是随机分配的
max_fails是允许请求失败的次数,如果超出这个次数,nginx会返回proxy_next_upstream指令定义的错误,fail_timeout是经历了max_fails次失败后暂停服务的时间,一般配合max_fails使用,backup表示这个是预留服务器,只有当其他服务器都故障时他才会被使用,还有一个参数是down,表是当前服务器暂时不参与负载均衡
接下来是ip_hash的方式
upstream web-server{
ip_hash;
server 192.168.78.128 ;
server 192.168.78.200 ;
server 192.168.79.155 ;
server 192.168.78.165 ;
}
ip_hash为每个用户绑定一台服务器,可以使用down参数,但是不能使用weight和backup参数
还有一种使用第三方模块的包,可以下载fair模块或者url_hash,这里不再说明了