【伍哥原创】php
使用Nginx的upstream实现简单的1+2负载均衡
(基于HTTP的调度,因此也叫7层负载均衡)html
伍哥的实验环境:一台普通PC机,安装了CentOS 6.2,安装了Nginx 1.2和PHP-FPMnginx
1,把实验环境安装好
Nginx和php-fpm安装起来都挺轻松的,这里就很少说了。如遇疑问,请参考伍哥以前的相关文章,里面都有很详细的操做步骤。web
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机就是伍哥本身的开发机,呵呵。vim
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看看效果。bash
4,配置proxy服务器
1
2
|
cd
/etc/nginx/conf
.d
vim proxy.conf
|
加入到proxy.conf里面session
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;
}
|
【全文完】