当一台做事器的性能达到极限时,我们可以利用做事器集群来提高网站的整体性能。那么,在做事器集群中,须要有一台做事器充当调度者的角色,用户的所有要求都会首先由它吸收,调度者再根据每台做事器的负载情形将要求分配给某一台后端做事器去处理。
那么在这个过程中,调度者如何合理分配任务,担保所有后端做事器都将性能充分发挥,从而保持做事器集群的整体性能最优,这便是负载均衡问题。
基本环境

三台centos虚拟机(windows也可以),都搭建好了nginx环境。当然也可以利用docker映射三个不同端口的nginx容器进行。centos利用docker搭建nginx环境方法:《利用docker快速搭建nginx+php环境》
三台主机分别是:
192.168.73.128 主
192.168.73.130
192.168.73.131
首先我们解析个域名codehui.net到主理事器192.168.73.128上
192.168.73.128 codehui.net
步骤
主理事器配置
编辑nginx配置文件
vi /etc/nginx/nginx.conf
在http节点中加入下面配置,负载均衡的几种常用办法请查看文尾。
# 负载均衡做事器列表 upstream codehui.net { server 192.168.73.130:80; server 192.168.73.131:80; } # 监听80端口的访问 server{ listen 80; server_name codehui.net; location / { proxy_pass http://codehui.net; } }
其他两台做事器配置
我们分别在两台做事器上新建个入口文件,作为区分
echo \公众<?php echo \公众我是一号做事器:192.168.73.130\公众;\公众 > index.php
echo \"大众<?php echo \"大众我是二号做事器:192.168.73.131\"大众;\公众 > index.php
如果要配置其他功能,可以在nginx.conf中加入如下方法
server{ listen 80; server_name codehui.net; root /usr/share/nginx/www; location / { index index.php index.html; }}
把稳重启nginx做事
service nginx reload
测试
可以看到两次要求分发到了不同做事器
代码汇
代码汇
负载均衡的几种常用办法
1、 轮询(默认)
每个要求按韶光顺序逐一分配到不同的后端做事器,如果后端做事器down掉,能自动剔除。
upstream nginx_server { server server1; server server1;}
2、weight
指定轮询几率,weight和访问比率成正比,用于后端做事器性能不均的情形。
upstream nginx_server { server server1 weight=4; server server2 weight=6;}
权重越高,在被访问的概率越大,如上例,分别是40%,60%。
3、 ip_hash
上述办法存在一个问题便是说,在负载均衡系统中,如果用户在某台做事器上登录了,那么该用户第二次要求的时候,由于我们是负载均衡系统,每次要求都会重新定位到做事器集群中的某一个,那么已经登录某一个做事器的用户再重新定位到另一个做事器,其登录信息将会丢失,这样显然是欠妥的。
我们可以采取ip_hash指令办理这个问题,如果客户已经访问了某个做事器,当用户再次访问时,会将该要求通过哈希算法,自动定位到该做事器。
每个要求按访问ip的hash结果分配,这样每个访客固定访问一个后端做事器,可以办理session的问题。
upstream nginx_server { ip_hash; server server1; server server2;}
4、 fair (第三方)
upstream nginx_server { server server1; server server2; fair;}
5、url_hash (第三方)
按访问url的hash结果来分配要求,使每个url定向到同一个后端做事器,后端做事器为缓存时比较有效。
upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32;}
每个设备的状态设置为:
down 表示单前的server暂时不参与负载weight 默认为1.weight越大,负载的权重就越大max_fails:许可要求失落败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的缺点fail_timeout : max_fails次失落败后,停息的韶光backup: 其它所有的非backup机器down或者忙的时候,要求backup机器。以是这台机器压力会最轻。 配置实例:#user nobody;worker_processes 4;events { # 最大并发数 worker_connections 1024;}http{ # 待选做事器列表 upstream myproject{ # ip_hash指令,将同一用户引入同一做事器。 ip_hash; server 125.219.42.4 fail_timeout=60s; server 172.31.2.183; } server{ # 监听端口 listen 80; # 根目录下 location / { # 选择哪个做事器列表 proxy_pass http://myproject; } }}
作者:代码汇
链接:https://www.jianshu.com/p/445e42429d62