文档章节

Tomcat集群

素人派
 素人派
发布于 2015/07/22 07:56
字数 827
阅读 60
收藏 0
  • 介绍
把web应用运行在单个Tomcat上,在应付一些对稳定性要求不是很高的场合还是可以的。但试想,Tomcat或者是服务器停掉的话,可能会带来不必要甚至是很大的损失,这时候就需要多个Tomcat协同工作来保证应用永远工作。 首先,Tomcat本身是支持集群的。本文介绍了以apache和nginx作为前端代理的负载均衡。 以apache作为前端代理,需要jk模块的支持。而nginx则天生就有代理的功能,不需要添加其他模块。由此看来,nginx可以代理任何web服务器,而apache要和Tomcat联合的话必须要有jk。从这一点来看,nginx是占有优势的。
  • 安装
apt-get install libapache2-mod-jk libapache2-mod-jk - Apache 2 connector for the Tomcat Java servlet engine(这个是让apache和Tomcat合作的一个模块,很重要哦) Tomcat的安装很简单, 点击这里下载后解压即可。
  • apache配置
/etc/apache2/mods-enabled/jk.conf [codesyntax lang="xml"]
<IfModule jk_module>

    JkWorkersFile /etc/libapache2-mod-jk/workers.properties
    JkLogFile /var/log/apache2/mod_jk.log
    JkLogLevel debug
    JkShmFile /var/log/apache2/jk-runtime-status

    JkWatchdogInterval 60

    <Location /jk-status>
        JkMount jk-status
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </Location>
    <Location /jk-manager>
        JkMount jk-manager
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1
    </Location>
	JkMount /*.html tomcat1
	JkMount /*.js tomcat1
	JkMount /*.css tomcat1
</IfModule>
[/codesyntax] JkMount /*.html tomcat1这个配置,可以使用通配符将某些请求分发到指定的Tomcat中。 JkMount /* loadbalancer这样就能把请求分发了。 /etc/libapache2-mod-jk/workers.properties [codesyntax lang="ini"]
workers.tomcat_home=/home/suren/apache-tomcat-6.0.37/
workers.java_home=/usr/lib/jvm/default-java
ps=/
worker.list=ajp13_worker, tomcat1, tomcat2, loadbalancer
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
worker.ajp13_worker.lbfactor=1

worker.tomcat2.port=8009
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1

worker.tomcat1.port=8009
worker.tomcat1.host=10.0.32.4
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13_worker,tomcat1,tomcat2
worker.loadbalancer.sticky_session=false
worker.loadbalancer.sticky_session_force=1
[/codesyntax] sticky_sesion是黏性session的意思。
  • Tomcat配置
config/server.xml [codesyntax lang="xml"]
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">

  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
  
    <Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
			   URIEncoding="utf-8"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
      </Host>
    </Engine>
  </Service>
</Server>
[/codesyntax] 上面配置中,最重要的是jvmRoute="tomcat1"。如果你有多个Tomcat的话,每个jvmRoute的值都已经不一样,因为这个是jk模块用于区分Tomcat的唯一标识。 如果多个Tomcat在同一个服务器中的话,注意要把端口修改成不一样的,不然Tomcat会无法启动。
  • 测试
在Tomcat目录中添加index.html文件:webapps/test/index.html 重启apache服务(service apache2 restart)以及所有的Tomcat。 然后,访问apache所在的地址(192.168.1.12:80)就可以看到效果了。 http://192.168.1.12/test/index.html
  • nginx负载均衡配置
安装:apt-get install nginx 配置文件:/etc/nginx/sites-available/default [codesyntax lang="ini"]
upstream localhost {
	server 10.0.32.39:80 weight=1;
}

server {
	listen 8012 default_server;
	listen [::]:8012 default_server ipv6only=on;

	root /usr/share/nginx/html;
	index index.html index.htm;

	server_name localhost;

	location / {
		# F displaying a 404.
		try_files $uri $uri/ =404;
	
	}

	location /test {
		index 			index.html;
		proxy_pass		http://localhost;
		proxy_redirect		off;
		proxy_set_header	Host $host;
		proxy_set_header	X-Real-IP $remote_addr;
		proxy_set_header	X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}
[/codesyntax]   proxy_pass会把请求转发到对应的服务器。 proxy_set_header这些配置都是用于转发http协议头的。
  • 参考
Tomcat的基本配置,请看这里。 Tomcat原理分分析。 http://www.iteye.com/topic/1125301

本文转载自:http://surenpi.com/2015/04/08/tomcat%e9%9b%86%e7%be%a4/

上一篇: 客户端
下一篇: PHP框架Zend之简介
素人派

素人派

粉丝 27
博文 1907
码字总数 10223
作品 6
东城
程序员
私信 提问
linux下配置tomcat集群的负载均衡

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

吴胜健
2014/10/28
0
0
apache+jk+tomcat集群配置

1集群配置介绍 Apache Tomcat可以说是当下最受欢迎的开源Java Web服务器。Tomcat的单个实例恐怕无法满足访问量日增的需要。这种情况下,需要考虑在“集群”环境下运行Tomcat;在这种环境下,...

bill2candy
2016/10/28
33
0
Apache httpd与tomcat集群

回顾 前几天,刚刚搭建了apache httpd的静态网站,并为其开启的SSL。http://my.oschina.net/xpbug/blog/197454 今天在其基础上,我们将使用tomcat搭建集群,并把httpd改造成一个load banlen...

xpbug
2014/02/08
3.9K
4
Tomcat服务安装配置

tomcatapache.org 一个tomcat的server里都有一个service,service里有Englne引擎,引擎里有多个主机host,主机里可以有多个Context,而每个里面都可以定义日志 访问密码 等。 其中相关属性定...

335729167
2017/11/22
0
0
Linux系统Nginx+Tomcat+Codis实现session共享

用户:root Tomcat版本:apache-tomcat-7.0.52 接上篇,本篇是将单机Redis替换为Codis集群实现session共享。 请先配置Codis集群,可参考Linux系统Codis集群安装配置。 修改Redis源码 修改源码...

Listen_ing
2016/05/16
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

Linux 运行shell文件,出现 $'\r': command not found

运行编写的shell脚本时,出现了 $'\\r': command not found 这样的错误提示。 报错的原因是我们在windows系统操作时,编辑器里的换行符是\r\n ,而Linux上为\n,两个系统之间有差异导致的。 ...

芥末无敌
今天
7
0
Java数据结构(上)

枚举(Enumeration) 位集合(BitSet) 向量(Vector) 栈(Stack) 1.Enumeration(枚举) boolean hasMoreElements( ):测试是否有更多的元素 Object nextElement( ):如果此枚举对象至少还...

Firefly-
昨天
11
0
vue 跨层组件通讯 provide inject

https://cn.vuejs.org/v2/api/#provide-inject 类型: provide:Object | () => Object inject:Array<string> | { [key: string]: string | Symbol | Object } 详细: provide 和 inject 主......

阿豪boy
昨天
7
0
黑马程序员面试宝典(Java)Beta6.0免费下载

场景 JavaSE基础 面向对象特征以及理解 访问权限修饰符区别 理解clone对象 JavaSE语法 java有没有goto语句 &和&&的区别 如何跳出当前的多重嵌套循环? 是否可以继承String? 重载与重写的区别...

badaoliumang
昨天
9
0
监控linux系统状态

查看系统负载: w/uptime 最后面三个数字表示1分钟,5分钟,15分钟平均有多少个进程占用CPU 占用CPU的进程可以是Running,也可以是Waiting 某一时刻1颗CPU只能有一个进程在使用其资源 #查看c...

asnfuy
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部