Tomcat的基础知识和一些应用,session cluster和session server

Tomcat简单来讲就是JAVA 2 EE 加上ServletJSP类库的实现,tomcat=JWSSun+ JservASFcss

Tomcat的核心组件:html

    catalina:servlet container前端

    Coyote:http connectionjava

    Jasper:JSP Engine 执行引擎linux

 

    TomcatInstance: 运行中的tomcat进程(java进程)nginx

        Server:即一个tomcat实例;web

        Service:用于将connector关联至engine组件;一个service只能包含一个engine组件和一个或多个connector组件;算法

        EngineTomcat的核心组件,用于运行jspservlet代码;数据库

        Connector:接入并解析用户请求,将请求映射为Engine中运行的代码;以后,将运行结果构建成响应报文;apache

        Host:相似httpd中的虚拟主机;

        Context:相似于httpd中的alias;

 

    注意:每一个组件都由“类”来实现,有些组件的实现还不止一种;

        顶级类组件:server

        服务类组件:service

        容器类组件:便可以部署webapp的组件,engine,host, context

        链接器组件:connector

        被嵌套类组件:valve,logger, realm

  tomcat的主配置文件结构:

    <server>

     <service>

        <connector/>

        <connector/>

        ...

         <engine>

             <host>

               <context/>

              ...

            </host>

            ...

         </engine>

     </service>

    </server>

  Tomcat的目录结构:

    bin:脚本及启动时用到的类

    lib:类库

    conf:配置文件

    logs:日志文件

    webapps:应用程序默认部署目录

    work:工做目录

    temp:临时文件目录

  配置文件:

    server.xml:主配置文件

    context.xml:每一个webapp均可以有专用的配置文件,这些配置文件一般位于webapp应用程序目录下的WEB-INF目录中,用于定义会话管理器、JDBC等;conf/context.xml是为各webapp提供默认配置;

    web.xml:每一个webapp“部署”以后才能被访问;此文件则用于为全部的webapp提供默认部署相关的配置;

    tomcat-users.xml:用户认证的帐号和密码配置文件;

    catalina.policy:当使用-security选项启动tomcat实例时会读取此配置文件来实现其安全运行策略;

    catalina.propertiesJava属性的定义文件,用于设定类加载器路径等,以及一些JVM性能相关的调优参数;

    logging.properties:日志相关的配置信息;


CentOS7上默认提供的JDKopenJDK7Tomcat7,这版本已经很新了,能够直接yum安装使用

要安装Tomcat首先要安装JDK,而后安装Tomcat,能够直接yum安装,也能够本身下载二进制格式的程序包进行安装,


下面咱们本身下载二进制程序包进行安装,下载jdk-8u25-linux-x64.rpmapache-tomcat-8.0.23.tar.gz(如下的演示都是在CentOS7下作的,若是你使用的不是CentOS7可能会有些不一样)

而后直接rpm -ivh jdk-8u25-linux-x64.rpm 安装JDK,而后配置环境变量,编辑/etc/profile.d/java.sh文件加入exportJAVA_HOME=/usr/java/latest

export PATH=$JAVA_HOME/bin:$PATH JDK的路径加入到PATH变量中,使用java回车测试下,看JDK是否安装成功

wKiom1Y4h5iAFRxPAAA3ExXcFNM687.jpg

wKiom1Y4h7ODPkSnAAFf7VPS8BI448.jpg

若是出现这些信息等,就证实JDK装好了,环境变量也配置好了

而后安装tomcattar xf apache-tomcat-8.0.23.tar.gz -C /usr/local

而后切入到/usr/local目录下,建立一个符号链接文件ln -sv apache-tomcat-8.0.23 tomcat

而后切入到tomcat目录下,不用修改什么就能够运行tomcat/usr/local/tomcat/bin/catalina.sh start),但为了能够直接使用catalina.shstart运行,须要配置环境变量,编辑/etc/profile.d/tomcat.sh 加入exportCATALINA_HOME=/usr/local/tomcat

export PATH=$CATALINA_HOME/bin:$PATH

wKiom1Y4h9iw8hZeAABH4Ohye3I183.jpg

而后使用catalina.sh start 就能够启动了,使用ss –tnl 就能够发现8080端口启用了

wKioL1Y4iBaTMIh-AAHugaJNMbs227.jpg

而后访问测试下

wKiom1Y4h_rREkoWAAPOtvaq1go472.jpg

能够看到web页面的管理界面了,里面的3个按钮是服务器资源和两个管理的应用程序

点下Manager这个按钮须要认证,如今你点击取消,会提示你在哪修改,而后才能访问

wKioL1Y4iHmQFEXLAAIMA5J_Pas004.jpg

wKiom1Y4iDzzvwJzAASsMSJrFFY836.jpg编辑配置文件/usr/local/tomcat/conf/tomcat-users.xml,而后加入下面三行就可使用这三个按钮的功能了

wKiom1Y4iGTSxG4LAABpkt1FwGs388.jpg

wKioL1Y4iKGzfm1QAAKyOKO3nBo469.jpg


Java WebAPP 组织结构:

    有特定的组织形式、层次型的目录结构;主要包含了servlet代码文件、JSP页面文件、类文件、部署描述符文件等;

    例:/usr/local/tomcat/webapps/app1/

        /:webapp的根目录;

        WEB-INF/:当前webapp的私有资源目录,一般存放当前webapp自用的web.xml

        META-INF/:当前webapp的私有资源目录,一般存放当前webapp自用的context.xml

        classes/:webapp的私有类;

        lib/:webapp的私有类,被打包为jar格式类;

        index.jspwebapp的主页


  手动添加一个测试应用程序:

    建立webapp特有的目录结构;

     mkdir-pv myapp/{lib,classes,WEB-INF,META-INF}

wKioL1Y4iQHSZXP8AAAo5H_1QBQ939.jpg

    提供webapp各文件,WEB-INF中应有web.xml文件,META-INF中有context.xml文件,若是没有的话就会使用conf目录下默认的这两个文件;而后直接在myapp目录下建立一个index.jsp文件,编辑内容以下:

    <%@page language="java" %>

    <%@page import="java.util.*" %>

    <html>

      <head>

        <title>JSPTest Page</title>

      </head>

        <body>

           <%out.println("Hello world!"); %>

        </body>

    </html>

wKiom1Y4iiGjNYO5AACFPCaLdY8398.jpg

而后canalina.sh stop 等一下子,而后在canalina.sh start;访问测试下

wKiom1Y4ii7gUMF5AABHSkMP3bg533.jpg

能够看到没有问题了

而后这个时候,查看tree /usr/local/tomcat/work

wKioL1Y4in-yU5cTAAA7hDooQkU707.jpg

能够看到这里面有.java文件和.class文件,这是JSPindex.jsp经过servlet转换成.java文件,而后经过complie编译成bytecodes自解码的.class文件,而后在JVM中运行

 

部署(deploymentwebapp相关的操做:

    deploy:部署,将webapp的源文件旋转于目标目录、配置tomcat服务器可以基于context.xml文件中定义的路径来访问此webapp; 将其特有类经过class loader装载至tomcat

    有两种方式:

        自动部署:autodeploy

        手动部署:

        1、冷部署:把webapp复制到指定位置,然后才启动tomcat

        2、热部署:在不中止tomcat的前提下进行的部分:

           部署工具:managerant脚本、tcdtomcatclient deployer)等;

            undeploy:反部署,中止webapp,并从tomcat实例拆除其部分文件和部署名;

           stop:中止,再也不向用户提供服务;但其文件和部署名会在tomcat实例中

           start:启动处于“中止”状态的webapp

           redeploy:从新部署;

    tomcat自带的应用程序:

        managerapp: webapp管理工具

        hostmanagerVirtual Hosts管理工具

能够经过这两个工具来管理webapp应用程序和虚拟主机,实现应用程序的热部署等




tomcat启动是开启了3个端口一个是8080提供http链接器服务的,一个8005是一个管理端口,能够telnet进入而后关闭服务;还有一个8009端口是提供ajp链接器服务的

wKiom1Y4iu3xInlzAAIYUXbINYk272.jpg

 

Tomcat应该考虑工做情形并为相应情形下的请求分别定义好须要的链接器才能正确接收来自于客户端的请求。一个引擎能够有一个或多个链接器,以适应多种请求方式。

 

定义链接器可使用多种属性,有些属性也只适用于某特定的链接器类型。通常说来,常见于server.xml中的链接器类型一般有4种:

    1) HTTP链接器

    2) SSL链接器

    3) AJP 1.3链接器

    4)proxyJK)链接器

自定义HostContext示例:

  <Host name="web1.magedu.com"appBase="/data/webapps/"unpackWARs="true"autoDeploy="true">

    <Contextpath="" docBase="ROOT" reloadable="true">

        <ValveclassName="org.apache.catalina.valves.RemoteAddrValve"

                              allow="172\.16\.0\.0"/>

    </Context>

    <Contextpath="/shop" docBase="shopxx" reloadable="true"/>

<Valve className="org.apache.catalina.valves.AccessLogValve"directory="/data/logs" prefix="web1_access_log"suffix=".txt"

pattern="%h %l %u %t &quot;%r&quot; %s %b" />         

 </Host>

      注意:path给定的路径不能以“/”结尾;

不是默认的Host,本身定义的HostdcoBace尽可能使用绝对路径,要否则使用相对路径有时会访问不到,尽可能使用绝对路径


下面演示一下:

    修改配置文件(/usr/local/tomcat/conf/server.xml),若是是rpm包安装的tomcat其配置文件是/etc/tomcat/server.xml

    在Engine段中,加入下面内容

<Host name="centos7"appBase="/data/webapps" autoDeploy="false">

    <Context path="" docBase="/data/webapps"reloadable="true"/>

    <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="/data/logs"

              prefix="web1_access_log" suffix=".txt"

               pattern="%h %l %u %t&quot;%r&quot; %s %b" />

  </Host>

wKioL1Y4i-_TfFB8AADiMlEGJCg926.jpg 

建立目录/data/{webapps,logs}

而后复制咱们之前建立的mydata程序的全部文件复制到/data/webapps

cp  -r/usr/local/tomcat/webapps/myapp/* /data/webapps/

而后修改物理机的hosts文件,让本机能解析到centos7

而后访问测试下


这就没有问题了,本身添加的虚拟主机就生效了

修改配置文件:

wKiom1Y4i9eRhThIAAECksVujVk351.jpg

在里面定义两个Centext,一个为默认的;而后在/data/webapps目录下的全部文件移动到这个目录下新建立的ROOT目录下,而后在新建一个shopxx目录,而后在shopxx中建立这几个目录和一个测试页classes index.jsp lib META-INF WEB-INF

index.jsp中的内容

wKioL1Y4jGvBVzezAACs9HM92-8692.jpg

首先中止tomcat catalina.sh stop),而后在打开(catalina.sh start

 

wKioL1Y4jJuwV1IoAABJGr-FZbQ430.jpg

wKiom1Y4jF2BoRiAAAAtVFWFPoo909.jpg

能够看到两个Context都生效了。path是用来定义访问时的url的,多个Contextpath不能同样


而后下载一个软件shopxx而后解压到/data/webapps目录下,把shopxx目录删掉,

作一个符号链接ln -sv shopxx-v3.0-Beta/shopxx-3.0Beta/ shopxx

配置文件要修改下

wKiom1Y4jJnhyho2AAEGwvaGtVg294.jpg

而后在访问下

wKioL1Y4jOaiHY_nAAIxQX2d9Ck317.jpg

还须要数据库,须要安装mariadb而后开启,并受权

grant all on shoppxx.* toshopuser@'localhost' identified by 'shoppasswd';

grant all on shoppxx.* toshopuser@'127.0.0.1' identified by 'shoppasswd';

wKioL1Y4jP-TZo_hAADx8H2vA4w102.jpg

而后根据提示,作软件的安装

wKiom1Y4jMKhus-aAAHP4EdrVGM533.jpg

wKiom1Y4jOaizw09AADSJoOOCgw956.jpg

这样就好了

 

 作访问控制的示例:

    <Context path=""docBase="/data/webapps ">

       <ValveclassName="org.apache.catalina.valves.RemoteAddrValve"

       allow="172\.16\.0\.0"/>

     </Context>

这样作就好了

而后在咱们作的默认访问目录下,建立一个p_w_picpath目录,而后里面放两张图片,而后关闭tomcat再开启,而后访问下,看能正常访问不

wKioL1Y4jWawTxW9AACM-maSn88440.jpg

 

下面实现LNMT:(Nginx+tomcat

请求的过程 client-->http --> nginx --> reverse_proxy --> http --> tomcat (httpconnector)      

首先找一台主机,安装nginx,而后配置nginx

wKiom1Y4jw-Q_wgnAAA11zScZHo205.jpg

而后启动服务就好了,访问测试下

wKiom1Y4j73zZVwpAAEU6mALsYM964.jpg

这就代理过去了,可以访问了,但访问的不是咱们想要的虚拟主机,

这是基于IP地址访问的,若是tomcatEngine中的默认虚拟主机不是咱们须要的话,咱们就要以主机名来访问了,或者修改Tomcat的配置文件,把默认虚拟主机改成咱们须要的

修改/etc/nginx/nginx.conf

wKioL1Y4kJvAbhcNAAAn_-BgMZ0244.jpg

而后修改/etc/hosts文件增长一条172.16.249.195  centos7

而后重载nginx

这样就能够经过反代来访问咱们须要访问放到的虚拟主机

wKioL1Y4joHDlKfuAABg7PTxUBQ853.jpg

 

若是须要把静态的让nginx响应,让动态的转交给后端的tomcat

修改nginx的配置文件

wKioL1Y4jcShUxpwAAA5EK643X0879.jpg

而后重载nginx,访问测试

这个时候默认请求的是index.html,因此没有转交给tomcat,而是nginx本身响应了

wKiom1Y4kIOivbhtAAJPns7kC1I534.jpg

后面带上指定的url访问

wKiom1Y4kIuCoIDSAAA-5nJlZ-Y905.jpg

能够看到实现动静分离了

 

实现LAMT(apache+tomcat)

  访问请求 client--> http --> httpd --> reverse_proxy --> {http|ajp} --> tomcat{http connector|ajp connector}

把刚在主机(172.16.249.159nginx停掉,而后打开httpd服务

而后用httpd来进行反向代理

反代模块:

    主:proxy_module

    子:proxy_module_http,proxy_module_ajp

      还可使用第三方的模块jk来进行反代

 

首先打开/etc/httpd/conf/httpd.conf注释掉主节点即DocumentRoot这一行

在这个/etc/httpd/conf.d目录下,建立一个虚拟主机的配置文件vhosts.conf文件

而后添加内容:

wKiom1Y4kWGiRBCjAADPOIxL2rA659.jpg

<Location />定义的是访问的全部url都代理容许经过

ProxyRequests Off 这一项是关闭正向代理的,由于httpd中的代理是正反向均可以代理,但只能×××一种,因此要明确使用哪种代理

 

而后使用httpd –t检查语法,而后在启动httpd

wKiom1Y4kYKCrIFyAADJNURVfY0433.jpg

这有一个警告,须要修改httpd主配置文件,给一个主机名

找到ServerName,而后修改

wKiom1Y4kZKiSvpuAAErhcjnOBk197.jpg

而后启动httpd服务,

修改物理机的hosts文件 172.16.249.159  centos7

而后访问测试下

wKioL1Y4keGAwpZkAAAmEOEaFLg495.jpg

能够看到调度到后端的tomcatcentos7虚拟主机上了(ProxyPreserveHost On由于这一项是,保留本身请求的虚拟主机到后端去)

若是使用的是ip地址访问是不会把主机名加上的因此请求的是

wKiom1Y4kb6g5SiXAAJxQQhIAoc596.jpg

下面作几个实例,实现负载均衡和会话绑定,以及session cluster和session server

示例:nginx, apache(mod_proxy_http,mod_proxy_ajp, mod_jk)负载均衡用户请求至tomcat;额外实现session sticky

下面的示例使用的是CentOS7下yum安装的JDK和Tomcat


172.16.249.159centos72)作负载均衡器,172.16.249.115centos71)和172.16.249.112centos73)作后端的tomcat

首先配置tomcat,使用java  -version,看到系统自带的有JDK1.7,因此这里不在本身编译安装,直接yum安装,而后安装tomcatyum  install  tomcat

而后使用rpm  -qpl  tomcat

能够看到,tomcat的配置文件在/etc/tomcat/server.xml

启动tomcat直接使用systemctl  start  tomcat.service

而后访问测试下,看能访问到主页不

wKioL1Y4k2iAUSQzAAIU4XQ1Qms449.jpg

wKiom1Y4kzzAbOCuAALThV3igLE273.jpg

 

为了之后配置方便,而后再给tomcat配置一个Host,首先建立目录mkdir -pv /data/webapps/ROOT/data/webapps这个目录的属组改成tomcat),mkdir/data/logs,而后编辑tomcat的配置文件(/etc/tomcat/server.xml

wKioL1Y4k5OSsq4SAACHf1OpNQQ506.jpg

修改配置文件,添加下面这些

wKiom1Y4k2Sgx9AoAADWNRcp06s711.jpg

而后在/data/webapps/ROOT/目录下,建立几个目录和一个index.jsp文件,提供测试页

mkdir lib classes META-INF WEB-INFvimindex.jsp

wKioL1Y4k7LinmW6AACVXBcDmEg695.jpg

而后另外一个tomcat节点,也作上面的这些配置,知识测试页为“Hello  Worderon web2

能够直接复制过去scp server.xml centos73:/etc/tomcat/,而后修改

wKiom1Y4k43Rs00IAADTOwYHK_w076.jpg

scp -rp /data/ centos73:/data,而后修改index.jsp

 

而后重启tomcat systemctl  restart  tomcat.service

在其余虚拟机中测试下,首先查看这个虚拟机中可否解析主机名centos71,要是用物理机测试,须要在hosts文件中加入 172.16.249.115  centos71  172.16.249.112  centos73wKiom1Y4k6eDtOrTAAFi57WRdqU486.jpg

wKioL1Y4lDyQzG6VAAA0OMECcG4041.jpg

wKiom1Y4k__gC03ZAACO6oQBYro590.jpg

wKioL1Y4lDyiXqY7AAAvA7qoTvw991.jpg

这样tomcat就作好了,测试也没问题了,

 

由于tomcat中的默认主机不是咱们刚配置的,只能使用主机名才能访问,那么负载均衡器中就要能解析到后端的tomcat主机的主机名,为了方便,咱们能够把tomcat的默认主机改成咱们配置的虚拟主机(Host

wKiom1Y4lECxuJxYAABdFUV8AOU461.jpg

wKioL1Y4lH3yWY-HAAAzA4gFlc4746.jpg

在重启一下,使用ip地址访问测试下

wKioL1Y4lKLhjbalAAA36TrpDLI570.jpg

wKiom1Y4lGWQ6nDyAAA-4R9V_d4217.jpg 

 

下面作负载均衡:

一、  使用nginx作负载均衡器,反向代理

172.16.249.159上安装nginx

而后修改nginx的配置文件(/etc/nginx/nginx.conf

wKioL1Y4lMCRJhPXAAEyrqPySck099.jpg

而后使用nginx  – t 检查语法,而后启动nginx

wKiom1Y4lKSTP15eAACmw4ugaEE992.jpg

而后访问测试下

wKioL1Y4lOHhr0Q7AABEH6wFy6E275.jpg

刷新下,

wKiom1Y4lKSQMT2dAABBljSXjN8863.jpg

能够看到能负载均衡了,这样nginx负载均衡tomcat就作好了

若是要作会话绑定(session  sticky),只须要在nginx配置文件中修改

wKiom1Y4lKSjLcbFAABI8ZSno3M499.jpg

而后systemctl  reload  nginx.service,而后访问测试

wKioL1Y4lRSyAZxMAABDmJ4tQPE802.jpg

不管怎么刷新都是这一个页面不变了

 

 

二、  使用apache来作负载均衡器和反向代理,可使用3种模块来负载均衡tomcat

首先停掉nginx服务systemctl  stop  nginx.service,而后安装httpd

  (a)   mod_proxymod_proxy_httpmod_proxy_balancer

编辑httpd配置文件,首先进入httpd的主配置文件(/etc/httpd/conf/httpd.conf)把中心主机禁掉(这一行注释掉DocumentRoot "/var/www/html"),而后在/etc/httpd/conf.d/目录下,建立一个vhosts.conf文件,内容以下:

<proxy balancer://lbcluster1>

  BalancerMemberhttp://172.16.249.115:8080 loadfactor=1 route=TomcatA

  BalancerMemberhttp://172.16.249.112:8080 loadfactor=1 route=TomcatB

</proxy>

<VirtualHost *:80>

    ServerName centos7

    ProxyVia On

    ProxyRequests Off

    ProxyPreserveHost On

    <Proxy *>

        Require all granted

    </Proxy>

    ProxyPass /balancer://lbcluster1/

    ProxyPa***everse /balancer://lbcluster1/

    <Location />

        Require all granted

    </Location>

</VirtualHost>

wKiom1Y4lSKwOTauAAFOoc7l8ys937.jpg

而后使用httpd  -t 检查语法,而后打开httpd服务

wKioL1Y4lXjQnJp6AABV4cWi37M106.jpg

 

须要修改后端tomcat的配置文件(/etc/tomcat/server.xml

172.16.249.115上的改成:

wKiom1Y4lYnxu9WmAABCyewGLDY011.jpg

172.16.249.112上的改成:

wKiom1Y4laODQsyIAABSFrXhFXM210.jpg

为了演示效果修改测试页面:

TomcatA上(/data/webapps/ROOT/index.jsp)提供以下页面

<%@ page language="java" %>

<html>

 <head><title>TomcatA</title></head>

  <body>

    <h1><fontcolor="red">TomcatA.magedu.com</font></h1>

    <tablealign="centre" border="1">

      <tr>

        <td>SessionID</td>

    <%session.setAttribute("magedu.com","magedu.com"); %>

        <td><%=session.getId() %></td>

      </tr>

      <tr>

        <td>Createdon</td>

        <td><%=session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>

 

 

TomcatB上(/data/webapps/ROOT/index.jsp)提供以下页面

<%@ page language="java" %>

<html>

 <head><title>TomcatB</title></head>

  <body>

    <h1><fontcolor="blue">TomcatB.magedu.com</font></h1>

    <tablealign="centre" border="1">

      <tr>

        <td>SessionID</td>

    <%session.setAttribute("magedu.com","magedu.com"); %>

        <td><%=session.getId() %></td>

      </tr>

      <tr>

        <td>Createdon</td>

        <td><%=session.getCreationTime() %></td>

     </tr>

    </table>

  </body>

</html>

而后后端tomcat重启(systemctlrestart tomcat.service

 

而后访问测试:

wKioL1Y4ljmyI8blAAC0Er4cS9Q572.jpg

wKiom1Y4lfvT7ks5AADG_9ukZF8454.jpg

能够看到能负载均衡了,但每一次刷新后session  ID都不同

 

下面作会话绑定(sessionsticky),

修改vhosts.conf文件:

wKioL1Y4llOBLuGIAAEX31YxJM8634.jpg

而后检查语法,重载httpd服务,而后测试下

wKiom1Y4liXyhmJoAADNWM4rrE8427.jpg

而后不管怎样刷新,都不会变了,这样会话绑定(session sticky)就作好了

  (b) mod_proxymod_proxy_ajpmod_proxy_balancer

首先把vhosts.conf 重命名为vhosts.httpd.conf.bak,而后复制vhosts.httpd.conf.bakvhosts.ajp.conf,而后修改vhosts.ajp.conf配置文件:

wKioL1Y4lnywHPLhAAG4ierXVrk180.jpg

而后保存退出,检查语法,重启httpd服务,进行测试

wKioL1Y4lqShY8o_AADEP34qo3M462.jpg

wKiom1Y4lmfhfFWHAACzOqQ4Qlc620.jpg

而后作会话绑定(sessionsticky

只须要在里面加入下面一行

wKioL1Y4lrLykUQXAADDXr8FX7w965.jpg

而后重载服务,进行测试

wKiom1Y4ln6wzI1ZAADC9mH45C4605.jpg

而后刷新页面就不会变了


(c) mod_jk

mod_jkASF的一个项目,是一个工做于apache端基于AJP协议与Tomcat通讯的链接器,它是apache的一个模块,是AJP协议的客户端(服务端是TomcatAJP链接器)。

要使用这个模块,须要编译这个模块,还要安装httpd的开发包,httpd-devel  gcc glibc-devel yum -y installhttpd-devel gcc glibc-devel),安装开发包组,首先yum grouplist,而后在可用组里找到“开发工具”,而后安装(yum groupinstall "开发工具"),若是已经安装过就不用安装了

下载tomcat-connectors-1.2.40-src.tar.gz

而后解压,编译安装,使用whichapxs,由于编译安装时必须指apxs的安装路径

wKiom1Y4lvyQhdpjAAGDhyl60pQ535.jpg

回车,编译,而后make  && make  install

wKiom1Y4lxzy7uvjAAFvXX3qUCY187.jpg

wKioL1Y4l1nxoHSiAAHGSwClNio565.jpg

看到这个模块生成就能够了

而后在/etc/httpd/conf.d/目录下,建立一个mod_jk.conf的文件,编辑内容以下:

wKiom1Y4lzehwPZXAACV26tzNMk202.jpg

而后在/etc/httpd/conf.d/目录下,建立一个workers.properties文件,编辑内容以下:

wKioL1Y4l3XCVfDsAAEfdILWX_8028.jpg

而后保存,检查语法,重启httpd服务,而后测试

wKiom1Y4l2Lir4BcAADIeK0GUw4867.jpg

wKioL1Y4l5_QDqSqAADLOfjzN_I031.jpg

这样负载均衡就作好了,

而后作作会话绑定(sessionsticky),须要修改workers.properties文件

wKiom1Y4l3DACIPjAAB1G5NuzGo781.jpg

而后重启服务,进行测试

wKioL1Y4l7vQai2TAADAJOxfgV4456.jpg

而后怎样刷新都不会改变了,这样会话绑定就作好了


示例:构建session  cluster,实现不论基于什么调度算法,会话的信息再也不变化,即sessionID再也不变化,

tomcat中自带会话管理器(session  manager

    StandardManager:标准会话管理器

    PersistentManager:持久会话管理器

        FileStore

        JDBC

           DeltaManager

         BackupManager

前端(172.16.249.159)使用的为http协议作反代的(2(a)这个示例),


构建步骤:

(1)    tomcat节点配置使用deltamaanager:在<Engine><Host>字段中,加入下面内容

咱们在本身定义的Host中复制下面这些内容到tomcat配置文件中,(这些内容在http://tomcat.apache.org/tomcat-8.0-doc/cluster-howto.html中)

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

    channelSendOptions="8"> 

<ManagerclassName="org.apache.catalina.ha.session.DeltaManager"

    expireSessionsOnShutdown="false"

    notifyListenersOnReplication="true"/>

 <ChannelclassName="org.apache.catalina.tribes.group.GroupChannel">           <MembershipclassName="org.apache.catalina.tribes.membership.McastService"

    address="228.0.1.7"

    port="45564"

    frequency="500"

    dropTime="3000"/>           <ReceiverclassName="org.apache.catalina.tribes.transport.nio.NioReceiver"

    address="auto"

    port="4000"

    autoBind="100"

    selectorTimeout="5000"

    maxThreads="6"/>         <SenderclassName="org.apache.catalina.tribes.transport.ReplicationTransmitter">             <TransportclassName="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>

            </Sender>            <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>          <InterceptorclassName="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>

          </Channel>

        <ValveclassName="org.apache.catalina.ha.tcp.ReplicationValve"

                 filter=""/>       <ValveclassName="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<DeployerclassName="org.apache.catalina.ha.deploy.FarmWarDeployer"

    tempDir="/tmp/war-temp/"

    deployDir="/tmp/war-deploy/"

    watchDir="/tmp/war-listen/"

    watchEnabled="false"/>

<ClusterListenerclassName="org.apache.catalina.ha.session.ClusterSessionListener"/>

    </Cluster>

停掉tomcat服务,而后复制上面内容,修改以下,

wKiom1Y4mH_hzX_UAAOhyDW2tFA719.jpg

另外一个节点一样停掉tomcat服务,复制上面内容,并修改下

wKioL1Y4mMWTb-bSAAOUGmQ-UDc307.jpg

   (2) 为须要使用session clusterwebapps开启sessiondistribution的功能:

       WEB-INF/web.xml中添加

            <distributable/>

     复制/etc/tomcat/目录下的web.xml/data/webapps/ROOT/WEB-INF/目录下,而后修改web.xml,在最后这个</web-app>前加入<distributable/>,另外一个节点作一样的操做

wKiom1Y4mLTSczKpAACN_DG4kCY994.jpg

复制这个文件到另外一个节点上

scp  /data/webapps/ROOT/WEB-INF/web.xml172.16.249.112:/data/webapps/ROOT/WEB-INF/

而后启动tomcat

访问测试

wKioL1Y4mQ2TyuLYAADRUjuDZHk185.jpg

wKiom1Y4mNDT6iUSAACw9i8Bf4g505.jpg

能够看到Session  ID没有变,能够看到作成功了

这样session  cluster就作好了

 

而后修改前端(172.16.249.159)的,修改代理的模式,使用ajpmod_jk模式,均可以实现,会话绑定,前端使用nginx作代理,也能够实现会话绑定,这里就再也不演示了(注意:使用其余模式时,记得把刚作的会话绑定要去掉)

由于这是tomcatsession  cluster 跟前端的负载均衡器没有关系,

 

   示例:构建session  server


须要使用memcached,下面介绍下memcache的一些知识

    memcached的特色:

       协议简单

       基于libevent事件处理

       基于内存完成数据存储:LRU

       memcached互不通讯的集群:分布式

首先要安装memcachedyum installmemcached

经过配置/etc/sysconfig/memcached这个文件,来对memcached传递一些参数,若是要编辑memcached的一些特性,就须要编辑这个文件(/etc/sysconfig/memcached

直接启动(systemctl startmemcached.service)就能够了,监听在tcpudp11211端口上

wKiom1Y4mWHiQMm-AALnDSvkFqI075.jpg

memcached是旁挂式缓存:

    一半在客户端;一半在服务端

wKioL1Y4mbWhn6-jAAET4Ptr_00898.jpg

memcached在内存中的存储方式:

slab allocation机制:整理内存以进行复用

     Page: 分配给slab用于再次分割为chunk的内存空间;

     chunk:用于缓存缓存对象的空间;

slab class:特定大小的chunk组合而成的组;

  memcached还自带一个状态查看与管理工具: /usr/bin/memcached-tool,能够查看如今memcache中的状态信息

wKioL1Y4mduTuYVIAACAe6sJIpE722.jpg

这些字段的含义:

#slab class的编号;

    Item_sizeChunk大小;

    Max_age:缓存对象的生存时间;

    Pages:分配给slab内存页数;

    Countslab内的记录数;

    Full?slab内是否仍有空闲chunk


下面用实例实现让tomcat的会话信息保存在memcache中,实现session  server


memcached-session-manager项目地址:

http://code.google.com/p/memcached-session-manager/

下载以下jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的${version}要换成你所须要的版本号,tc${6,7,8}要换成与tomcat版本相同的版本号。(看本身使用的tomcat是什么版本,就下载什么版本)

         memcached-session-manager-${version}.jar

         memcached-session-manager-tc${6,7,8}-${version}.jar

         spymemcached-${version}.jar

         msm-javolution-serializer-${version}.jar

         javolution-${version}.jar

后端tomcat节点上,作以下操做:

把这些文件下载到这个目录下/usr/share/tomcat/lib/

wKiom1Y4mh2B7a0wAAIWnHmw38s213.jpg

把刚才咱们在tomcat配置文件中加入的<Cluster></Cluster>这一段里面的内容删掉,而后分别在两个tomcat上的咱们本身定义的Host上定义一个用于测试的context容器,并在其中建立一个会话管理器,以下所示:

                        <ManagerclassName="de.javakaffee.web.msm.MemcachedBackupSessionManager"              memcachedNodes="n1:172.16.249.159:11211,n2:172.16.249.112:11211"         failoverNodes="n1"

    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"

    />

 

两个节点都作这样的操做

wKioL1Y4mtvTAtCPAAHPya6oMEw736.jpg

而后还要把tomcat配置文件中的,Engine字段里的jvmRoute去掉

wKiom1Y4mrzQjaGjAAA6RwMsSds841.jpg

另外一个节点的tomcat配置文件中的,Engine字段里的jvmRoute去掉

memcachedNodes写入的是开启memcached服务的主机的地址,一个是172.16.249.159  172.16.249.112 memcached不须要作修改,直接安装而后启动就好了

而后把咱们在/data/webapps/ROOT/WEB-INF/目录中的web.xml文件删掉,两个节点

而后从新启动tomcat服务,

访问测试

wKioL1Y4mzqxQqKMAACyqbUF1Uk920.jpg

wKiom1Y4mv2CDq5_AACfIhKpsoc262.jpg

能够看到,负载均衡了,session  ID也没有变

这样使用memcachedsession  server 就作好了

相关文章
相关标签/搜索