一.目的

  利用apache的mod_jk模块,实现tomcat集群服务器的负载均衡以及会话复制,这里用到了<Cluster>.

二.环境

  1.基础:3台主机,系统Centos6.5,4G内存,50G硬盘. yum源已更换为阿里源(如何更换可参考博客的另外一篇文章CDN

  2.软件:development tools,jdk-7u9-linux-x64.rpm;源码编译软件apr-util-1.5.4.tar.gz,apr-1.5.2.tar.gz,tomcat-connectors-1.2.40-src.tar.gz,httpd-2.4.16.tar.gz

  3.源码包下载地址:可以去官网下载,或者在此网盘内下载:点击链接

  4.拓扑图

    5.现在就可以安装部署了。

三.部署安装

Apache环节:

  1.编译安装apr

 [root@apache down]# tar xf apr-1.5..tar.gz
[root@apache down]# cd apr-1.5.
[root@apache apr-1.5.]# ./configure --prefix=/usr/local/apr --disable-ipv6
[root@apache apr-1.5.]# make && make install

  2.编译安装apr-util

 [root@apache down]# tar xf apr-util-1.5..tar.gz
[root@apache down]# cd apr-util-1.5.
[root@apache apr-util-1.5.]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
[root@apache apr-util-1.5.]# make && make install

  3.编译安装httpd

 [root@apache ~]# yum -y install pcre-devel openssl-devel        (编译安装前,先安装这两个软件,解决编译httpd时的依赖问题)

  解压httpd,并编译安装。(如果在编译出错情况,请仔细排查错误,记得重新编译时,需要make clean 清除一下)

 [root@apache down]# tar xf httpd-2.4..tar.gz
[root@apache down]# cd httpd-2.4.
[root@apache httpd-2.4.]# ./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-mpms-shared=all --with-mpm=event --enable-proxy --enable-proxy-http --enable-proxy-ajp --enable-proxy-balancer --enable-lbmethod-heartbeat --enable-heartbeat --enable-slotmem-shm --enable-slotmem-plain --enable-watchdog
[root@apache httpd-2.4.]# make && make install

  为apache 提供httpd脚本,并加入系统服务,设为开机启动,方便以后的服务管理,文件路径 /etc/rc.d/init.d/httpd

[root@apache httpd-2.4.]# vim /etc/rc.d/init.d/httpd

#!/bin/bash
#
# httpd Startup script for the Apache HTTP Server
#
# chkconfig: -
# description: Apache is a World Wide Web server. It is used to serve \
# HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/httpd ]; then
. /etc/sysconfig/httpd
fi
# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}
# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""
# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.
# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=
start() {
echo -n $"Starting $prog: "
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = ] && touch ${lockfile}
return $RETVAL
}
stop() {
echo -n $"Stopping $prog: "
killproc -p ${pidfile} -d $httpd
RETVAL=$?
echo
[ $RETVAL = ] && rm -f ${lockfile} ${pidfile}
}
reload() {
echo -n $"Reloading $prog: "
if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
RETVAL=$?
echo $"not reloading due to configuration syntax error"
failure $"not reloading $httpd due to configuration syntax error"
else
killproc -p ${pidfile} $httpd -HUP
RETVAL=$?
fi
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p ${pidfile} $httpd
RETVAL=$?
;;
restart)
;;
condrestart)
if [ -f ${pidfile} ] ; then
stop
start
fi
;;
reload)
reload
;;
graceful|help|configtest|fullstatus)
$apachectl $@
RETVAL=$?
;;
*)
echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
exit
esac
exit $RETVAL

  脚本编辑完成后,添加为系统服务

 [root@apache httpd-2.4.]# chkconfig --add httpd
[root@apache httpd-2.4.]# chkconfig httpd on 

  现在,去修改一下httpd.conf文件,开启两个模块的支持,修改之前,我们先来备份一下httpd.conf

[root@apache ~]# cd /etc/httpd/          (因为在编译httpd时,将配置文件的目录即conf下的文件放在了/etc/httpd/下面,所以配置需要去这里。)
[root@apache httpd]# cp httpd.conf httpd.conf--.bak
[root@apache httpd]# ls
extra httpd.conf httpd.conf--.bak magic mime.types original
 [root@apache httpd]# vim httpd.conf
#找到以下两行,取消注释,如果找不到,手动添加进去亦可
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule slotmem_plain_module modules/mod_slotmem_plain.so

  配置完成后,现在检查下配置文件,并启动httpd

[root@apache httpd]# service httpd configtest
Syntax OK [root@apache httpd]# service httpd start

  访问网站,http://192.168.40.184,出现It Works!字样,即表示成功。下面是安装两台tomcat的记录。

Tomcat环节:

  1.tomcatA软件的安装。先来安装下jdk。

 [root@tomcat1 download]# rpm -ivh jdk-7u79-linux-x64.rpm

  添加环境变量的文件,新建java.sh文件,内容如下

[root@tomcat1 download]# vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/jdk1..0_79
export PATH=$PATH:$JAVA_HOME/bin

  测试一下

 [root@tomcat1 download]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) -Bit Server VM (build 24.79-b02, mixed mode)

  2.安装tomcat,解压到/usr/local下

 [root@tomcat1 download]# tar xf apache-tomcat-7.0..tar.gz -C /usr/local/ && cd /usr/local
[root@tomcat1 local]# ln -sv apache-tomcat-8.0. tomcat
[root@tomcat1 local]# ll
lrwxrwxrwx root root Oct : tomcat -> apache-tomcat-8.0./

  现在配置tomcat的环境变量/etc/profile.d/tomcat.sh

 [root@tomcat1 local]# vim /etc/profile.d/tomcat.sh

 export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin

  Ctrl + d 键注销一下,再次登陆,试一下命令

[root@tomcat1 local]# catalina.sh version
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1..0_79
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.0.
Server built: Aug :: UTC
Server number: 8.0.26.0
OS Name: Linux
OS Version: 2.6.-.el6.x86_64
Architecture: amd64
JVM Version: 1.7.0_79-b15
JVM Vendor: Oracle Corporation

  方便tomcat服务的管理,我们添加一个脚本,并加入系统服务

 [root@tomcat1 local]# vim /etc/init.d/tomcat 

 #!/bin/sh
# Tomcat init script for Linux.
#
# chkconfig:
# description: The Apache Tomcat servlet/JSP container.
CATALINA_HOME=/usr/local/tomcat #注意你的脚本路径
export CATALINA_HOME
# export CATALINA_OPTS="-Xms128m -Xmx256m"
exec $CATALINA_HOME/bin/catalina.sh $* [root@tomcat1 local]# chmod +x /etc/init.d/tomcat
[root@tomcat1 local]# chkconfig --add tomcat
[root@tomcat1 local]# chkconfig tomcat on
#之后启动一下,测试脚本是否正常 [root@tomcat1 local]# service tomcat start
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

  检查一下启动的端口号,正常应该会有以下几个监听的端口:8080,8005,然后可以打开浏览器,访问一下http://192.168.40.178.可以看到小猫咪。安装tomcat完成,现在就去修改配置文件,添加一个虚拟主机。

  3.虚拟主机配置,文件路径/usr/local/tomcat/conf/server.xml,修改之前先备份此文件。将默认的8080端口修改成80端口,在Engine中,将默认主机localhost修改成www.test.com,并在后面追加一句 jvmRoute = “TomcatA”,最后在文件倒数第三行前(即</Engine>上方)添加一个虚拟主机,如下标红字体。

[root@tomcat1 local]# vim /usr/local/tomcat/conf/server.xml
<Connector port="" protocol="HTTP/1.1"
connectionTimeout=""
redirectPort="" />
<Engine name="Catalina" defaultHost="www.test.com" jvmRoute="TomcatA"> <Host name="www.test.com" appBase="/web"
unpackWARs="true" autoDeploy="true">
<Context path="/" docBase="webapp" reloadable="true"/>
</Host>
</Engine>

  现在检查一下tomcat的配置文件,检查之前需要先停止tomcat,不然会报错。

[root@tomcat1 local]# service tomcat stop
[root@tomcat1 local]# service tomcat configtest
....
Oct , :: PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in ms

  创建虚拟主机文件文档目录并创建测试网页

[root@tomcat1 local]# mkdir -p /web/webapp/
[root@tomcat1 local]# cd /web/webapp/
[root@tomcat1 webapp]# vim index.jsp     
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color="red">TomcatA </h1>
<table align="centre" border="">
<tr>
<td>Session ID</td>
<% session.setAttribute("abc","abc"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html> [root@tomcat1 webapp]# service tomcat start

  启动服务后,可以打开网站,http://192.168.40.178,出现以下说明配置成功了。

  另外一台服务器TomcatB也要按照上述的操作部署。一模一样的去部署。仔细,每个环节都不能少了。(注意,唯一不同的是tomcatB服务器的server.xml中的jvmRoute填写的是TomcatB)

四.利用mod_jk实现负载均衡

  mod_jk 是一个工作在apache端基于AJP协议与Tomcat通信的连接器,是apache的一个模块,是AJP协议的客户端。(服务端是Tomcat的AJP连接器)

  1.下面安装tomcat-connectors

 [root@apache down]# tar xf tomcat-connectors-1.2.-src.tar.gz
[root@apache down]# cd tomcat-connectors-1.2.-src/native/
[root@apache native]# ./configure --with-apxs=/usr/local/apache/bin/apxs
[root@apache native]# make && make install

  2.模块安装完成后,我们可以查看一下。ls /usr/local/apache/modules/ | grep mod_jk .为了便于管理与mod_jk模块相关的配置,在此使用一个专门的配置文件/etc/httpd/extra/httpd-jk.conf来保存相关配置,内容如下(需要新建):

[root@apache native]# vim /etc/httpd/extra/httpd-jk.conf

#Load the mod_jk
LoadModule jk_module modules/mod_jk.so                  #加载mod_jk模块
JkWorkersFile /etc/httpd/extra/workers.properties            #配置文件位置
JkLogFile logs/mod_jk.log                          #日志
JkLogLevel debug                               #日志级别
JkMount /* lbcluster                             # 负载均衡器名称
JkMount /jkstatus/ stat1      #(最后单词是个数字1)       #状态信息

  然后去编辑/etc/httpd/extra/workers.properties文件,内容如下所示:

[root@apache native]# vim /etc/httpd/extra/workers.properties

worker.list=lbcluster,stat1                    #列表信息
worker.TomcatA.port=8009                      #TomcatA实例端口
worker.TomcatA.host=192.168.40.178                #TomcatA主机
worker.TomcatA.type=ajp13                     #支持协议 
worker.TomcatA.lbfactor=1 #负载均衡权重为1 worker.TomcatB.host=192.168.40.180
worker.TomcatB.port=
worker.TomcatB.type=ajp13
worker.TomcatB.lbfactor= worker.lbcluster.type = lb                      #负载均衡work,lb内置类
worker.lbcluster.sticky_session = 0                  #会话是否绑定
worker.lbcluster.balance_workers = TomcatA,TomcatB          #集群中实例
worker.stat1.type = status                        #状态信息

  现在去修改apache的配置文件,引用上一步我们写入的mod_jk的配置文件,并注释一条信息,如下所示。

[root@apache native]# vim /etc/httpd/httpd.conf
#DocumentRoot "/usr/local/apache/htdocs"
#在文件的末尾添加下面这行内容
Include /etc/httpd/extra/httpd-jk.conf

  下面重启一下httpd服务器,并先停止后端的TomcatA和TomcatB服务器,在启动服务(没有重启功能)。然后打开浏览器,进入测试,访问http://192.168.40.184,这里是apache的网址。刷新网页,则会来回跳转到TomcatA 和TomcatB后端服务器上。如下所示:

  通过mod_jk提供的接口,可以查看群集的状态信息。浏览器访问http://192.168.40.184/jkstatus,如下图所示

五.DeltaManager实现session保持

Tomcat 配置

  1.修改TomcatA的server.xml配置文件,放在倒数第三行</Engine>上,此处放置的位置定义在Engine容器中,则是对所有主机均启用集群功能,如果定义在某Host主机中,则表示近对此主机启用集群功能。

  注意事项:有的文章里配置文件里有这句话:<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/> ,此选项在tomcat8中被移除了。所以如果你的版本是tomcat8的话,需要注意一下

[root@tomcat1 conf]# vim server.xml

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4" port="" frequency="" dropTime=""/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.40.178" port="" autoBind="" selectorTimeout="" maxThreads=""/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter="/"/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

  2.修改TomcatB的server.xml文件,同样在倒数第三行的</Engine>上方添加以下内容。

[root@tomcat2 conf]# vim server.xml
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4" port="" frequency="" dropTime=""/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="192.168.40.180" port="" autoBind="" selectorTimeout="" maxThreads=""/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter="/"/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

  分别在tomcatA和tomcatB上 执行以下命令测试,检测配置文件。

[root@tomcat2 conf]# service tomcat configtest
.....
Oct , :: PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in ms

  此外,所有启用集群功能的web应用程序,其web.xml中都必须添加<distributable/>才能实现集群功能。如果某web应用程序没有自己的web.xml,也可以通过复制默认的web.xml到其WEB-INF目录中实现。

  3.修改web.xml

  TomcatA:

 [root@tomcat1 ~]# vim /usr/local/tomcat/conf/web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"> <distributable/>          (只需要添加这一句话即可) [root@tomcat1 ~]# mkdir -p /web/webapp/WEB-INF && cp /usr/local/tomcat/conf/web.xml /web/webapp/WEB-INF/

  TomcatB:

[root@tomcat2 ~]# vim /usr/local/tomcat/conf/web.xml
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"> <distributable/> [root@tomcat2 ~]# mkdir -p /web/webapp/WEB-INF && cp /usr/local/tomcat/conf/web.xml /web/webapp/WEB-INF/

  4.启动tomcat服务器

  TomcatB:

 [root@tomcat1 ~]# service tomcat start
[root@tomcat1 ~]# netstat -aultnp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /master
tcp 192.168.40.178: 192.168.30.192: ESTABLISHED /sshd
tcp ::: :::* LISTEN /java
tcp ::: :::* LISTEN /sshd
tcp ::: :::* LISTEN /master
tcp ::ffff:192.168.40.178: :::* LISTEN /java
tcp ::ffff:127.0.0.1: :::* LISTEN /java
tcp ::: :::* LISTEN /java
tcp ::ffff:192.168.40.178: ::ffff:192.168.40.180: TIME_WAIT -
tcp ::ffff:192.168.40.178: ::ffff:192.168.40.180: ESTABLISHED /java
tcp ::ffff:192.168.40.178: ::ffff:192.168.40.180: ESTABLISHED /java
udp ::: :::* /java

  TomcatB:

[root@tomcat2 ~]# service tomcat start
[root@tomcat2 ~]# netstat -altpnu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /master
tcp 192.168.40.180: 192.168.30.192: ESTABLISHED /sshd
tcp ::: :::* LISTEN /java
tcp ::: :::* LISTEN /sshd
tcp ::: :::* LISTEN /master
tcp ::ffff:192.168.40.180: :::* LISTEN /java
tcp ::ffff:127.0.0.1: :::* LISTEN /java
tcp ::: :::* LISTEN /java
tcp ::ffff:192.168.40.180: ::ffff:192.168.40.178: ESTABLISHED /java
tcp ::ffff:192.168.40.180: ::ffff:192.168.40.178: ESTABLISHED /java
udp ::: :::* /java       

  5.现在打开浏览器,访问http://192.168.40.184,进行验证。

  无论如何刷新,图中的SessionID都是不变的。

  通过以上的观察,我们tomcat集群负载功能已经实现,并且配置了DeltaManager得到session的复制。

六.总结

  通过以上的安装配置,以及过程中遇到的故障的解决,对apache的以及tomcat得到一些了解和认识。编译安装虽说很麻烦,确实很容易出错。。。。

本文大多数参考freeloda的博客,在原文基础上加入了一点点自己的修改,以及最新版软件使用时的不兼容。原文: “Share your knowledge …” 博客,请务必保留此出处http://freeloda.blog.51cto.com/2033581/1301382

  参考资料:关于tomcat8的权威指南:http://wiki.jikexueyuan.com/project/tomcat/

Centos下Apache+Tomcat集群--搭建记录的更多相关文章

  1. linux环境下Apache+Tomcat集群配置

    写在前面 apache配置多个tomcat,实现请求分流,多个tomcat服务均衡负载,增加服务的可靠性.最近研究了一下,遇到许多问题,记录一下,方便以后查阅,不喜欢apache,nginx也是可以做 ...

  2. Linux下搭建tomcat集群全记录

    (转) Linux下搭建tomcat集群全记录 2011-10-12 10:23 6133人阅读 评论(1) 收藏 举报 tomcatlinuxapacheinterceptorsession集群 1 ...

  3. Apache + Tomcat集群配置详解 (1)

    一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl版本 Tomcat 6.0 : http://to ...

  4. (转)Apache+Tomcat集群配置

    本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apache是ht ...

  5. Tomcat集群搭建

    关于如何搭建Tomcat集群网上还是能搜到很多相关的教程,这里结合我自己在实际应用中的操作做下备忘. 案例说明: 这里以在本机部署的2个tomcat来做集群.当然,tomcat集群可以是分布式的,而差 ...

  6. linux下配置tomcat集群的负载均衡

    linux下配置tomcat集群的负载均衡 一.首先了解下与集群相关的几个概念集群:集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台.在客户端看来,一个集群就象是一个服 ...

  7. 实战Apache+Tomcat集群和负载均衡

    实战Apache+Tomcat集群和负载均衡 目录 1.    什么是J2EE集群... 3 1.1.     序言... 3 1.2.     基本术语... 3 伸缩性(Scalability): ...

  8. haproxy+tomcat集群搭建

    web1和web2的部署可参考我之前的文章<Tomcat集群搭建>,这里就省去该过程了. #安装haproxy- .tar.gz cd haproxy-/ make TARGET=linu ...

  9. Linux下搭建tomcat集群全记录(转)

    本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...

随机推荐

  1. JMter压力测试

    一. 压力测试场景设置 一般我们在做压力测试的时候,分单场景和混合场景,单场景也就是咱们压测单个接口的时候,多场景也就是有业务流程的情况下,比如说一个购物流程,那么这样的场景就是混合场景,就是有多个接 ...

  2. python常用模块之json、pickle模块

    python常用模块之json.pickle模块 什么是序列化? 序列化就是把内存里的数据类型转换成字符,以便其能存储到硬盘或者通过网络进行传输,因为硬盘或网络传输时只接受bytes. 为什么要序列化 ...

  3. Xcode5.1.1支持低版本和image not found和Couldn't register XXXX with the bootstrap server. Error: unknown error code.

    一:问题  targets中证书的设置 1.项目支持多设备(Xcode5.1.1支持低版本) 2.真机测试要确保Code Siging 设置没问题 支持的最低版本 二 :问题:image  not f ...

  4. 细说C语言的优先级和结合性

    Table0. 为什么要掌握优先级1. 优先级1.1 优先级图表1.2 运算符实例1.3 优先级顺口溜2. 结合性3. 参考资料 写代码的时候,常会翻看的一个表就是“c语言运算符优先级表”.c的运算符 ...

  5. 读《the facebook effect》

    现在觉得时间越来越少,特别是抽出时间读书都感觉是一种奢侈. 今天把facebook读完了,想记录下自己的体会.不知该从什么地方写起.以前,曾注册过一个facebook帐号,一直没登过,好像从那时起,f ...

  6. ueditor使用小结【来源网络】

    原文地址:http://www.cnblogs.com/janes/p/5072496.html ueditor是百度编辑器,官网地址:http://ueditor.baidu.com/website ...

  7. JAVA验证身份证号码是否合法

    package com.chauvet.utils; import java.text.ParseException; import java.text.SimpleDateFormat; impor ...

  8. You're Given a String...

    You're given a string of lower-case Latin letters. Your task is to find the length of its longest su ...

  9. python3 scrapy main运行调式

    from scrapy.cmdline import execute import sys import os sys.path.append(os.path.dirname(os.path.absp ...

  10. 异常处理过程和异常处理的执行顺序(针对try{}catch{}finally{}而言)

    1.异常的处理方式有两种分别为:try{}catch{}finally{}和throws下面简单说一下这两者的区别和联系. 2.出现异常之后如果没有进行捕获处理系统就会直接将这个异常栈的跟踪信息直接打 ...