传统分布式架构部署(apache+tomcat集群)

背景:

单一服务器部署应用在往往随着应用人数的增加和频率的提高及后续数据量的增大会达到瓶颈,服务器会出现卡顿、崩溃等情况;所以在不改变应用结构的情况下只能进行部署架构上的变化,即使用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来提高并发数使服务器能够支持高并发和进行端口设置(三个端口最好同时设置):

 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配置:

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.
#



ProxyRequests Off
ProxyPreserveHost On
#/appPlatform  前端资源全部不跳转
ProxyPass /appPlatform !

#/customerPlatform 用户模块平均分发跳转后端80端口
ProxyPass /customerPlatform  balancer://customerPlatform/
ProxyPassReverse /customerPlatform  balancer://customerPlatform/

BalancerMember http://AA.BB.CC.DD/customerPlatform loadfactor=1
BalancerMember http://aa.bb.cc.dd/customerPlatform loadfactor=1


#/thirdPlatform 第三方接口模块平均分发跳转后端8080端口
ProxyPass /thirdPlatform  balancer://thirdPlatform/
ProxyPassReverse /thirdPlatform  balancer://thirdPlatform/

BalancerMember http://AA.BB.CC.DD:8080/thirdPlatform loadfactor=1
BalancerMember http://aa.bb.cc.dd:8080/thirdPlatform loadfactor=1


#/managementPlatform 后台管理模块分发跳转后端AA.BB.CC.DD:8888端口
ProxyPass /managementPlatform  balancer://managementPlatform/
ProxyPassReverse /managementPlatform  balancer://managementPlatform/

BalancerMember http://AA.BB.CC.DD:8888/managementPlatform loadfactor=1



#/quartzPlatform 批跑模块分发跳转后端aa.bb.cc.dd:8888端口
ProxyPass /quartzPlatform  balancer://quartzPlatform/
ProxyPassReverse /quartzPlatform  balancer://quartzPlatform/

BalancerMember http://aa.bb.cc.dd:8888/quartzPlatform loadfactor=1

其中:

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作为反向代理使用时。

语法:BalancerMember xxxx loadfactor=?

通过设置负载均衡名称

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

c.实现动静分离

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

#/appPlatform  前端资源全部不跳转
ProxyPass /appPlatform !

你可能感兴趣的:(项目部署,学习杂记,项目框架,服务搭建及应用)