1、tomcat结合nginx做负载均衡,session绑定

nginx:192.168.223.136   tomcat:192.168.223.146:8081,192.168.223.146:8082这里使用tomcat的多实例做示例

upstream backserver {
  server 192.168.223.146:8081 weight=1;
  server 192.168.223.146:8082 weight=1;
}

location / {
  root html;
  index index.html index.htm;
  proxy_pass http://backserver/;
}

负载均衡已实现,现在进行session会话绑定:

upstream backserver {
  ip_hash;
  server 192.168.223.146:8081 weight=1;
  server 192.168.223.146:8082 weight=1;
}

然后不管怎么访问,源ip相同的都会被派往后端的同一台tomcat实例

2、tomcat结合apache做负载均衡,session绑定(apache与tomcat基于http协议

httpd2.4以上版本,编译安装192.168.223.136,tomcat还是多实例192.168.223.146:8081,192.168.223.146:8082

httpd配置:vhosts.conf

<proxy balancer://lbcluster>
  BalancerMember http://192.168.223.146:8081 loadfactor=1 route=tomcat1     这里route对应后端tomcat的配置文件的engine设置:<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
  BalancerMember http://192.168.223.146:8082 loadfactor=1 route=tomcat2
</proxy>

<VirtualHost *:80>
  ServerName 192.168.223.136
  proxyVia On
  ProxyRequests Off
  ProxyPreserveHost On
  <Proxy *>
    Require all granted
  </Proxy>
  ProxyPass / balancer://lbcluster/
  ProxyPassReverse / balancer://lbcluster/
  <Location />
    Require all granted
  </Location>
</VirtualHost>

配置之后一直不见出现80端口,查看error日志:

[root@node1 ~]# tail -f /usr/local/apache2.4/logs/error_log
[Wed Aug 09 13:41:53.523457 2017] [mpm_prefork:notice] [pid 85758] AH00169: caught SIGTERM, shutting down
[Thu Aug 10 09:54:14.263767 2017] [proxy_balancer:emerg] [pid 88118] AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??
[Thu Aug 10 09:54:14.263926 2017] [:emerg] [pid 88118] AH00020: Configuration Failed, exiting
[Thu Aug 10 09:54:26.284340 2017] [proxy_balancer:emerg] [pid 88123] AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??
[Thu Aug 10 09:54:26.284427 2017] [:emerg] [pid 88123] AH00020: Configuration Failed, exiting
[Thu Aug 10 09:55:07.894942 2017] [proxy_balancer:emerg] [pid 88135] AH01177: Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??
[Thu Aug 10 09:55:07.895056 2017] [:emerg] [pid 88135] AH00020: Configuration Failed, exiting
[Thu Aug 10 09:57:00.483255 2017] [proxy:crit] [pid 88148] AH02432: Cannot find LB Method: byrequests
[Thu Aug 10 09:57:00.483388 2017] [proxy_balancer:emerg] [pid 88148] (22)Invalid argument: AH01183: Cannot share balancer
[Thu Aug 10 09:57:00.483420 2017] [:emerg] [pid 88148] AH00020: Configuration Failed, exiting

根据错误提示,在配置文件中开启相应的模块:

LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so

LoadModule slotmem_shm_module modules/mod_slotmem_shm.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

LoadModule proxy_http_module modules/mod_proxy_http.so

LoadModule proxy_module modules/mod_proxy.so

解决完后,开启服务后访问网站:

负载均衡已成功实现,现在将session会话进行绑定:

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<proxy balancer://lbcluster>
  BalancerMember http://192.168.223.146:8081 loadfactor=1 route=tomcat1
  BalancerMember http://192.168.223.146:8082 loadfactor=1 route=tomcat2
  ProxySet stickysession=ROUTEID
</proxy>

<VirtualHost *:80>
  ServerName 192.168.223.136
  proxyVia On
  ProxyRequests Off
  ProxyPreserveHost On
  <Proxy *>
    Require all granted
  </Proxy>
  ProxyPass / balancer://lbcluster/
  ProxyPassReverse / balancer://lbcluster/
  <Location />
    Require all granted
  </Location>
</VirtualHost>

proxyVia On:

3、tomcat结合apache做负载均衡,session绑定(apache与tomcat基于ajp协议

只需要将上面的配置文件修改为ajp协议就行,这里省略

4、tomcat结合apache做负载均衡,session绑定(apache与tomcat基于mod_jk模块

  1、编译安装mod_jk模块

  wget http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.41-src.tar.gz

  cd tomcat-connectors-1.2.41-src/native

  ./configure --with-apxs=/usr/local/apache2.4/bin/apxs

  make && make install

2、配置相应的文件

  cat mod_jk.conf

  LoadModule  jk_module  modules/mod_jk.so

  JkWorkersFile  conf/extra/workers.properties

  JkLogFile logs/mod_jk.log

  JkLogLevel debug

  JkMount /*  tomcat1

  JkMount  /status/  stat1

  3、workers.properties

  cat workers.properties

  worker.list=tomcat1,stat1

  worker.tomcat1.port=8009

  worker.tomcat1.host=192.168.1.155

  worker.tomcat1.type=ajp13

  worker.tomcat1.lbfactor=1

  worker.stat1.type = status

但是检查语法时一直报错:

[root@wadeson conf]# /usr/local/apache2.4/bin/httpd -t
AH00526: Syntax error on line 1 of /usr/local/apache2.4/conf/extra/workers.properties:
Invalid command 'worker.list=tomcat1,stat1', perhaps misspelled or defined by a module not included in the server configuration

httpd2.4编译加载mod_jk模块设置配置文件一直报错,没有找到相应的解决办法

然后换成了centos7的yum安装的httpd2.4以上版本,192.168.223.147

  wget http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.41-src.tar.gz

  cd tomcat-connectors-1.2.41-src/native

  ./configure --with-apxs=/usr/bin/apxs

  make && make install

[root@wadeson conf.d]# cat mod_jk.conf
  LoadModule jk_module modules/mod_jk.so
  JkWorkersFile /etc/httpd/conf.d/workers.properties
  JkLogFile logs/mod_jk.log
  JkLogLevel debug
  JkMount /* tomcat1              这里的tomcat1要和后端tomcat的配置jvmRoute值相同<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
  JkMount /status/ stat1
[root@wadeson conf.d]# cat workers.properties
  worker.list=tomcat1,stat1
  worker.tomcat1.port=8010
  worker.tomcat1.host=192.168.223.146
  worker.tomcat1.type=ajp13
  worker.tomcat1.lbfactor=1
  worker.stat1.type = status

配置都是一模一样,centos7自带的httpd就没有报错,编译安装就一直报错,于是采用centos7进行操作

基于模块mod_jk的反向代理已经成功,于是进行负载均衡:

[root@wadeson conf.d]# cat mod_jk.conf
  LoadModule jk_module modules/mod_jk.so
  JkWorkersFile /etc/httpd/conf.d/workers.properties
  JkLogFile logs/mod_jk.log
  JkLogLevel debug
  JkMount /* lbcluster1
  JkMount /status/ stat1

[root@wadeson conf.d]# cat workers.properties
  worker.list=lbcluster1,stat1
  worker.tomcat1.port=8010
  worker.tomcat1.host=192.168.223.146
  worker.tomcat1.type=ajp13
  worker.tomcat1.lbfactor=1
  worker.tomcat2.port=8011
  worker.tomcat2.host=192.168.223.146
  worker.tomcat2.type=ajp13
  worker.tomcat2.lbfactor=1
  worker.lbcluster1.type=lb
  worker.lbcluster1.sticky_session=0
  worker.lbcluster1.balance_workers = tomcat1,tomcat2
  worker.stat1.type = status

访问网站效果:

现在将负载均衡效果进行session会话绑定:

[root@wadeson conf.d]# cat workers.properties
  worker.list=lbcluster1,stat1
  worker.tomcat1.port=8010
  worker.tomcat1.host=192.168.223.146
  worker.tomcat1.type=ajp13
  worker.tomcat1.lbfactor=1
  worker.tomcat2.port=8011
  worker.tomcat2.host=192.168.223.146
  worker.tomcat2.type=ajp13
  worker.tomcat2.lbfactor=1
  worker.lbcluster1.type=lb
  worker.lbcluster1.sticky_session=1     只需将这里的值将0变为1即可绑定session会话
  worker.lbcluster1.balance_workers = tomcat1,tomcat2
  worker.stat1.type = status

综上,httpd在编译安装2.4结合mod_jk模块遇到不可知的错误,更换centos7自带的2.4以上版本的yum包成功解决该错误

tomcat结合nginx或apache做负载均衡及session绑定的更多相关文章

  1. 通过Nginx+tomcat+redis实现反向代理 、负载均衡及session同步

    一直对于负载均衡比较陌生,今天尝试着去了解了一下,并做了一个小的实验,对于这个概念有一些认识,在此做一个简单的总结 什么是负载均衡 负载均衡,英文 名称为Load Balance,指由多台服务器以对称 ...

  2. nginx反向代理做负载均衡以及使用redis实现session共享配置详解

    1.为什么要用nginx做负载均衡? 首先我们要知道用单机tomcat做的网站,比较理想的状态下能够承受的并发访问在150到200, 按照并发访问量占总用户数的5%到10%技术,单点tomcat的用户 ...

  3. 使用nginx做负载均衡的session共享问题

    查了一些资料,看了一些别人写的文档,总结如下,实现nginx session的共享PHP服务器有多台,用nginx做负载均衡,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不 ...

  4. 关于Apache做负载均衡

    Tomcat+apache配置负载均衡系统笔记 在Apache   conf目录下的httpd.conf文件添加以下文字 #---------------------start------------ ...

  5. 整合Tomcat和Nginx实现动静态负载均衡

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6386135.html Nginx与tomcat整合可以实现服务器的负载均衡. 在用户的请求发往服务器进行处理时 ...

  6. Nginx+Tomcat8+Memcached实现负载均衡及session共享

    1> 基础环境 简易拓扑图: 2> 部署Tomcat [root@node01 ~]# ll -h ~ |egrep 'jdk|tomcat'-rw-r--r-- 1 root root ...

  7. windows系统下nginx+tomcat+redis做负载均衡和session粘滞附整套解决方案

    Nginx: 在nginx-1.8.0\conf目录下找到nginx.conf文件,打开文件修改文件中http{}中的内容,在http{}中加入 upstream localhost  { serve ...

  8. Nginx反向代理实现负载均衡以及session共享

    随着社会的发展和科技水平的不断提高,互联网在人们日常生活中扮演着越来越重要的角色,同时网络安全,网络可靠性等问题日益突出.传统的单体服务架构已不能满足现代用户需求.随之而来的就是各种分布式/集群式的服 ...

  9. nginx + tomcat + memcached 做负载均衡及session同步

    1.nginx配置 # For more information on configuration, see: # * Official English Documentation: http://n ...

随机推荐

  1. C程序编译过程浅析(转)

    前几天看了<程序员的自我修养——链接.装载与库>中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧. 我现在一般都是用gcc,所以自然以GCC编译hellworld ...

  2. flask建立数据模型数据类型

    https://blog.csdn.net/happyanger6/article/details/53947162 https://blog.csdn.net/happyanger6/article ...

  3. PHP的生命周期

    了解PHP生命周期之前,先了解一下apache是怎么和php关联起来的吧~ 1.Apache运行机制剖析 ----------------------------- 总体示意图如下:   Apache ...

  4. LocalActivityManager与ActivityGroup

    Helper class for managing multiple running embedded activities in the same process. This class is no ...

  5. Linux下多线程的重要知识点

    线程属性: typedef struct { int                              detachstate;   线程的分离状态 int                   ...

  6. 设计模式中类的关系UML

    在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖.关联.聚合.组合.继承.实现.他们的耦合度依次增强. 1. 依赖(Dependence)  依赖关系的定义为:对于两 ...

  7. air游戏接入小米支付sdk

    小米支付sdk要求在Application.onCreate中进行初始化 为了这个初始化搞了半天,最终搞定了.今天将更改的步骤记录下了. 1. 创建ANE.ANE的创建就不罗嗦了,这里须要注意一点,这 ...

  8. 从CPU/OS到虚拟机和云计算

      从CPU/OS到虚拟机和云计算  作者:张冬            关于软硬件谁为主导这个话题,套用一句谚语就是三十年河东三十年河西.风水轮流转.软件和硬件一定是相互促进.相互拆台又相互搭台的. ...

  9. libx264 安卓编译

    https://github.com/RoyGuanyu/build-scripts-of-ffmpeg-x264-for-android-ndk/blob/master/ffmpeg/build_a ...

  10. 5.MySQL必知必会之过滤数据-WHERE

    本章将讲授如何使用SELECT语句的WHERE子句指定搜索条件. 1.使用WHERE子句 数据库表一般包含大量的数据,很少需要检索表中所有行.通常只 会根据特定操作或报告的需要提取表数据的子集.只检索 ...