因为之前有过系统方面的基础,所以半路出家,从一个测试get到了运维技能,在这里写一点有关tengine反向代理tomcat的总结,希望能帮到读者。
tengine是淘宝网发起的一个开源web服务器项目,在原来nginx的基础上,添加了一些新的高级功能和特性,针对大访问网站的需求,读者可以尝试使用,目前我使用的就是tengine。
以下面的拓扑为例,我们来说说基本的配置,叙述的会非常细,tengine本文都以nginx代替方便描述
拓扑图中一台nginx服务器代理三台tomcat服务器,这是最简单也是最基本的一个代理
一.tomcat安装配置(三台)
1.jdk安装:
rpm -qa|grep java ---使用如上命令查看旧版java信息
yum -y remove java ---卸载java,项目在jdk7基础上开发可卸载安装7
#安装jdk
上传准备好的jdk包jdk-7u71-linux-x64.rpm
执行以下命令安装,安装路径为/usr/java/jdk1.7.0_71:
rpm -ivh jdk-7u71-linux-x64.rpm
配置jdk环境变量
vim /etc/profile
JAVA_HOME=/usr/java/jdk1.7.0_71
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASS_PATH PATH
jdk安装完成,使用echo $JAVA_HOME查看JDK安装路径、查看版本java -version
2.这里我们在tomcat服务器上创建如下目录,主要为了方便服务器的管理和备份,下面会一一介绍:
mkdir -p /server/war/
mkdir -p /server/war/log
mkdir -p /server/war/backup
mkdir -p /server/war/webapps
chmod 775 /server/war
chmod 775 /server/war/log/
chmod 775 /server/war/backup/
chmod 775 /server/war/webapps/
3.tomcat安装:
上传tomcat安装包如apache-tomcat-7.0.59.tar.gz至/server目录下
执行命令: tar zxvf apache-tomcat-7.0.59.tar.gz
mv apache-tomcat-7.0.59 /server/xxx_tomcat #可根据项目名命名,方便日后管理
设置tomcat环境变量:
vim /etc/profile,
写入以下内容:
export TOMCAT_HOME=/server/xxx_tomcat
tomcat官网地址:点击打开链接
下载tomcat,这里我使用的是tomcat7,读者也可根据实际需要下载最新稳定版
4.在/server/war目录下编写autotomcat.sh、 backup.sh 、echolog.sh、starttomcat.sh、stoptomcat.sh脚本
vim autotomcat.sh
#set java JDK
JAVA_HOME=/usr/java/jdk1.7.0_71
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
/server/xxx_tomcat/bin/shutdown.sh
#PROCESS_STR=`ps aux|grep tomcat|grep -v grep`
#PROCESS_ARRAY=(${PROCESS_STR// / })
#PROCESS_ID=${PROCESS_ARRAY[1]}
#PROCESS_CHECK=${#PROCESS_ID}
#kill -9 $PROCESS_ID
rm -rf /server/war/webapps/*
rm -f /server/war/webapps/*
rm -rf /server/xxx_tomcat/work/Catalina/localhost/*
cp *.war /server/war/webapps/
/server/xxx_tomcat/bin/startup.sh
此脚本用于自动启动tomcat
vim backup.sh
cp *.war ./backup/
此脚本用于备份war包
vim echolog.sh
tail -f ./log/catalina.out
此脚本用于跟踪日志
vim starttomcat.sh
cp *.war /server/war/webapps/
/server/xxx_tomcat/bin/startup.sh | tail -f ./log/catalina.out
此脚本用于启动tomcat并跟踪日志
vim stoptomcat.sh
OCESS_STR=`ps aux|grep tomcat|grep -v grep`
#PROCESS_ARRAY=(${PROCESS_STR// / })
#PROCESS_ID=${PROCESS_ARRAY[1]}
#PROCESS_CHECK=${#PROCESS_ID}
#kill -9 $PROCESS_ID
rm -rf /server/war/webapps/*
rm -f /server/war/webapps/*
rm -rf /server/xxx_tomcat/work/Catalina/localhost
此脚本用于停止tomcat并清空webapps目录下文件
分别赋予上述脚本可执行权限
chmod +x 脚本名
5.安装 Tomcat-native(提升tomcat性能的本地API),这里就不再多赘述,直接上步骤,读者按着来即可
#apr-1.5.1.tar.gz安装
tar zxvf apr-1.5.1.tar.gz
cd apr-1.5.1
./configure --prefix=/usr/local/apr
make
make install
#apr-iconv-1.2.1.tar.gz安装
cd ..
tar zxvf apr-iconv-1.2.1.tar.gz
cd apr-iconv-1.2.1
./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
make
make install
#apr-util-1.5.4.tar.gz安装
cd ..
tar zxvf apr-util-1.5.4.tar.gz
cd apr-util-1.5.4
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
make
make install
#tomcat-native.tar.gz安装
cd ..
tar zxvf tomcat-native.tar.gz
cd tomcat-native-1.1.32-src/jni/native
./configure --with-apr=/usr/local/apr --with-java-home=/usr/java/jdk1.7.0_71
make
make install
#配置tomcat-native环境
vim /etc/profile
#set tomcat-native
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
6.tomcat配置修改:
vim /server/xxx_tomcat/conf/server.xml
7.删除tomcat目录下webapps下的manager、host-manager文件夹全部删除,安全要求:
rm -rf /server/xxx_tomcat/webapps/host-manager/
rm -rf /server/xxx_tomcat/webapps/manager/
rm -rf /server/xxx_tomcat/webapps/docs/
rm -rf /server/xxx_tomcat/webapps/examples/
rm -rf /server/xxx_tomcat/webapps/ROOT/
8.调整tomcat日志存放位置:
vim /server/xxx_tomcat/bin/catalina.sh
# CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out #注销原文(185,1 34%)
CATALINA_OUT=/server/war/log/catalina.out #新增地址存放位置
修改其他 log 文件位置
vim /server/xxx_tomcat/conf/logging.properties
1catalina.org.apache.juli.FileHandler.level = FINE #(25,1 35%)
#1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs #注销原文
1catalina.org.apache.juli.FileHandler.directory = /server/war/log #新增地址存放位置
1catalina.org.apache.juli.FileHandler.prefix = catalina.
2localhost.org.apache.juli.FileHandler.level = FINE
#2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs #注销原文
2localhost.org.apache.juli.FileHandler.directory = /server/war/log #新增地址存放位置
2localhost.org.apache.juli.FileHandler.prefix = localhost.
3manager.org.apache.juli.FileHandler.level = FINE
#3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs #注销原文
3manager.org.apache.juli.FileHandler.directory = /server/war/log #新增地址存放位置
3manager.org.apache.juli.FileHandler.prefix = manager.
4host-manager.org.apache.juli.FileHandler.level = FINE
#4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs #注销原文
4host-manager.org.apache.juli.FileHandler.directory = /server/war/log #新增地址存放位置
4host-manager.org.apache.juli.FileHandler.prefix = host-manager.
配置日志大小,结尾处增加 每天转储一次 重新创建 转储15次,也就是15天:
vim /etc/logrotate.conf
/server/war/log/catalina.out {
daily
copytruncate
dateext
nocompress
missingok
rotate 15
}
9.tomcat优化:
JVM优化:
vim /server/xxx_tomcat/bin/catalina.sh
JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m"#(60;10%)
tomcat配置修改:
vim /server/xxx_tomcat/conf/server.xml
maxThreads="1000"
minSpareThreads="100"
maxSpareThreads="1000"
minProcessors="100"
maxProcessors="1000"
enableLookups="false"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
acceptCount="1000"
connectionTimeout="3000"
URIEncoding="utf-8"
redirectPort="8443"
disableUploadTimeout="true" />
上述配置仅供参考,读者需根据实际业务需要进行相应配置
付:
maxHttpHeaderSize //来自于客户端请求的Request和Response的HTTP header的最大长度,以字节计算。如果不设置,该属性为4096(4K)
maxThreads //客户请求最大线程数
minSpareThreads //Tomcat初始化时创建的 socket 线程数
maxSpareThreads //Tomcat连接器的最大空闲 socket 线程数
minProcessors //最小空闲连接线程数,用于提高系统处理性能,默认值为 10
acceptCount //允许的最大连接数,应大于等于 maxProcessors ,默认值为 100
enableLookups //若设为true, 则支持域名解析,可把 ip 地址解析为主机名
compression //打开压缩功能
compressionMinSize //启用压缩的输出内容大小,这里面默认为2KB
compressableMimeType //压缩类型
connectionTimeout //网络连接超时,单位:毫秒。设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒。
URIEncoding //URL统一编码
redirectPort //这里系统默认的,它指定转发端口,如果当前只支持non-SSL请求,在需要安全通信的场所,将把客户请求转发至SSL的redirectPort端口。
disableUploadTimeout //该标志位表明当执行servlet时,是否允许servlet容器使用一个不同的、更长的连接超时。启用该标志位将导致在上传数据时,
要么使用更长的时间完成上传,要么出现更长的超时。如果不指定,该属性为“false”。
10.指定web应用程序的配置目录:
vim /server/xxx_tomcat/conf/server.xml
至此三台tomcat就安装完成了,可以上传个war包进行测试下,例如demo.war(原始url访问路径为:http://tomcatIP:8080/demo/login),上传该包至/server/war/目录下,
然后启动./starttomcat,部署完成后即可使用每台tomcat的IP用如上url访问方式访问应用。
从这里看使用看,这种访问方式是不是不太方便,下面就介绍本文拓扑中的nginx反向代理tomcat并用域名的方式访问应用
二.nginx安装:
1.nginx组件安装:
#GCC编译器:
yum install -y gcc
#G++编译器:
yum install -y gcc-c++
#PCRE库:
yum install -y pcre pcre-devel
#zlib库:
yum install -y zlib zlib-devel
#OpenSSL开发库:
yum install -y openssl openssl-devel
2.安装nginx:
从tengine官网下载tengine稳定版本(如tengine-2.1.2.tar.gz),官网地址:点击打开链接
读者可根据项目选择对应版本,这里我使用的是2.1.2版本
解压tengine-2.1.2.tar.gz 安装路径为/server/tengine-2.1.2
tar zxvf tengine-2.1.2.tar.gz
cd tengine-2.1.2./configure --prefix=/server/xxx_tengine #指定nginx安装根目录,xxx_tengine命名和tomcat命名相同,
可有可无makemake installnginx安装完成
付:
修改nginx内核支持高并发请求的TCP网络参数:
vim /etc/sysctl.conf
写入如下内容:
fs.file-max=999999 #file-max表示进程(比如一个worker进程),这个参数直接限制最大并发连接数,需根据实际修改
net.ipv4.tcp_tw_reuse=1 #tcp_tw_reuse参数为1表示将TIME_WAIT状态的socket重新用于新的TCP连接
net.ipv4.tcp_keeplive_time=600 #tcp_keepalive_time表示当keepalive启用时,TCP发送消息的频度,默认两小时,设置小可快速清理无效连接
net.ipv4.tcp_fin_timeout=30 #tcp_fin_timeout表示服务器主动关闭时,socket保持在FIN-WAIT-2状态的最大时间
net.ipv4.tcp_max_tw_buckets= 5000 #tcp_max_tw_buckets表示操作系统允许TIME_WAIT套接字数量的最大值,过多的套接字会是Web服务器变慢
net.ipv4.ip_local_port_range=1024 61000 #ip_local_port_range定义了UDP和TCP连接中本地端口的取值范围
net.ipv4.tcp_rmem=4096 32768 262142 #net.ipv4.tcp_rmem定义TCP接收缓存的最小值、默认值、最大值
net.ipv4.tcp_wmem=4096 32768 262142 #net.ipv4.tcp_rmem定义TCP发送缓存的最小值、默认值、最大值
net.core.netdev_max_backlog=8096
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=2097152
net.core.wmem_max=2097152
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_max_syn.backlog=1024 #tcp_max_syn.backlog表示TCP三次握手建立阶段接收SYN请求队列的最大长度,默认1024,设置大一点可在nginx繁忙来不 及accept新连接时,linux不丢失客户端发起的连接请求
该配置仅供参考,读者可根据实际需求修改
3.反向代理nginx.conf的配置:
upstream tomcat_server {
server tomcat1:8080 weight=1;
server tomcat2:8080 backup;
server tomcat3:8080 weight=2;
}
server {
listen 80;
server_name xxx.com;
location /{ #注意/和{之间没有空格
proxy_pass http://tomcat_server/demo/login;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
}
location /demo { #注意/demo和{之间有空格
proxy_pass http://tomcat_server/demo;
proxy_set_header Host $host;
proxy_set_header X-real-ip $remote_addr;
proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for;
}
}
此配置是最基本的反向代理配置,写在http{}标签内,配置完成后可使用如下命令检查语法准确性:
/server/xxx_tengine/sbin/nginx -t
修改nginx.conf配置后需重载配置,可使用此命令:
/server/xxx_tengine/sbin/nginx -s reload
启动nginx后即可食用域名xxx.com访问部署的应用
下面介绍几种常用nginx算法:
weight #权重,根据设置的权重值大小,转发请求给后端服务器(backend),可用于服务器硬件配置不均的情况,低配置处理少量请求,高配置处理多请求
ip_hash #hash算法,根据IP的hash值达到一致性请求,可用于解决session共享问题,使用ip_hash算法时不可使用weight等其它算法
backup #类似于冗余备份,当tomcat1宕机时,tomcat2接手工作
废话了这么多,至此centos6.5有关tengine反向代理tomcat服务器的介绍到此结束,本文拓扑实例可用于读者学习或者内部的测试环境,生产环境需要对nginx做高可用,LVS+keepalived+nginx的配置在这里就不多,后续有时间会和大家一起分享