【伍哥原创】
使用Nginx的upstream实现简单的1+2负载均衡
(基于HTTP的调度,所以也叫7层负载均衡)
伍哥的实验环境:一台普通PC机,安装了CentOS 6.2,安装了Nginx 1.2和PHP-FPM
1,把实验环境安装好
Nginx和php-fpm安装起来都挺轻松的,这里就不多说了。如遇疑问,请参考伍哥之前的相关文章,里面都有很详细的操作步骤。
2,简单的1+2负载均衡示意图
由于机器所限,伍哥图快,就用一个服务器来测试。其实安装XenServer做几台虚拟机也是可以的。
Proxy是192.168.1.27:80,如果是用在产品环境,就应该是你买来的公网IP。
真实服务器是192.168.1.27:8080和192.168.1.27:8081。如果你有另外两个机器,也可以配置成192.168.1.28:80和192.168.1.29:80。
用户PC机就是伍哥自己的开发机,呵呵。
3,配置两个web server
先确认你的nginx主配置文件里面有:
include /etc/nginx/conf.d/*.conf;
1
2
3
4
5
6
7
8
9
10
|
#创建web server 1的根目录
mkdir
/web/8080
touch
/web/8080/index
.php
echo
"8080"
>
/web/8080/index
.php
#修改权限,注意下面的web是nginx和php-fpm的执行用户
chown
web.web -R
/web/8080
#去到nginx配置目录
cd
/etc/nginx/conf
.d
#新建web server 1的配置
vim 8080.conf
|
加入8080.conf里面
1
2
3
4
5
6
7
8
9
10
11
|
server {
listen 8080;
root /web/8080;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
|
web server 2也是完全相同的操作,唯一不同的就是8080改成8081。
配置好以后在用户PC机用浏览器访问192.168.1.27:8080和192.168.1.27:8081看看效果。
4,配置proxy
1
2
|
cd
/etc/nginx/conf
.d
vim proxy.conf
|
加入到proxy.conf里面
1
2
3
4
5
6
7
8
9
10
11
12
13
|
upstream backend {
server 192.168.1.27:8080 weight=6 max_fails=2 fail_timeout=5;
server 192.168.1.27:8081 weight=4 max_fails=2 fail_timeout=5;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
|
这里用的了nginx的upstream模块。其中backend就是这个upstream的名字,可以随便取。花括号里面就是放真实服务器的记录,以分号结束。
如果你想某个机器临时不要被调度,可以加上 down 指令。
weight是访问权重,默认是1,主要是体现一个调度权重的比例;max_fails是访问失败次数,默认是1,达到这个失败次数就认为机器down 了,在fail_timeout那么多秒内不再参与负载调度;fail_timeout就是一个被认为down了的机器重新加入调度的等待时间。你可以直 接不写这三个参数,这里是为了说明清楚。
然后重启nginx
1
2
3
4
|
#重启nginx
/etc/init
.d
/nginx
restart
#或者
/usr/local/nginx/sbin/nginx
-s reload
|
所有东西配置好以后,在用户PC机用浏览器访问192.168.1.27看看效果。
5,调度策略
- 轮询(默认,相当于weight都是1)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
- 按权重 weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。就是我们上面的实验配置了。
- ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。主要,不能和weight方式一起使用。
1
2
3
4
5
|
upstream backend {
ip_hash;
server 192.168.1.27:8080;
server 192.168.1.27:8081;
}
|
【全文完】