yangcctv 发表于 2018-11-29 12:17:30

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

  一、环境:
  系统最小化安装,系统初使化脚本:
  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
[*]  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/162155429.jpg

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

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

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

  




页: [1]
查看完整版本: 【APP & Web架构】企业web高可用集群实战之apache整合tomcat实现tomcat负载均衡集群+session