Nginx+Keepalived+Tomcat之动静分离的web集群.docx
《Nginx+Keepalived+Tomcat之动静分离的web集群.docx》由会员分享,可在线阅读,更多相关《Nginx+Keepalived+Tomcat之动静分离的web集群.docx(21页珍藏版)》请在冰豆网上搜索。
![Nginx+Keepalived+Tomcat之动静分离的web集群.docx](https://file1.bdocx.com/fileroot1/2023-1/29/a5049369-fca7-4b20-aa7a-2246fd656103/a5049369-fca7-4b20-aa7a-2246fd6561031.gif)
Nginx+Keepalived+Tomcat之动静分离的web集群
为小公司提供大概一天持续在100万/日之间访问的高性能、高可用、高并发访问及动静分离的web集群方案
Nginx+Keepalived 高可用、反向代理
Nginx+PHP 高并发、动态解析
Tomcat JSP动态解析
Apache 稳定的HTML静态访问
一、整体介绍:
1.架构图
本文涉及的几个知识点:
①:
Nginx ②:
FastCGI③:
Keepalived④:
tomcat⑤:
LAMP⑥:
Squid⑦:
memcache//后两个目前不涉及
2.为什么要用nginx
Nginx("enginex")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,它已经在该站点运行超过四年多了。
Igor将源代码以类BSD许可证的形式发布。
自Nginx发布四年来,Nginx已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。
目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。
新近发现Nginx技术在国内日趋火热,越来越多的网站开始部署Nginx。
3.Nginx发布
当前开发版:
Nginx1.1.5|Nginx/windows1.1.5(更新记录)(2011年10月6日)
当前稳定版:
Nginx1.0.8|Nginx/windows1.0.8(更新记录)(2011年10月1日)
历史稳定版:
Nginx0.8.54|Nginx/windows0.8.55(更新记录)(2011年7月19日)
历史稳定版:
Nginx0.7.69|Nginx/windows0.7.69(更新记录)(2011年7月19日)
4.笔者谈Nginx
Nginx有低内存占用,高性能高并发访问,使得很多新平台的搭建、旧应用的迁移开始应用nginx,话说nginx不得不说张宴,就像谈LVS不得不说章文嵩一样;
张宴简历:
张宴,就职于北京金山软件公司,金山游戏官方网站──逍遥网系统架构师,技术支持部平台组组长。
曾在新浪网、赶集网等公司任系统工程师、系统架构师,工作内容主要涉及:
服务器系统架构设计与部署、系统运维与调优、网络故障解决、网站后端以及接口类PHP程序开发、Unix开源软件二次开发、服务器监控系统开发、系统运维与平台研发团队管理。
5.学习Nginx用书
一本《实战Nginx:
取代Apache的高性能Web服务器》通俗易懂,不过有些读者看到后,即说起此书无非就是配置文件的讲解,我到反驳,道:
nginx之所以这么强盛的应用,简单的配置文件和灵活的模块也是一大亮点,如果你能将部分模块应用好,那么你的web服务,将会在访问速度、服务器性能、硬件成本胜过了竞争对手;
二、Nginx软件应用部署
1.安装环境
采用五台Centos5.4 kernel:
2.6.18-164.el5xenServer、一台XPsp3Client
IP地址分配:
提供域名
解析地址 VIP:
172.17.80.10
front1 内网IP192.168.1.11
front2 内网IP192.168.1.12
WebServer集群:
tomcat192.168.1.17、20 nginx192.168.1.18 apache192.168.1.19
前端:
Nginx只做高可用和代理
后端:
web集群有nginxPHP请求;tomcat动态jsp.do文件;apache静态html等
析:
nginx静态访问比较好,apache+php作动态,此处只为说明LNMP架构的构建!
软件版本:
nginx:
nginx-1.1.6.tar.gz //下载:
www.nginx.org
tomcat:
apache-tomcat-7.0.21.tar.gz
JDK:
jdk-1_5_0_16-linux-i586.bin
PHP:
php-5.3.8.tar.gz //提供FastCGI
apache:
httpd-2.2.3-31.el5 //yuminstallhttpdphp
2.安装部署系统环境:
Centos5.4制作本地yum源
#mkdir/mnt/cdrom{1,2}
#mount/dev/cdrom/mnt/cdrom1
#cp-r/mnt/cdrom1/*/mnt/cdrom2
#cd/mnt/cdrom2
#rpm-ivhcreaterepo-0.4.11-3.el5.noarch.rpm
#createrepo -g/mnt/cdrom/repodata/repomd.xml/mnt/cdrom/CentOS/
#vi/etc/yum.repos.d/server.repo
[CentOS]
name=CentOS
baseurl=file:
///mnt/cdrom/CentOS
gpgcheck=0
enable=1
#yum-yinstallgccopenssl-develzlib-develpcre-devel
#yum-yinstallgccgcc-c++autoconfautomake //安装编译gcc环境
3.nginx的安装
#tarzxvf nginx-1.1.6.tar.gz
#cd nginx-1.1.6
#useradd-s/sbin/nologin-Mnginx //添加nginx用户,没有登录shell,没有家目录
#./configure\
--prefix=/usr/local/nginx\ //安装路径
--sbin-path=/usr/sbin/nginx\ //可执行文件路径
--conf-path=/etc/nginx/nginx.conf\ //默认为/conf/nginx.conf最好定义到/etc下
--pid-path=/var/run/nginx/nginx.pid \ //pid文件存放位置,后面将会用到
--error-log-path=/var/log/nginx/error.log\ //错误日志文件,默认为/logs/error.log
--http-log-path=/var/log/nginx/access.log\ //访问日志,默认为/logs/access.log
--lock-path=/var/lock/nginx.lock\
--user=nginx\
--group=nginx\
--with-http_stub_status_module\ //以取得一些nginx的运行状态
--with-http_ssl_module\ //支持https加密连接
--with-http_gzip_static_module\ //静态缓存模块
--with-http_realip_module \ //让Nginx透明获取客户端IP
--http-client-body-temp-path=/var/tmp/nginx/client/\ //指定http客户端请求缓存文件存放目录
--http-proxy-temp-path=/var/tmp/nginx/proxy/\ //指定http反向代理缓存文件存放目录
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ //指定FastCGI缓存文件存放目录
#make&&makeinstall //安装nginx
4.编写SystemV风格的启动脚本
#vim/etc/init.d/nginxd
############################################
#!
/bin/bash
#BYhanfeng
#datetime20111031
./etc/rc.d/init.d/functions
#Sourcenetworkingconfiguration.
./etc/sysconfig/network
#Checkthatnetworkingisup.
["$NETWORKING"="no"]&&exit0
nginx="/usr/sbin/nginx"
prog=$(basename$nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[-f/etc/sysconfig/nginx]&&./etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs(){
#makerequireddirectories
user=`nginx-V2>&1|grep"configurearguments:
"|sed's/[^*]*--user=\([^]*\).*/\1/g'-`
options=`$nginx-V2>&1|grep'configurearguments:
'`
foroptin$options;do
if[`echo$opt|grep'.*-temp-path'`];then
value=`echo$opt|cut-d"="-f2`
if[!
-d"$value"];then
#echo"creating"$value
mkdir-p$value&&chown-R$user$value
fi
fi
done
}
start(){
[-x$nginx]||exit5
[-f$NGINX_CONF_FILE]||exit6
make_dirs
echo-n$"Starting$prog:
"
daemon$nginx-c$NGINX_CONF_FILE
retval=$?
echo
[$retval-eq0]&&touch$lockfile
return$retval
}
stop(){
echo-n$"Stopping$prog:
"
killproc$prog-QUIT
retval=$?
echo
[$retval-eq0]&&rm-f$lockfile
return$retval
}
restart(){
configtest||return$?
stop
sleep1
start
}
reload(){
configtest||return$?
echo-n$"Reloading$prog:
"
killproc$nginx-HUP
RETVAL=$?
echo
}
force_reload(){
restart
}
configtest(){
$nginx-t-c$NGINX_CONF_FILE
}
rh_status(){
status$prog
}
rh_status_q(){
rh_status>/dev/null2>&1
}
case"$1"in
start)
rh_status_q&&exit0
$1
;;
stop)
rh_status_q||exit0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q||exit7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q||exit0
;;
*)
echo$"Usage:
$0{start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit2
esac
############################################
保存nginxd脚本,赋予执行权限,添加服务和开机启动
#chmod+x/etc/init.d/nginxd
#chkconfig--addnginxd
//如果不支持,则添加一下2行即可
//#chkconfig:
-8515 #为必须字符
//#description:
nginxisaWorldWideWebserver.Itisusedtoserve
#chkconfig--level2345nginxdon
#servicenginxdstart //先启动nginx看看,没问题的话就OK了
Startingnginx:
[ OK ]
5.在Client上访问front1上的nginx
http:
//172.17.80.11
6.将front1上的nginxscp到front2上,并同样部署并在安装后将nginx.conf文件对拷
#scpnginx-1.1.6.tar.gzroot@192.168.1.11:
/root
#scp/etc/nginx/nginx.confroot@192.168.1.11:
/etc/nginx/nginx.conf
三、nginx的动静分离和负载均衡
1.在front1、front2配置
A:
动静分离说明:
有前置nginx做反向代理,采用nginx的location做动静分离,将静态HTML网页、图片、JS、CSS等使用后端nginx或apache处理,以便得到更快的速度;将.jsp、.jspx、.do等交给后端tomcat来处理,
从而实现动静分离的应用;
B:
负载均衡的说明:
此处采用nginx的proxy_pass将location做动静分离后的jsp、do等jsp程序文件分发到后端upstreamd模块中tomcat集群上,rewrite做正则分发,此时也将应用到nginx经典之处的IP哈希(ip_hash)模块,这样每个访客固定访问一个后端web服务器,可以解决session的问题;
2.分别在front1和front2上配置nginx动静分离和负载均衡
#vi/etc/nginx/nginx.conf
############################################
user nginxnginx;
worker_processes 4;
events{
worker_connections 1024;
}
http{
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
upstreamtomcat_server{
# ip_hash;
server192.168.1.17weight=2;
server192.168.1.20max_fails=2fail_timeout=30s;
}
upstreamapache_server{
ip_hash;
server192.168.1.19;
}
upstreamnginx_server{
ip_hash;
server192.168.1.18;
}
server
{
listen 80;
server_name ;
location/{
index index.htmlindex.phpindex.htmindex.jspindex.dodefault.do;
root html;
if(-d$request_filename)
###############################################
{
rewrite^/(.*)([^/])$http:
//$host/$1$2/permanent;
}
location~\.(jsp|jspx|do)?
${
proxy_set_headerHost%host;
proxy_set_headerX-Forwarded-For$remote_addr;
proxy_passhttp:
//tomcat_server;
}
###############################################
location~\.(php|php5)?
${
proxy_set_headerHost%host;
proxy_set_headerX-Forwarded-For$remote_addr;
proxy_pass http:
//nginx_server;
}
#############################################
location~\.(html|htm)?
${
proxy_set_headerHost%host;
proxy_set_headerX-Forwarded-For$remote_addr;
proxy_passhttp:
//apache_server;
}
#############################################
location~.*\.(gif|jpg|jpeg|png|bmp|swf)${
expires 30d;
}
location~.*\.(js|css)?
${
expires 1h;
}
#############################################
}
error_page 404 /404.html;
error_page 500502503504 /50x.html;
location=/50x.html{
root html;
}
}
}
############################################
3.重启nginx服务
#servicenginxdrestart
Shuttingdowninterfaceeth0:
[ OK ]
Shuttingdowninterfaceeth1:
[ OK ]
Shuttingdownloopbackinterface:
[ OK ]
Bringinguploopbackinterface:
[ OK ]
Bringingupinterfaceeth0:
[ OK ]
Bringingupinterfaceeth1:
[ OK ]
四、接下来配置高可用组建keepalived
1.为什么使用keepalived
软件官网:
http:
//www.keepalived.org
软件获得:
#wgethttp:
//www.keepalived.org/software/keepalived-1.2.2.