目录
上一篇文章我们介绍了什么是负载均衡的意义以及Nginx的负载策略,详情见Nginx负载均衡配置(一),本文接着进行Nginx负载均衡配置的介绍
介绍前建议大家提前了解下代理的相关知识,参考博文
一、upstream模块配置说明
upstream模块主要用来配置反向代理服务器组,Nginx会根据配置,将请求分发给服务器组里的某一台服务器。如下,loadServer是服务器组的名称。
http {
......
upstream loadServer {
ip_hash
server 192.168.0.100:80; down
server 192.168.0.101:80; weight 10 max_fails 3 fail_timeout 10s
server 192.168.0.102:80; backup
}
server { #配置处理请求的服务器IP或域名,端口可选,不配置默认使用80端口
listen 80;
location / { #对URL进行匹配,可以进行重定向或者进行新的代理负载均衡
proxy_pass http://loadServer; #将请求转发到loadServer服务器组中配置的某一台服务器上
}
}
......
}
1. 基础配置参数
- down 表示单前的server暂时不参与负载
- weight 权重,默认为1。权值越高被分配到的几率越大
- max_fails 允许请求失败的次数默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误
- fail_timeout max_fails次失败后,暂停的时间。
- backup 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
- server指令:配置处理请求的服务器IP或域名,端口可选,不配置默认使用80端口。
- upstream模块:配置反向代理服务器组,Nginx会根据配置,将请求分发给服务器组里的某一台服务器。loadServer是服务器组的名称。
- location: 对URL进行匹配,可以进行重定向或者进行新的代理负载均衡。
-
proxy_pass http://loadServer:表示将所有请求转发到loadServer服务器组中配置的某一台服务器上。
2. 多组负载均衡配置
nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
- client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
- client_body_temp_path 设置记录文件的目录,最多可以设置三层目录
二、简单的负载均衡配置
通过负载均衡配置,集群中多台服务器共同分担负载,不会出现有的服务器负载宕机而有的服务器却闲置的情况,也不会因某台服务器宕机而影响业务。
1. 环境准备
假设有三台已经安装了nginx(尽量版本相同或版本差别不大,并且服务已正常启动)的服务器:
- A服务器ip:192.168.0.100(Master)
- B服务器ip:192.168.0.101
- C服务器ip:192.168.0.102
测试域名:www.test.com
部署思路:A服务器作为主服务器,域名直接解析到A服务器上,由A服务器负载均衡到B和C服务器上
域名解析:在要访问的Windows的hosts文件中加入:192.168.0.100 www.test.com
2. 具体配置
A服务器(Master)的nginx.conf配置如下:
http {
......
upstream loadServer{ #定义负载设备ip及其设备状态
server 192.168.0.101:80; #做负载均衡的服务器地址B
server 192.168.0.102:80; #做负载均衡的服务器地址C
}
server {
listen 80;
location / {
proxy_pass http://loadServer; #指向上面设置反向代理转发的服务器
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
......
}
B、C服务器的nginx.conf配置如下 :
http {
......
server {
listen 80; #和A服务器中upstream中对应设置的server端口要相同
server_name www.test.com; #域名
location / {
root html;
index index.html index.htm;
}
}
......
}
至此,简单的nginx负载均衡配置已经完成,在添加了hosts的Windows主机上打开浏览器,输入http://www.test.com,就可以看到默认的index.html页面,刷新会在BorC服务器上负载轮询。
☆ 此时,我们发现A服务器只做了Master,负责负载分发,那么是否可以配置主服务器也提供服务呢?
在A服务器的nginx.conf中做如下配置,将A服务加入到upstream节点中,B、C服务器配置不变
http {
......
upstream loadServer{ #定义负载设备ip及其设备状态
server 192.168.0.101:80; #做负载均衡的服务器地址B
server 192.168.0.102:80; #做负载均衡的服务器地址C
server 192.168.0.100:8081; #做负载均衡的服务器地址A(添加A服务的地址)
}
server {
listen 80;
location / {
proxy_pass http://loadServer; #指向上面设置反向代理转发的服务器
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 8081; #端口
server_name test.com; #域名
location / {
root html;
index index.html index.htm;
}
}
......
}
Ending~