当一台Tomcat服务器无法承载现有的访问量时,我们可以使用集群来提升其承载量;
    Tomcat Cluster的架构一般为:前端使用负载均衡(nginx、haproxy),将请求调度到后端的多个Tomcat服务器上,但是一般Tomcat不会直接面对前端,而是在二者之间再放置一个httpd服务,使用apache接收调度到本身的请求,然后再将请求发送至Tomcat上进行处理;因为使用了负载均衡,所以我们必然需要进行会话保持,让来自同一客户端的请求始终发至同一个Tomcat服务器;
        会话保持:
            session sticky:会话绑定,如果服务器宕机,数据会丢失;
                source ip:源地址绑定
                cookie
            session cluster:会话集群,当一台服务器宕机以后还可以使用其他服务器中的session继续提供服务,只要有服务器在线session数据就不会丢失;但是不适合大规模使用,因为session cluster比较耗费资源;
            session server:session服务器
                memcached:key-value存储形式,会将缓存数据存储在内存中,所以速度会非常快,但是数据宕机即没;
    Tomcat负载均衡方式:
        nginx+tomcat
        apache+tomcat
    Tomcat Cluster负载均衡方式:
        session server+tomcat
    拓扑结构:
        一台Centos7作为负载均衡器,两台Centos6作为Tomcat服务器
    配置过程:
        1.安装JDK以及Tomcat在上一篇博客中已经演示过了,在此不再赘述;
            https://blog.csdn.net/qq_32501535/article/details/88947938
        2.添加一个实验用的页面;
            cd /usr/local/tomcat
            vim conf/server.xml
        Centos6_1:
            <Engine name="Catalina" defaultHost="www.guowei.com">
                <Host name="www.guowei.com" appBase="/data/webapps/" autoDeploy="true">
                        <Context path="" docBase="ROOT">
                                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
                                    prefix="guowei_access_log" suffix=".txt"
                                    pattern="%h %l %u %t &quot;%r&quot; %s %b" />
                        </Context>
                  </Host>
        Centos6_2:
            <Engine name="Catalina" defaultHost="mail.guowei.com">
                <Host name="mail.guowei.com" appBase="/data/webapps/" autoDeploy="true">
                        <Context path="" docBase="ROOT">
                                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
                                    prefix="guowei_access_log" suffix=".txt"
                                    pattern="%h %l %u %t &quot;%r&quot; %s %b" />
                        </Context>
                  </Host>

3.检测配置文件是否有语法错误
            catalina.sh configtest
        4.启动tomcat
            catalina.sh start
        5.制作一个测试页;
            vim /data/webapps/ROOT/index.jsp
                <%@ page language="java" %>
                <%@ page import="java.util.*" %>
                <html>
                    <head>
                        <title> JSP Test Page</title>
                    </head>
                    <body>
                        <% out.println("Hello World! on www/mail"); %>
                    </body>
                </html>

6.访问http://www.guowei.com或http://mail.guowei.com(前提:在hosts中已添加对应解析条目)
        Note:两台Centos6作相同配置;
        7.在Centos7中安装Nginx;
            yum install nginx -y
        8.使用nginx实现负载均衡功能
            vim /etc/nginx/nginx.conf
                upstream tomservers {
                    server www.guowei.com:8080;
                    server mail.guowei.com:8080;
                }
                    location ~* \.(jsp|do) {
                        proxy_pass http://tomservers;
                    }
        9.测试:
            访问http://192.168.80.139/index.jsp即可查看负载均衡效果;
        10.源地址绑定:(功能展示,可以不配置)
            vim /etc/nginx/nginx.conf
                upstream tomservers {
                    ip_hash;
                    server www.guowei.com:8080;
                    server mail.guowei.com:8080;
                }
        11.使用apache实现负载均衡
            使用apache实现负载均衡需要加载特定balance模块,才可以实现负载均衡;
                httpd -M  ==>  proxy_balancer_module (shared)
            指令介绍:
                ProxyPass [path] !|url [key=value key=value]:将后端服务器某URL与当前服务器的某虚拟主机路径关联起来作为提供服务的路径;path为当前服务器上的某虚拟路径,url为后端服务器上某URL路径;使用此指令时必须将ProxyRequests的值设置为Off;需要注意的是如果path以”/”结尾,则对应的url也必须以”/”结尾,反之亦然;
                ProxyRequests {On|Off}:是否开启apache的正向代理功能;启用此项时为了代理http协议必须启用mod_proxy_http模块;
                ProxyVia {On|Off|Full|Block}:用于控制在http首部是否使用Via;主要用于在多级代理中代理请求的流向,默认为Off,及即不启用此功能,On表示每个请求和响应报文均添加Via,Full表示每个Via行都会添加当前apache服务的版本信息;Block表示每个代理请求报文中的Via都会被移除;
                ProxyPreserveHost {On|Off}:如果启用此功能,代表会将用户请求报文中的Host行发送给后端的服务器,而不再使用ProxyPass指定的服务地址;如果想在反向代理中支持虚拟主机,则需要开启此项,否则无需开启此功能;
            Centos6_1|2:
                vim /data/webapps/ROOT/index.jsp
                    <%@ page language="java" %>
                    <html>
                        <head><title>mail</title></head>
                            <body>
                            <h1><font color="red|blue">www|mail.guowei.com</font></h1>
                               <table align="centre" corder="1">
                                  <tr>
                                    <td>Session ID</td>
                                <% session.setAttribute("guowei.com","guowei.com"); %>
                                    <td><%= session.getId() %></td>
                                  </tr>
                                  <tr>
                                    <td>Created on</td>
                                       <td><%= session.getCreationTime() %></td>
                                  </tr>
                            </table>
                        </body>
                    </html>

vim /etc/tomcat/server.xml
                        <Engine name="Catalina" defaultHost="www|mail.guowei.com" jvmRoute="www|mail">
            Note:因为两台Centos6的配置大致相同,所以只列出一方的配置,其中不同的内容我使用”|”分开了,配置时留意一下!
            Centos7:(基于http|ajp方式)
                vim /etc/httpd/conf.d/vhosts.conf
                    <proxy balancer://lbcluster1>
                        BalancerMember ajp|http://192.168.80.131:8009|8080 loadfactor=10 route=www
                        BalancerMember ajp|http://192.168.80.134:8009|8080 loadfactor=10 route=mail
                    </proxy>

<VirtualHost *:80>
                        serverName web.guowei.com
                        ProxyVia On
                        ProxyRequests Off
                        ProxyPreserveHost On
                        <Proxy *>
                            Require all granted
                        </Proxy>
                        ProxyPass / balancer://lbcluster1/
                        ProxyPassReverse / balancer://lbcluster1/
                        <Location />
                            Require all granted
                        </Location>
                    </VirtualHost>
            访问http://192.168.80.139/index.jsp
        12.设置apache的stickysession功能:
            Centos7:
                vim /etc/httpd/conf.d/vhosts.conf
                    Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
                    <proxy balancer://lbcluster1>
                        BalancerMember http://192.168.80.131:8080 loadfactor=10 route=www
                        BalancerMember http://192.168.80.134:8080 loadfactor=10 route=mail
                        ProxySet stickysession=ROUTEID
                    </proxy>

<VirtualHost *:80>
                        serverName web.guowei.com
                        ProxyVia On
                        ProxyRequests Off
                        ProxyPreserveHost On
                        <Proxy *>
                            Require all granted
                        </Proxy>
                        ProxyPass / balancer://lbcluster1/
                        ProxyPassReverse / balancer://lbcluster1/
                        <Location />
                            Require all granted
                        </Location>
                        <Location /balancer>   设置查看balancer状态列表
                            SetHandler balancer-manager
                            ProxyPass !
                            Require all granted
        </Location>
                    </VirtualHost>
            访问http://192.168.80.139/index.jsp进行测试,连续刷新会发现session id不会发生改变了,说明成功了;
        13.实现Tomcat的Session Cluster
            会话管理器:可以定义在Host中或者Context中;
                标准会话管理器(StandardManager):
                    <Manager className=”org.apacha.catalina.session.StandardManager” maxInactiveInterval=”7200” />
                会话信息默认保存在$CATALINA_HOME/work/Catalina/<hostname>/<webapp-name>/中的SESSION.ser文件中;周期性保存;
                    指令:
                        maxActiveSession:最多允许的活动会话数量,默认为-1,表示不限制;
                        maxInactiveInterva:非活动的会话超时时长,默认为60s;
                        pathname:会话文件的保存目录;
                持久会话管理器(PersistenManager):
                    将会话数据保存至持久存储(比如单独的mysql服务器)中,并且能在服务器以外终止后重新启动时重新加载这些会话信息;持久会话管理器支持将会话保存至文件存储(FileStore)或JDBC存储(JDBCStore)中;但是这种会话管理器不是共享的,也就是可以将自己的会话信息保存至指定存储中,但是也只能从存储中加载自己之前导入的,无法加载别人的session信息;
                    例子:
                        <Manager className=”org.apache.catalina.session.PersistenManager” saveOnRestart=”true”>
                            <Store classesName=”org.apache.catalina.session.FileStoore” directory=”/data/tomcat-sessions”/>
                        </Manager>
                        Note:每个用户的会话会被保存至directory指定的目录中的文件中,文件名为<session id>.session;并通过后台线程每隔一段时间(checkInterval参数定义,默认为60秒)检查一次超时会话;
                        <Manager className=”org.apache.catalina.session.PersistenManager” saveOnRestart=”true”>
                            <Store classesName=”org.apache.catalina.session.JDBCStore” directory=”com.mysql.jdbc.Driver” connectionURL=”jdbc:mysql://localhost:3306/mydb?user=USER_NAME;password=PASSWORD”/>
                        </Manager>
                    DeltaManager:将多个Tomcat节点构建成一个通过组播信道进行通信的集群,从而实现session共享;每个节点都会监听在某一端口,用来接收其他节点发来的session信息;可以配置在Engine、Host、或Context中;

<Cluster>:定义Cluster;
                    <Manager>:定义Cluster使用的会话管理器;
                    <Channel>:定义节点间通信所使用的信道;
                    <Menbership>:定义Cluster中的集群成员;
                    <Receiver>:定义成员节点接收其他节点信息的方式;
                    <Sender>:定义成员节点传递给其他节点信息的方式;
                    详细信息请阅读官方资料:https://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html
            Note:如果某个webapp要支持会话管理器,至进行上面的配置还不够,还要在其对应的web.xml中添加<distribitable/>这一指令才可以;

  注:根据马哥视频做的学习笔记,如有错误,欢迎指正;侵删;

转载于:https://www.cnblogs.com/guowei-Linux/p/11072858.html

Linux Tomcat Cluster相关推荐

  1. Linux Tomcat JSP 布署详细教程

    Linux Tomcat JSP动态网页解析 v7.0 ★★★ 1 Tomcat 概述 Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Micr ...

  2. Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口

    Linux Tomcat安装,Linux配置Tomcat,Linux Tomcat修改内存,Linux tomcat修改端口 >>>>>>>>>& ...

  3. Linux Enterprise Cluster选译

    Linux Enterprise Cluster选译 [url]http://www.mikrotikrouter.cn/show/663[/url] 高有效性系统没有单故障点.所谓的单故障点是指某个 ...

  4. linux之CLUSTER(集群)一

    linux之CLUSTER(集群) 01: 集群及LVS简介 . LVS-NAT集群 . LVS-DR集群 02: Keepalived热备 . Keepalived+LVS . HAProxy服务器 ...

  5. linux+tomcat无法显示图片验证码

    由于实际所需,在原先系统基础上需要再配置一台服务器作为业务系统,系统环境是linux+tomcat,根据原先的配置情况,将linux系统.tomcat.JDK等环境都安装配置完成,然后把应用程序部署到 ...

  6. Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包

    Linux tomcat部署War包,Linux在Tomcat部署JavaWeb项目,Linux部署War包 >>>>>>>>>>>& ...

  7. Linux Tomcat下载

    参考视频教程: https://www.bilibili.com/video/BV13a411q753?p=134 1.Tomcat下载安装 操作步骤: 这里提供3种下载方法 1.1 tomcat下载 ...

  8. Linux HA Cluster高可用集群之HeartBeat2

    一.阐述Linux HA Cluster的使用背景: 1.1 高可用集群定义: 高可用集群全称:High Availability Cluster,简单的说,集群就是一组高可扩展.高可用性.高性价比的 ...

  9. linux tomcat集群配置笔记

    趁最后一天假期,配置linux环境下的apache集群,巩固下,免的以后用到又忘记,网上东拼息凑,环境弄好后,整到blog,以便以后用到. 参考来源:http://www.linuxidc.com/L ...

  10. httpd反代 + tomcat cluster + redis会话保持

    版本说明: httpd版本:2.4.6 tomcat版本:7.0.69 dedis版本:3.2.3 操作系统版本:CentOS Linux release 7.3.1611 拓扑结构: tomcat- ...

最新文章

  1. SQL优化|Java面试题
  2. 双向口和准双向口操作的不同!
  3. php java memcached_php和java的memcached使用的兼容性问题解决过程
  4. [Embeding-1]Efficient Estimation of Word Representations in Vector Space 译文
  5. python restful服务部署_用python为mysql实现restful接口
  6. 面试总结之html+css
  7. JSON和JavaScript对象互转
  8. Python 将json字符串 进行列表化可循环
  9. Ableton Live 11 Suite for Mac(数字音乐音频制作软件)
  10. 小程序毕设日志.2021.3.13
  11. 联想电脑BIOS失败教程
  12. 期权、期货及其他衍生产品 第二章读书笔记 期货市场的运行机制
  13. php聊天室发送表情,聊天室之表情发送
  14. 一年前,月薪两万被人叫老总,如今35岁在美团送外卖
  15. 2022年上半年计算机技术与软件专业技术资格(水平)考试陕西考区报名须知
  16. 基于Spring boot的图书馆图书借阅管理系统的设计与实现
  17. java防止电脑锁屏的网页_关于windows防止锁屏小程序
  18. VMware Workstation Player 找不到共享文件夹的解决方法
  19. iPhone 游戏 Dungeon Hunter2 地牢猎手 今日通关
  20. 【高等数学】加减关系下可以用等价无穷小替换的情况

热门文章

  1. Leetcode 208:实现Trie(前缀树)
  2. 【备忘】加入L2范数正则化后的正规方程求解参数推导过程
  3. python爬虫正则表达式爬取网页标签_Python爬虫实例(4)-用urllib、re和正则表达式爬取网页图片...
  4. 嵌入式系统——软件开发模型
  5. java io 字节流_Java之IO-字节流
  6. mysql系统变量_MySQL系统变量
  7. kafka消息堆积原因解析
  8. 开源字符处理类库:CharString类 拆分自自己研发的web服务器中的类库
  9. Linux内核开发_内核模块
  10. Weex中页面导航的实现