背景:


单一服务器部署应用在往往随着应用人数的增加和频率的提高及后续数据量的增大会达到瓶颈,服务器会出现卡顿、崩溃等情况;所以在不改变应用结构的情况下只能进行部署架构上的变化,即使用apache(Apache
HTTP Server(“httpd”))作为前置,进行负载均衡、动静分离;后端使用tomcat(Apache
Tomcat)集群进行服务横向扩展(水平扩展)来提高服务效率。

负载均衡:将后端tomcat集群使用apache反向代理且设置权重以达到向tomcat集群进行请求分发;

动静分离
:apache处理静态资源的能力比tomcat强;所以可以将静态资源(html,js等)放在apache;动态资源(jsp)放在tomcat上;达到动静分离提高处理能力;

环境:

tomcat7,apache2,centos6

步骤:

1.安装jdk

a.使用yum安装jdk

使用网络源进行安装:
yum install java-1.8.0-openjdk* -y
b.自定义安装

下载.gz(如jdk-7u79-linux-x64.gz)上传到指定路径(如/usr/local)

使用tar zxvf 命令解压:

配置java_home,使用vi命令修改/etc/profile;添加下面信息:
JAVA_HOME=/usr/local/java/jdk1.7.0_79 JRE_HOME=/usr/local/java/jdk1.7.0_79/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib export
JAVA_HOMEJRE_HOMEPATHCLASSPATH
再使用source /etc/profile使得修改有效
source /etc/profile
再查看jdk是否安装有效
java -version
2.tomcat安装及设置

a.上传解压tomcat

上传tomcat(如apache-tomcat-7.0.57.zip)到指定路径下(如/usr/local/);

使用unzip命令进行解压;
unzip apache-tomcat-7.0.57.zip
若出现-bash: unzip: command not found则先安装unzip:
yum install unzip
b.配置/conf/server.xml

修改/conf/server.xml来提高并发数使服务器能够支持高并发和进行端口设置(三个端口最好同时设置):
<Server port="8005" shutdown="SHUTDOWN"> <Connector
executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443" URLEncoding="utf-8"
maxThreads="2000" maxSpareThreads="2000" minSpareThreads="200"
minProcessors="200" acceptCount="2000" maxProcessors="2000" maxPostSize="0"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
 executor:表示使用该参数值对应的线程池;

minProcessors:服务器启动时创建的处理请求的线程数;

maxProcessors:最大可以创建的处理请求的线程数;

acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。

maxThreads:该线程池可以容纳的最大线程数。默认值:200;

minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。

maxIdleTime
:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。

maxPostSize:设置post请求参数长度,为0表示不设限制;若不起效果,部分版本设置为-1;

c.配置/bin/catalina.sh

配置tomcat容器的内存使用情况以达到服务器高利用率:
JAVA_OPTS="-server -Xms512m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m"
-server:一定要作为第一个参数,在多个CPU时性能佳

-Xms:初始Heap大小,使用的最小内存,cpu性能高时此值应设的大一些

-Xmx:java heap最大值,使用的最大内存

上面两个值是分配JVM的最小和最大内存,取决于硬件物理内存的大小,建议均设为物理内存的一半。

-XX:PermSize:设定内存的永久保存区域

-XX:MaxPermSize:设定最大内存的永久保存区域

-XX:MaxNewSize:

-Xss 15120 这使得每增加一个线程(thread)就会立即消耗15M内存,而最佳值应该是128K,默认值好像是512k.

+XX:AggressiveHeap 会使得 Xms没有意义。这个参数让jvm忽略Xmx参数,疯狂地吃完一个G物理内存,再吃尽一个G的swap。

-Xss:每个线程的Stack大小

-verbose:gc 现实垃圾收集信息

-Xloggc:gc.log 指定垃圾收集日志文件

-Xmn:young generation的heap大小,一般设置为Xmx的3、4分之一

-XX:+UseParNewGC :缩短minor收集的时间

-XX:+UseConcMarkSweepGC :缩短major收集的时间

提示:此选项在Heap Size 比较大而且Major收集时间较长的情况下使用更合适。

d.其他配置


tomcat集群时应该是一个tomcat对应一个服务器,若一个服务器有多个tomcat,性能其实没有什么提高。好处可能就是稳定点,一个崩溃另外一个还可继续执行;

一台服务器多个tomcat除了需要进行端口设置;还需要配置catalina_home;

第一步:修改/etc/profile配置catalina_home;
export CATALINA_BASE=/usr/local/xxx export CATALINA_HOME=/usr/local/xxx export
TOMCAT_BASE=/usr/local/xxx export CATALINA_BASE_1=/usr/local/xxx export
CATALINA_HOME_1=/usr/local/xxx export TOMCAT_BASE_1=/usr/local/xxx
再使之有效
source /etc/profile
第二步:修改/bin/startup.sh和/bin/shutdown.sh来指定catalina_home;
export CATALINA_HOME=$CATALINA_HOME export CATALINA_BASE=$CATALINA_BASE
配置好上述即可,不然会出现,启动混乱的问题;

其他:

权限问题:使用chmod –R 777赋予tomcat读写权限
chmod -R 777 apache-tomcat-7.0.57
jndi数据源配置:在/config/context.xml配置:
<Resource name="jdbc/xx" auth="Container" type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://xxxx:3306/xxx"
username="xx" password="xx" maxActive="50" maxIdle="30" maxWait="10000" />
2.apache安装及设置

a.使用yum安装
yum install httpd
安装完成后,启动看是否安装完成:
service httpd start
centos7命令有所不同,但上述命令仍可使用;

b.配置负载均衡

上传反向代理配置到/etc/httpd/conf.d下如(xxx.conf)
# # This configuration file enables the default "Welcome" # page if there is
no default index page present for # the root URL. To disable the Welcome page,
comment # out all the lines below. # <VirtualHost *:80> ProxyRequests Off
ProxyPreserveHost On #/appPlatform 前端资源全部不跳转 ProxyPass /appPlatform !
#/customerPlatform 用户模块平均分发跳转后端80端口 ProxyPass /customerPlatform
balancer://customerPlatform/ ProxyPassReverse /customerPlatform
balancer://customerPlatform/ <Proxy balancer://customerPlatform/>
BalancerMember http://AA.BB.CC.DD/customerPlatform loadfactor=1 BalancerMember
http://aa.bb.cc.dd/customerPlatform loadfactor=1 </Proxy> #/thirdPlatform
第三方接口模块平均分发跳转后端8080端口 ProxyPass /thirdPlatform balancer://thirdPlatform/
ProxyPassReverse /thirdPlatform balancer://thirdPlatform/ <Proxy
balancer://thirdPlatform/> BalancerMember http://AA.BB.CC.DD:8080/thirdPlatform
loadfactor=1 BalancerMember http://aa.bb.cc.dd:8080/thirdPlatform loadfactor=1
</Proxy> #/managementPlatform 后台管理模块分发跳转后端AA.BB.CC.DD:8888端口 ProxyPass
/managementPlatform balancer://managementPlatform/ ProxyPassReverse
/managementPlatform balancer://managementPlatform/ <Proxy
balancer://managementPlatform/> BalancerMember
http://AA.BB.CC.DD:8888/managementPlatform loadfactor=1 </Proxy>
#/quartzPlatform 批跑模块分发跳转后端aa.bb.cc.dd:8888端口 ProxyPass /quartzPlatform
balancer://quartzPlatform/ ProxyPassReverse /quartzPlatform
balancer://quartzPlatform/ <Proxy balancer://quartzPlatform/> BalancerMember
http://aa.bb.cc.dd:8888/quartzPlatform loadfactor=1 </Proxy> </VirtualHost>
其中:

ProxyPass:

语法:ProxyPass [path] !|url

1)ProxyPass /appPlatform ! 

表示appPlatform为前缀的不转发,请求本地根路径下对应资源(默认根路径为/var/www/html/);

2)ProxyPass /customerPlatform  http://xx.xx.xx.xx/

表示customerPlatform 为前缀的转发到http://xx.xx.xx.xx/

2)ProxyPass /customerPlatform  balancer://customerPlatform/

表示customerPlatform 为前缀的转发到balancer://customerPlatform/负载均衡集群

ProxyPassReverse:

语法:ProxyPassReverse [路径] url

它一般和ProxyPass指令配合使用,此指令使Apache调整HTTP重定向应答中Location, Content-Location,
URI头里的URL,这样可以避免在Apache作为反向代理使用时。

<Proxy balancer://xx/>:

语法:BalancerMember xxxx loadfactor=?

通过<Proxy balancer://customerPlatform />设置负载均衡名称

通过BalancerMember xxxx loadfactor=?设置后端集群tomcat服务器的路径及权重

c.实现动静分离

apache默认的路径为/var/www/html;将静态资源上传到该路径下;再如上述设置不跳转即可:
#/appPlatform 前端资源全部不跳转 ProxyPass /appPlatform !

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信