使用Nginx的upstream实现简单的1+2负载均衡

原创
2012/08/06 19:29
阅读数 4.2K

【伍哥原创】

使用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;
}

【全文完】

展开阅读全文
打赏
0
1 收藏
分享
加载中
更多评论
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部