设为首页 收藏本站
查看: 661|回复: 0

[经验分享] 【APP & Web架构】企业web高可用集群实战之apache整合tomcat实现tomcat负载均衡集群+session

[复制链接]

尚未签到

发表于 2018-11-29 12:17:30 | 显示全部楼层 |阅读模式
  一、环境:
  系统最小化安装,系统初使化脚本:
  http://linuxops.blog.运维网.com/2238445/841849
系统环境:centos 5.8 x86_64
应用软件:所以应用软件都放在/usr/local/src目录下
  httpd-2.2.22.tar.gz
          apache-tomcat-7.0.26.tar.gz
  jdk-7u4-linux-x64.gz
  tomcat-connectors-1.2.37-src.tar.gz
所需服务器:
          server1:192.168.8.222   -->安装httpd、apache-tomcat、jdk、tomcat-connectors
  server2:192.168.8.223   -->安装apache-tomcat、jdk

二、安装apache

  •   cd /usr/local/src/
  •   tar zxf httpd-2.2.22.tar.gz
  •   cd httpd-2.2.22
  •   ./configure --prefix=/usr/local/apache2 --enable-modules=so --enable-so --enable-cache --enable-mem-cache --enable-rewrite --enable-ssl --with-mpm=prefork
  •   make;make install
  •   cd ..
三、安装tomcat、jdk

  •   1.安装tomcat
  •   tar zxf apache-tomcat-7.0.26.tar.gz
  •   mv apache-tomcat-7.0.26 /usr/local/tomcat
  •   2.安装jdk
  •   tar zxf jdk-7u4-linux-x64.gz
  •   mv jdk1.7.0_04 /usr/local/jdk
  •   3.设置java、tomcat运行环境变量
  •   vi /etc/profile
  •   在文件最后加入如下内容:
  •   #Set java & tomcat Environment
  •   JAVA_HOME=/usr/local/jdk
  •   export JAVA_HOME
  •   JRE_HOME=/usr/local/jdk/jre
  •   export JRE_HOME
  •   CLASSPATH=/usr=/usr/local/tomcat/common/lib/:/usr/local/jdk/lib:/usr/local/jdk/jre/lib
  •   export CLASSPATH
  •   PATH=$PATH:/usr/local/tomcat/bin/:/usr/local/apache/bin:/usr/local/jdk/bin:/usr/local/jdk/jre/bin
  •   export PATH
  •   TOMCAT_HOME=/usr/local/tomcat
  •   export TOMCAT_HOME
  •   让环境变量立即生效:
  •   source /etc/profile

四、安装jk,整合apache和tomcat

  •   1.安装jk
  •   tar zxf tomcat-connectors-1.2.37-src.tar.gz
  •   cd tomcat-connectors-1.2.37-src/native
  •   ./configure --with-apxs=/usr/local/apache2/bin/apxs --with-java-home=/usr/local/jdk
  •   make;make install
  •   检测模块有没有生成
  •   通过上面几步,会在/usr/local/apache2/modules/目录下产生mod_jk.so 这个模块文件
  •   2.整合apache和tomcat
  •   1.)修改apache配置文件/usr/local/apache2/conf/httpd.conf ,加入:Include conf/mod_jk.conf
  •   echo "Include conf/mod_jk.conf" >> /usr/local/apache2/conf/httpd.conf
  •   2.)创建mod_jk.conf配置文件
  •   vi /usr/local/apache2/conf/mod_jk.conf
  •   加入如下内容:
  •   # Load mod_jk module
  •   LoadModule jk_module modules/mod_jk.so
  •   # Where to find workers.properties
  •   JkWorkersFile conf/workers.properties
  •   # Where to put jk logs
  •   JkLogFile logs/mod_jk.log
  •   JkShmFile logs/mod_jk.shm
  •   # Set the jk log level [debug/error/info]
  •   JkLogLevel info
  •   # Select the log format
  •   JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
  •   # JkOptions indicate to send SSL KEY SIZE,
  •   JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
  •   # JkRequestLogFormat set the request format
  •   JkRequestLogFormat "%w %V %T"
  •   # Send JSPs for context /examples to worker named ajp13
  •   JkMount /* controller
  •   3.配置JK调度器
  •   创建JK配置文件
  •   cat /usr/local/apache2/conf/workers.properties
  •   #
  •   # workers.properties conf
  •   #
  •   
  •   # list the workers by name
  •   worker.list=controller      #定义负载均衡名称
  •   worker.controller.type=lb   #定义负载均衡类型,这里为lb
  •   worker.controller.error_escalation_time=0   #切换错误状态时间
  •   worker.controller.max_reply_timeouts=10
  •   
  •   # -------- server 1  ---------
  •   worker.jvm1.reference=worker.template     #jvm1引用worker.template模板
  •   worker.jvm1.port=8009       #jvm1的ajp端口
  •   worker.jvm1.host=192.168.8.222  #jvm1的的IP
  •   worker.jvm1.lbfactor = 5
  •   
  •   # -------- server 2  ---------
  •   worker.jvm2.reference=worker.template
  •   worker.jvm2.port=8009
  •   worker.jvm2.host=192.168.8.223
  •   worker.jvm2.lbfactor = 1
  •   worker.jvm2.activation=A
  •   worker.template.type=ajp13
  •   worker.template.socket_connect_timeout=5000 #套接字连接超时为5000毫秒,默认为0
  •   worker.template.socket_keepalive=true       #开启保持为真,默认为false
  •   worker.template.ping_mode=A         #使用cping/cpong模式,有C,P,I,A四个模式,A表示选择所以模式
  •   worker.template.ping_timeout=10000      #探测cping/cpong超时间默认10000毫秒
  •   worker.template.connection_pool_minsize=0   #连接池关闭最小时间
  •   worker.template.connection_pool_timeout=600 #连接池600秒
  •   worker.template.reply_timeout=300000        #答复超时300000毫秒
  •   worker.template.recovery_options=3      #重试次数
  •   worker.controller.balance_workers=jvm1,jvm2 #负载均衡的客户名称
  •   worker.controller.sticky_session=0
  •   worker.controller.sticky_session_force=0
  •   #worker.balancer.sticky_session=1
PS: 这里worker.jvm1.port=8009的端口设置为tomcat server.xml配置文件中ajp13的默认端口!也可以自己定义,两边必须相同!
worker.controller.sticky_session=0
worker.controller.sticky_session_force=0
这是实现session复制的关键!
把worker.balancer.sticky_session=1 设置为1貌似不成,索性用上面的方法OK!

五、tomcat集群和session复制配置

  •   1.server1上配置
  •   1.)在/usr/local/tomcat/conf/server.xml 中修改Enginx节点信息,大概在103行:
  •   把
  •   修改成:
  •   
  •   2.)加入Cluster节点信息,大概在110行左右处加入如下内容:
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
2.server2上配置


  •   1.)在/usr/local/tomcat/conf/server.xml 中修改Enginx节点信息,大概在103行:
  •   把
  •   修改成:
  •   
  •   2.)加入Cluster节点信息,大概在110行左右处加入如下内容:
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   
  •   3.修改web站点文件存放主目录路径
  •   1.)apache配置文件要修改的地方
  •   把下面两处修改成:
  •   DocumentRoot "/data/www/"    #大概在104行
  •         #大概在131行
  •   2.)tomcat配置文件修改成:
  •   
  •   

4.建立测试目录

  •   mkdir -p /data/www/
  •   cat /data/www/test.jsp
  •   
  •   在/data/www目录下创建admin目录,再在admin目录下创建WEB-INF目录
  •   mkdir -p /data/www/admin/WEB-INF
  •   cd /data/www/admin/WEB-INF
  •   vi web.xml
  •   加入如下内容:
  •   
  •   TomcatDemo
  •   
  •   

PS: 这个必须加进去,不然也实现不了复制!
在admin目录下创建测试代码:

  •   cat /data/www/admin/index.jsp
  •   
  •   
  •   Cluster App Test
  •   
  •   Server Info:
  •   
  •    0) {
  •   String dataValue = request.getParameter("dataValue");
  •   session.setAttribute(dataName, dataValue);
  •   }
  •   out.print("Session 列表");
  •   Enumeration e = session.getAttributeNames();
  •   while (e.hasMoreElements()) {
  •   String name = (String)e.nextElement();
  •   String value = session.getAttribute(name).toString();
  •   out.println( name + " = " + value+"");
  •   System.out.println( name + " = " + value);
  •   }
  •   %>
  •   
  •   名称:
  •   
  •   值:
  •   
  •   
  •   
  •   
  •   

PS: 以上代码来源于网上!
浏览器测试结果:
http://192.168.8.222/admin/


http://blog.运维网.com/attachment/201207/162210180.jpg
再回到服务器上查看日志:
223服务器:
http://blog.运维网.com/attachment/201207/161827384.jpg
222服务器:


1.这里ID必须相同,且jvm1和jvm2来回切换!
2.ID不同,jvm1和jvm2来回切换只是实现了负载均衡!

后面的文章介绍: apache+tomcat集群用memcached保持session
                apache+tomcat集群用apache的 proxy-ajp和proxy-balance模块保持session
后面陆续介绍nginx+tomcat集群!欢迎大家来逛逛!!哈哈。。。。

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-641158-1-1.html 上篇帖子: Tomcat报java.io.IOException: 打开的文件过多 下篇帖子: centos7下配置tomcat
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表