NGINX服务器实现负载均衡
关键技术:nginx upstream
基本语法说明
在进行实际操作之前我们先进行简单的介绍nginx upstream 的一些基础使用方法。
基本结构 :upstream name{指令…} 基本配置例子,如下:
upstream uname{
server ip;
server ip;
#多个ip 以此往下递增
}
server{
location /{
proxy_pass http://uname/; #转发upstream
#此处需要注意uname为upstream 的名字,且最后有/
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
}
server 指令的基本语法 server address [配置参数…]
配置参数 | 参数说明 | 使用示例 |
weight | 服务器权重,权重越搞访问次数越高 | weight =1 |
max_fails | 访问失败多少次后踢出,表示为宕机 | max_fails=2 |
fail_timeout | 踢出后重新探测服务器是否正常的时间,单位s | fail_timeout=20 |
max_connsr | 服务器的最大连接数量,默认为0,不限制 | max_connsr=100 |
backup | 标记服务器为备用,当其他服务器都不可用时才会访问此服务器(轮询下可用) | backup |
down | 标记服务器为宕机状态,暂不参与负载策略 | down |
指令使用示例[轮询策略]
轮询策略:nginx按加权轮转的方式将请求分发到各服务器,常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能。比如以下配置第一会访问192.168.0.1,第二次和第三次会访问到192.168.0.2,第四次又访问192.168.0.1,以此类推。
upstream uname{
server 192.168.0.1 weight=1 max_fails=2 max_connsr=100 backup;
server 192.168.0.2 weight=2 max_fails=2 max_connsr=100 ;
}
iphash策略
每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,而不是像轮询那样,没次访问都会再重新分配。
upstream uname{
ip_hash;
server 192.168.0.1 weight=1 max_fails=2 max_connsr=100 backup;
server 192.168.0.2 weight=2 max_fails=2 max_connsr=100 ;
}
least_conn
将你新来的访问转发到访问量最少的服务器上,保证了每个服务器的服务数量尽可能的平等
upstream uname{
least_conn;
server 192.168.0.1;
server 192.168.0.2 ;
}
fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。保证性能最好的服务器能够充分发挥。
upstream uname{
server 192.168.0.1;
server 192.168.0.2 ;
fair;
}
实际配置
服务器的准备
1:为了能够保证我们此处能够用于生产环境,我在腾讯云临时租用了几个服务器来进行搭建演示。为了能够展示出效果,至少得3台服务器。具体架构如下:
流量转发服务器只负责流量转发,而不负责相关的逻辑处理,服务器一和服务器二则进行具体的业务逻辑处理。2:在选择服务器上,我们尽可能将所有的服务器选择在同一个局域网之下,这样内网之间传输数据是基本没有消耗的,如果是外网搭建集群,那么流量转发的服务器还需要通过外网去请求,无论是请求时间、还是资源都是很浪费的。
- 118.24.251.228(内网:172.30.0.5) 为一号服务器
- 129.28.194.183(内网:172.30.0.6) 为二号服务器
- 129.28.189.148(内网:172.30.0.4) 为流量转发服务器
3:对每台服务器都进行nginx安装。此处具体的可参考以下博文 nginx 安装教程
4:搭建完成之后对服务器一和服务器二都进行站点配置
服务器一:
服务器二:
配置转发流量的服务器
upstream phpstream{
server 172.30.0.6 weight=1;
#如果这里使用的是内网ip 需要在该服务器上将次ip 添加到域名里
server 172.30.0.5 weight=1;
}
server
{
listen 80;
server_name 129.28.189.148;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/129.28.189.148;
location /{
proxy_pass http://phpstream/; #转发upstream
#此处需要注意uname为upstream 的名字,且最后有/
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
}
此时我们访问流量转发服务器会出现如下界面
此时不用慌,并不是配置出现了问题,我们只需要到服务器一、服务器二上把流量转发的服务器的ip添加上去就可以了。
然后我们在进行访问刷新
在刷新过程中我们可以看到同一个ip地址刷新的结果呗转发到了服务器一和二上。至此就完成了nginx upstream 反向代理集群的搭建。