码迷,mamicode.com
首页 > 其他好文 > 详细

nginx实现动静分离负载均衡集群

时间:2015-07-29 06:41:58      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:服务器   基础知识   拓扑图   客户端   应用层   

LB 负载均衡集群分两类: LVS (四层)和 nginx 或 haproxy (七层)

客户端通过访问分发器的 VIP 来访问网站

        |

现在应用更复杂,比如现在网站页面有: .php .html .png .jpeg .jsp 等, 有劢态页面有静

态页面。静态页面一般是丌变的,想访问更快些,前面学习过 SQUID。

        |

但是前面的 LVS 是四层的。基于 IP 的。现在需要在应用层基于丌同的应用迚行分发。

        |

七层 LB , Nginx / Haproxy 都可以支持 7 层 LB

现在实现以下功能,拓扑图:


技术分享

注:使用 Nginx 或 Haproxy 时,这里访问处理都需要经过分发器,没有像 LVS/DR 方式。


工作中,希望这样:

静态文件处理:可以使用 nginx 或 apache

动文件处理: apache ,tomcat

图片文件处理: squid

使用 nginx 实现动静分离的负载均衡集群

1. Nginx 负载均衡基础知识

nginx 的 upstream 目前最常用 3 种方式的分配

1)、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

2)、weight

挃定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。

3)、ip_hash

每个请求挄访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的

问题。

4)、fair(第三方)

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

5)、url_hash(第三方) url 哈希


实例 1:使用 nginx 实现负载均衡和动静分离

源码编译安装 nginx

一、安装 nginx 时必须先安装相应的编译工具

[root@xuegod63 ~]#yum -y install gcc gcc-c++ autoconf automake

[root@xuegod63 ~]#yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel

zlib:nginx 提供 gzip 模块,需要 zlib 库支持

openssl:nginx 提供 ssl 功能

pcre:支持地址重写 rewrite 功能

安装 nginx:

[root@xuegod63 ~]# ll nginx-1.8.0.tar.gz -h #整个 nginx 文件不到 813K,很小

-rw-r--r-- 1 root root 813K Jul 14 20:17 nginx-1.8.0.tar.gz

[root@xuegod63 ~]# tar -zxvf nginx-1.8.0.tar.gz -C /usr/local/src/

[root@xuegod63 ~]# cd /usr/local/src/nginx-1.8.0/

[root@xuegod63 ~]# ./configure --prefix=/server/nginx-1.8.0 --with-http_dav_module

--with-http_stub_status_module  --with-http_addition_module  --with-http_sub_module

--with-http_flv_module --with-http_mp4_module

查看参数:

[root@xuegod63 nginx-1.8.0]# ./configure --help | grep mp4

参数:

--with-http_dav_module 吭用 ngx_http_dav_module 支持(增加 PUT,DELETE,MKCOL:创建集

合,COPY 和 MOVE 方法)默认情况下为关闭,需编译开启

--with-http_stub_status_module 吭用 ngx_http_stub_status_module 支持(获取 nginx 自上次启

动以来的工作状态)

--with-http_addition_module 启用 ngx_http_addition_module 支持(作为一个输出过滤器,支持

不完全缓冲,分部分响应请求)

--with-http_sub_module 启用 ngx_http_sub_module 支持(允许用一些其他文本替换 nginx 响应中

的一些文本)

--with-http_flv_module 启用 ngx_http_flv_module 支持(提供寻求内存使用基于时间的偏移量文件)

--with-http_mp4_module 启用对 mp4 文件支持(提供寻求内存使用基于时间的偏移量文件)

编译和安装:

[root@xuegod63 ~]#make -j 4

[root@xuegod63 ~]#make install

生成运行 nginx 的用户:

[root@xuegod63 nginx-1.8.0]# useradd -u 8000 -s /sbin/nologin nginx

[root@xuegod63 nginx-1.8.0]# id !$

id nginx

uid=8000(nginx) gid=8000(nginx) groups=8000(nginx)

nginx 主要目录结构:

[root@xuegod63 /]# ls /server/nginx-1.8.0/

conf html logs sbin

conf #配置文件

html #网站根目录

logs #日志

sbin #nginx 启动脚本

主配置文件:

[root@xuegod63 /]# ls /server/nginx-1.8.0/conf/nginx.conf

启动 nginx:

[root@xuegod63 /]# /server/nginx-1.8.0/sbin/nginx

[root@xuegod63 /]# netstat -antup | grep :80

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN

5281/httpd

[root@xuegod63 /]# netstat -antup | grep :80

开机启动:

[root@xuegod63 nginx-1.8.0]# echo ‘/server/nginx-1.8.0/sbin/nginx & ‘ >> /etc/rc.local

测试:

http://192.168.1.63/

技术分享

nginx 服务日常操作:

测试配置文件语法:

[root@xuegod63 nginx-1.8.0]# /server/nginx-1.8.0/sbin/nginx -t

nginx: the configuration file /server/nginx-1.8.0/conf/nginx.conf syntax is ok

nginx: configuration file /server/nginx-1.8.0/conf/nginx.conf test is successful

重新加载配置文件

[root@xuegod63 nginx-1.8.0]# /server/nginx-1.8.0/sbin/nginx -s reload

关闭 nginx

[root@xuegod63 /]# /server/nginx-1.8.0/sbin/nginx -s stop

[root@xuegod63 /]# /server/nginx-1.8.0/sbin/nginx -s start #没有 start 参数

nginx: invalid option: "-s start"

配置 nginx 成为分发器,实现动静分离

[root@xuegod63 conf]# cd /server/nginx-1.8.0/conf #配置文件目录

[root@xuegod63 conf]# cp nginx.conf nginx.conf.back #备份一下配置文件

[root@xuegod63 conf]# vim nginx.conf

[root@xuegod63 nginx-1.8.0]# vim /server/nginx-1.8.0/conf/nginx.conf #指定启动 nginx 用户

改:# user nobody;

为:user nginx nginx;

改:

43 location / {

44 root html;

45 index index.html index.htm; #在 location / { 。。。} 中添加以下内容

#定义分发策略

location / {

root html;

index index.html index.htm;

if ($request_uri ~* \.html$){

proxy_pass http://htmlservers;

}

if ($request_uri ~* \.php$){

proxy_pass http://phpservers;

}

proxy_pass http://picservers;

}

如图:

技术分享

把以一内容注释掉,否则 php 文件直接在 nginx 服务器上解析了,不再解析给后端服务器:

# location ~ \.php$ {

73 # root html;

74 # fastcgi_pass 127.0.0.1:9000;

75 # fastcgi_index index.php;

76  #  fastcgi_param  SCRIPT_FILENAME

/server/nginx-1.8.0/html$fastcgi_script_name;

77 # include fastcgi_params;

78 # }

如图:

技术分享

#定义负载均衡设备的 Ip

#定义负载均衡设备的 Ip

在配置文件 nginx.conf 的最后一行}前,添加以下内容:

upstream htmlservers { #定义负载均衡服务器组名称

server 192.168.1.62:80;


server 192.168.1.64:80;

}

upstream phpservers{

server 192.168.1.62:80;

server 192.168.1.64:80;

}

upstream picservers {

server 192.168.1.62:80;

server 192.168.1.64:80;

}

#后期工作中,根据工作中的需要,配置成具体业务的 IP 地址

如图:

技术分享

保存退出。

重新加载 nginx 服务器配置文件:

[root@xuegod63 conf]# /server/nginx-1.8.0/sbin/nginx -t

nginx: the configuration file /server/nginx-1.8.0/conf/nginx.conf syntax is ok

nginx: configuration file /server/nginx-1.8.0/conf/nginx.conf test is successful

[root@xuegod63 conf]# /server/nginx-1.8.0/sbin/nginx -s reload

配置后端服务器: xuegod62

配置 web 服务器:

[root@xuegod62 html]# yum install httpd php -y

生成静态测试文件:

root@xuegod62 html]#echo 192.168.1.62 > /var/www/html/index.html

生成动态测试文件:

[root@xuegod62 html]#vim /var/www/html/test.php #写如以下内容:

192.168.1.62-php

<?php

phpinfo();

?>


生成图片文件:

上传如下图片,到“xuegod62 网站/var/www/html/目录下:

技术分享

启动 apache 服务器:

[root@xuegod62 html]# service httpd restart

配置后端服务器: xuegod64

IP: 192.168.1.64

配置 web 服务器:

[root@xuegod64 html]# yum install httpd php -y

生成静态测试文件:

echo 192.168.1.64 > /var/www/html/index.html

生成动态测试文件:

vim /var/www/html/test.php #写如以下内容:

192.168.1.64-php

<?php

phpinfo();

?>

生成图片文件:

上传如下图片,到“xuegod64 网站/var/www/html/目录下:

技术分享

[root@xuegod64 html]# service httpd restart

到此 nginx 实现负载均衡结束。



测试转发静态页面:

http://192.168.1.63/index.html

测试转发劢态页面:

http://192.168.1.63/test.php

测试转发图片:

http://192.168.1.63/pic.jpg


测试性能:

扩展: 文件打开数过多

[root@xuegod64 html]# ab -n 1000 -c 1000 http://192.168.1.62/index.html #运行正常

[root@xuegod64 html]# ab -n 2000 -c 2000 http://192.168.1.62/index.html #报错

This is ApacheBench, Version 2.3 <$Revision: 655654 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.1.62 (be patient)

socket: Too many open files (24) # 测试时,一次打开的 socket 文件太多。

#ulimit -a #查看

#ulimit -n

1024

系统默认一个迚程最多同时允许打开 1024 的文件

解决:

#ulimit -n 10240 #报错的解决方法


总结,扩展:

如有 tomcat ,apache,squid 配置为如下:

[root@xuegod63 conf]# vim nginx.conf # 在最后添加以下内容。 定义服务器组

upstream tomcat_servers {

server 192.168.1.2:8080;

server 192.168.1.1:8080;

server 192.168.1.11:8080;

}

upstream apache_servers {

server 192.168.1.5:80;

server 192.168.1.177:80;

server 192.168.1.15:80;

}

upstream squid_servers {

server 192.168.1.26:3128;

server 192.168.1.55:3128;

server 192.168.1.18:3128;

}


#本文中的IP可根据实际的来配置

本文出自 “枯木知深秋” 博客,请务必保留此出处http://kmzsq.blog.51cto.com/10542759/1679361

nginx实现动静分离负载均衡集群

标签:服务器   基础知识   拓扑图   客户端   应用层   

原文地址:http://kmzsq.blog.51cto.com/10542759/1679361

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!