Nginx负载均衡

linux cooljun 2764℃ 0评论
在搭建负载均衡服务器之前我们首先准备好4台机器。
IP依次设置为192.168.1.110到192.168.1.113(如果是练习用虚拟机模拟即可)
每台机器都是Linux系统而且web环境为lnmpa(建议源码安装)。
当我们有了多台服务器后大家自然希望处理请求更加均衡些。不能有的忙的要死
有的闲的蛋都碎了那是不合理的。放眼望去我们所熟知的软件而且开发还可以用到的
Nginx恰恰可以做到这一点下面我们就说说Nginx的负载均衡。
下面这个配置文件就是我们的负载均衡服务器也就是IP为192.168.1.110这台机器。
Nginx常规配置这里不再赘述。我们主要看upstream和server部分。
在upstream myweb里面定义了负载均衡地址池其中也包括本机IP(192.168.1.110)
在虚拟主机server里面默认监听了80端口。当我们访问balance.com时候就会被分发到地址池里面。
第一个请求被分发到192.168.1.111这台机器上并且由监听90端口这个服务处理
第二个请求被分发到192.168.1.112这台机器上并且由监听91端口这个服务处理
第三个请求被分发到192.168.1.113这台机器上并且由监听92端口这个服务处理
第四个请求被分发到192.168.1.110这台机器上并且由监听93端口这个服务处理
再有请求依次从头轮回。当然上面机器IP和端口按照自己实际情况自行配置我这就是例子
大家也注意到了一点在地址池当中也包含了当前负载均衡服务器192.168.1.110这台机器
也就是说这个机器不但负责分发请求也处理请求。强烈建议大家在地址池当中把它去掉。
原因很简单这样做会加大负载均衡服务器压力还有就是偏离了我们设计的初衷。
我们用负载均衡目的就是分担服务器压力共同处理请求。如果还是都混到一起那就又回到原点了
因此把握一个原则负载均衡服务器只负责分发请求不处理请求。那么既然不处理请求为什么
还要放到地址池里面呢?这里我要更正一个错误就是个别资料里直接说Nginx做了
负载均衡服务就不能处理web请求这是错的(不是不能只是我们不去做而已)。
如下就是192.168.1.110机器的Nginx配置文件很简单当请求被分发到这台机器时
由监听93端口的服务进行处理这里也就是Nginx本身。然后做了一个反向代理转发到
本机的193端口这个端口其实是Apache监听的。最终这个web服务由Apache响应
如果是js、css、图片和flash等等由Nginx响应并缓存。
192.168.1.110 Nginx配置文件:
user  www www;
worker_processes auto;
error_log  /home/wwwlogs/nginx_error.log  crit;
pid        /usr/local/nginx/logs/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 51200;
events
    {
        use epoll;
        worker_connections 51200;
        multi_accept on;
    }
http{
        upstream myweb{
                server 192.168.1.111:90;
                server 192.168.1.112:91;
                server 192.168.1.113:92;
                server 192.168.1.110:93;
        }
        server{
                listen 80;
                server_name balance.com;
                location / {
                    #被负载均衡分发地址池
                    proxy_pass http://myweb;
                    #如果有服务器报如下错误就不分发
                    proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
                    #获取请求的真正IP否则为负载均衡服务器IP
                    #这样返回结果不经过负载均衡服务器直接返给客户端,减少负载均衡服务器压力
                    proxy_set_header Host $host;
                    proxy_set_header X-Forwarded-For $remote_addr;
                }
        }
        server{
                listen 93;
                server_name test110.com;
                index index.html index.htm index.php default.html default.htm default.php;
                root  /tmp/test110;
                location ~ .*\.(php|php5)?$
                {
                    proxy_pass http://127.0.0.1:193;
                    include proxy.conf;       
                }
                location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
                {
                    expires      30d;
                }
                location ~ .*\.(js|css)?$
                {
                    expires      12h;
                }
        }
}
192.168.1.110 Apache配置文件:
<VirtualHost *:193>
ServerAdmin webmaster@example.com
php_admin_value open_basedir “/tmp/test110:/tmp/:/var/tmp/:/proc/”
DocumentRoot “/tmp/test110”
ServerName test110.com
ServerAlias  *.test110.com
ErrorLog “/home/wwwlogs/dev1.com-error_log”
CustomLog “/home/wwwlogs/dev1.com-access_log” common
<Directory “/tmp/test110”>
    SetOutputFilter DEFLATE
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    DirectoryIndex index.html index.php
</Directory>
</VirtualHost>
Apache只展示虚拟主机部分其他部分不再展示。
至于其他三个机器也都是Nginx接收然后转发到本机Apache处理。
配置和上面基本相似不在展示。按照如上配置就可以实现Nginx负载均衡
如果大家还有兴趣可以再研究另外一个非常火热的负载均衡软件LVS
以及这后续问题就是怎样保证这四台机器上应用一致和他们
在连接数据库的时候从库之间怎样做负载均衡。
主从复制如果主库挂了又怎样处理。
Nginx负载均衡服务器挂了又怎样处理。

转载请注明:cooljun小窝 » Nginx负载均衡

如果你觉得这篇文章对你有帮助,请支持我继续更新网站 !捐赠本站
喜欢 (0)or分享 (0)

您必须 登录 才能发表评论!