Linux服务器通过nginx实现负载均衡

文章目录 收缩

目前有两台服务器,ip分别是:


192.168.1.10
192.168.1.20

两台服务器均安装了apache,php。也同时配置好了网站。
目前网址绑定到192.168.1.10。
目前希望实现如下功能:
在用户通过域名访问时,随机访问到这两台服务器中的一台,达到分流的目的,减轻服务器的压力。
目前想到的方案是,通过nginx来实现负载均衡,即:把请求转发到对应服务器。用户在其中一台服务器中上传了文件时,需要立即同步到另一台服务器,具体办法可以参照上一篇文章:《linux中inotify+unison实现数据双向实时同步
1.安装Nginx(注:以下是在centos6.5上安装的,其他版本可能略有不同)
(1)安装PCRE库


cd /home
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz 
tar -zxvf pcre-8.40.tar.gz
cd pcre-8.40
./configure
make
make install

(2)安装zlib库


yum y install zlib*

(3)安装ssl(某些vps默认没装ssl)


cd /home
wget http://www.openssl.org/source/openssl-fips-2.0.14.tar.gz 
tar -zxvf openssl-fips-2.0.14.tar.gz
yum -y install openssl openssl-devel

(4)安装nginx
注意:nginx的默认安装路径是 /usr/local/nginx 其运行文件在其/usr/local/nginx/sbin目录下面


cd /home
wget http://nginx.org/download/nginx-1.4.2.tar.gz
tar -zxvf nginx-1.4.2.tar.gz
cd nginx-1.4.2
./configure 
make
make install

(5)nginx配置负载均衡
修改nginx配置文件:


vi /usr/local/nginx/conf/nginx.conf

如果不知道nginx.conf的位置,可以通过find / -name nginx.conf来查找
关键内容如下:


http {
     #设定mime类型,类型由mime.type文件定义
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    #设定日志格式
    access_log    /var/log/nginx/access.log;

    #设定负载均衡的服务器列表
    upstream load_balance_server {
        #weigth参数表示权值,权值越高被分配到的几率越大
        server 192.168.1.10:8080   weight=5;
        server 192.168.1.20:80   weight=1;
    }
   
   #HTTP服务器
   server {
        #侦听80端口
        listen       80;
        
        #定义使用www.xx.com访问
        server_name  www.helloworld.com;

        #对所有请求进行负载均衡请求
        location / {
            root        /root;                 #定义服务器的默认网站根目录位置
            index       index.html index.htm;  #定义首页索引文件的名称
            proxy_pass  http://load_balance_server;  #请求转向load_balance_server 定义的服务器列表



            #以下是一些反向代理的配置(可选择性配置)
            #proxy_redirect off;  
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
            proxy_set_header host $host;
            proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
            proxy_set_header X-real-ip $remote_addr;
            proxy_connect_timeout 90;          #nginx跟后端服务器连接超时时间(代理连接超时)
            proxy_send_timeout 90;             #后端服务器数据回传时间(代理发送超时)
            proxy_read_timeout 90;             #连接成功后,后端服务器响应时间(代理接收超时)
            proxy_buffer_size 4k;              #设置代理服务器(nginx)保存用户头信息的缓冲区大小
            proxy_buffers 4 32k;               #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
            proxy_busy_buffers_size 64k;       #高负荷下缓冲大小(proxy_buffers*2)
            proxy_temp_file_write_size 64k;    #设定缓存文件夹大小,大于这个值,将从upstream服务器传
            
            client_max_body_size 10m;          #允许客户端请求的最大单文件字节数
            client_body_buffer_size 128k;      #缓冲区代理缓冲用户端请求的最大字节数
        }
    }
}

(6)修改apache配置
由于nginx需要占用80端口,所以需要修改原先apache的端口,例如将apache的端口由80改为8080
查找httpd.conf的位置:
find / -name httpd.conf


vi /etc/httpd/conf/httpd.conf

将里面的Listen 80改为Listen 8080,
ServerName 127.0.0.1:80改为ServerName 127.0.0.1:8080
保持配置后,重启httpd服务


service httpd restart

(7)启动及重启nginx
nginx启动:


/usr/local/nginx/sbin/nginx

重启:


/usr/local/nginx/sbin/nginx -s reload

(8)观察效果
编辑php文件,内容如下:


echo 'ip:'.$_SERVER['SERVER_ADDR'];

将该文件分别上传到两台服务器的根目录下,通过域名访问该文件,可以看到实际访问的ip地址。如果ip地址在变化,说明负载均衡配置成功。

Nginx负载均衡的集中方式介绍

轮询

轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,如下配置后轮训10001服务和10002服务。

upstream  dedemao-server {
       server    localhost:10001;
       server    localhost:10002;
}

权重

指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能,如下配置后10002服务的访问比率会是10001服务的二倍。

upstream  dedemao-server {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

iphash

每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用)。

upstream  dedemao-server {
       ip_hash;
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

最少连接

将请求分配到连接数最少的服务上。

upstream  dedemao-server {
       least_conn;
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
}

fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream  dedemao-server {
       server    localhost:10001 weight=1;
       server    localhost:10002 weight=2;
       fair;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注