35.2tomat及会话保持

tomcat

cos17和cos27主机当tomcat服务器,且同时在对应的cos17和cos27安装ningx做代理,这样tomcat就可以隐藏起来了

[root@cos17 ~ ]#yum install java-1.8.0-openjdk-devel tomcat tomcat-admin-webapps tomcat-webapps nginx -y
[root@cos17 ~ ]#mkdir myapp/{classes,lib,WEB-INF,META-INF} -p
[root@cos17 ~ ]#vim myapp/index.jsp

<%@ page language="java" %>
<html>
  <head><title>TomcatA</title></head>
  <body>
    <h1><font color="red">TomcatA.dhy.com</font></h1>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
    <% session.setAttribute("dhy.com","dhy.com"); %>                                                        
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
[root@cos17 ~ ]#cp -r myapp /usr/share/tomcat/webapps/
[root@cos17 ~ ]#systemctl start tomcat

[root@cos27 ~ ]#
同cos17

浏览器输入http://192.168.31.27:8080/myapp/ 可以访问tomcat

[root@cos17 ~ ]#vim /etc/nginx/nginx.conf
 server {
        index index.jsp index.html
        location / {
         proxy_pass http://127.0.0.1:8080/;  

[root@cos17 ~ ]#scp /etc/nginx/nginx.conf 192.168.31.27:/etc/nginx/

[root@cos17 ~ ]#tail -f /var/log/nginx/error.log 
2018/09/09 10:03:57 [crit] 6766#0: *1 connect() to 127.0.0.1:8080 failed (13: Permission denied) while connecting to upstream, client: 192.168.31.1, server: _, request: "GET /poweredby.png HTTP/1.1", upstream: "http://127.0.0.1:8080/myapppoweredby.png", host: "192.168.31.17", referrer: "http://192.168.31.17/"
当启用nginx做代理时,若遇到502 bad gateway报错,请关闭selinux

如图1,图2
这里写图片描述
这里写图片描述

====================================

[root@cos7 ~ ]#yum install nginx -y
[root@cos7 ~ ]#vim /etc/nginx/nginx.conf
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    upstream tcsrvs {
       server 192.168.31.17:80 weight=1;
       server 192.168.31.27:80 weight=2;

        include /etc/nginx/default.d/*.conf;

        location / {
          proxy_pass http://tcsrvs;
        }
[root@cos7 ~ ]#systemctl startnginx
浏览器做代理,实现负载均衡http://192.168.31.7/myapp/

或者用http做代理,实现负载均衡及session cookie

[root@cos7 ~ ]#systemctl stop nginx
[root@cos7 ~ ]#yum install httpd
[root@cos7 ~ ]#httpd -M | grep lb
 lbmethod_bybusyness_module (shared)   #lc
 lbmethod_byrequests_module (shared)   #roundrobin
 lbmethod_bytraffic_module (shared)    #基于链路流量控制

[root@cos7 ~ ]#vim /etc/httpd/conf.d/nginx.conf
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED          #会话绑定
<proxy balancer://tcsrvs>
    BalancerMember http://192.168.31.17:8080 route=TomcatA loadfactor=1
    BalancerMember http://192.168.31.27:8080 route=TomcatB loadfactor=2
    ProxySet lbmethod=byrequests
    ProxySet stickysession=ROUTEID    #会话绑定

</Proxy>

    <VirtualHost *:80>
        ServerName lb.dhy.com
        ProxyVia On
        ProxyRequests Off
        ProxyPreserveHost On
        <Proxy *>
                Require all granted
        </Proxy>
        ProxyPass / balancer://tcsrvs/
        ProxyPassReverse / balancer://tcsrvs/
        <Location />
            Require all granted
        </Location>

        <Location /dhy-manager>     #负载均衡器管理界面,如图4
        SetHandler balancer-manager
        ProxyPass !
        Require all granted
        </Location>

    </VirtualHost>  

[root@cos7 ~ ]#httpd  -t
Syntax OK
[root@cos7 ~ ]#systemctl start httpd

[root@cos27 ~ ]#vim /etc/tomcat/server.xml
 <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatB-engince"> 

图3
后端cos17和cos27用nignx作本地代理,如果卸载nginx,用httpd负载均衡的cos7和后端tomcat直接通信,可以把负载均衡的cos7主机上http协议改为ajp协议,而tomcat支持ajp协议

cookie是根据主机标识找到上次访问的的一个主机,以便用户访问的服务器信息后不会丢失,但当这个主机宕机,则又引起单点失败,可以用tomcat集群
这里写图片描述
这里写图片描述

==============================================

session replication

session replication clustertomcat集群
删除cos7上的session cookie配置

[root@cos17 ~ ]#yum install tomcat-docs-webapp.noarch -y
浏览器输入:http://192.168.31.17:8080/docs/

http://192.168.31.17:8080/docs/cluster-howto.html

[root@cos17 ~ ]#vim /etc/tomcat/server.xml 
[root@cos27 ~ ]#vim /etc/tomcat/server.xml 
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                 channelSendOptions="8">

          <Manager className="org.apache.catalina.ha.session.DeltaManager"
                   expireSessionsOnShutdown="false"
                   notifyListenersOnReplication="true"/>

          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership className="org.apache.catalina.tribes.membership.McastService"
                        address="228.0.0.4"
                        port="45564"
                        frequency="500"
                        dropTime="3000"/>
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                      address="auto"
                      port="4000"
                      autoBind="100"
                      selectorTimeout="5000"
                      maxThreads="6"/>
            #maxThreads集群个数减1
            <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
              <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
            </Sender>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
          </Channel>

          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                 filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

          <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                    tempDir="/tmp/war-temp/"
                    deployDir="/tmp/war-deploy/"
                    watchDir="/tmp/war-listen/"
                    watchEnabled="false"/>
        #文档没有闭合标签
          <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>

[root@cos17 ~ ]#cp -r /etc/tomcat/web.xml /usr/share/tomcat/webapps/myapp/WEB-INF/


[root@cos17 ~ ]#vim /usr/share/tomcat/webapps/myapp/WEB-INF/web.xml 
  <!--         listings is enabled? [true]       -->
   <distributable/>      
  #添加distributable,作为会话集权到myapp一个实例中

[root@cos17 ~ ]#tail -100 /var/log/tomcat/catalina.
catalina.2018-09-09.log  catalina.out  

[root@cos27 ~ ]#systemctl restart tomcat
[root@cos17 ~ ]#systemctl restart tomcat

#可以看到日志中,会话已经加入
浏览器刷新,不回再改变

此session replication中tomcat的数量不宜过多,太多,组播发送的数据占用太多局域网带宽
可以用session server中的memcached

============================

session server之memcached

memcached  保存在内存,断电即丢失
redis      #持久化保存,内存中运行,定期同步到磁盘

MSM:memcached session manager
把会话从tomcat剥离出来到memcached,memcached当tomcat的客户端,memchaced用java编写,java是面向对象的,数据是有结构的,放到磁盘,则数据要0,1存储,被流式化,从磁盘取出来到内存,要流式化,再把数据还原为有结构的数据到内存,要借助工具;数据从memcached内存取出来经过网络到达tomcat,需要工具转换数据格式,工具一般都是采用加标签,如xml,json,JSON格式的YAML文件(YAML Ain’t Markup Language),3者一个一个轻量

memcached作为session server使用配置

分布式算法:一致性hash算法

memcached的特征
  memcached作为高速运行的分布式缓存服务器,具有以下的特点。
• 协议简单
• 基于libevent的事件处理
• 内置内存存储方式
• memcached不互相通信的分布式

旁路式缓存系统
请参见memcahced.pfd文档
m e m c a c h e d

[root@cos17 ~ ]#yum info memcached
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Available Packages
Name        : memcached
Arch        : x86_64
Version     : 1.4.15
Release     : 10.el7_3.1
Size        : 85 k
Repo        : base
Summary     : High Performance, Distributed Memory Object Cache
URL         : http://www.memcached.org/
License     : BSD
Description : memcached is a high-performance, distributed memory object caching
            : system, generic in nature, but intended for use in speeding up dynamic
            : web applications by alleviating database load.
[root@cos17 ~ ]#yum install memcached -y

[root@cos17 ~ ]#yum info libmemcached
#工具,c++库
[root@cos17 ~ ]#yum install libmemcached -y

如果安装了libmemcached这个面向C/C++语言的客户端库,就会安装memstat这个命令

[root@cos17 ~ ]#yum list all |grep memcached
memcached.x86_64                        1.4.15-10.el7_3.1              @base    
libmemcached.i686                       1.0.16-5.el7                   base     
libmemcached.x86_64                     1.0.16-5.el7                   base     
libmemcached-devel.i686                 1.0.16-5.el7                   base     
libmemcached-devel.x86_64               1.0.16-5.el7                   base     
memcached-devel.i686                    1.4.15-10.el7_3.1              base     
memcached-devel.x86_64                  1.4.15-10.el7_3.1              base     
opensips-memcached.x86_64               1.10.5-3.el7                   epel1    
php-ZendFramework-Cache-Backend-Libmemcached.noarch
php-pecl-memcached.x86_64               2.2.0-1.el7                    epel     
python-memcached.noarch                 1.48-4.el7                     base     
uwsgi-router-memcached.x86_64           2.0.16-1.el7                   epel1
[root@cos17 ~ ]#memcached -h
memcached 1.4.15
-p <num>      TCP port number to listen on (default: 11211)
-U <num>      UDP port number to listen on (default: 11211, 0 is off)
-m <num>      max memory to use for items in megabytes (default: 64 MB)

-f <factor>   chunk size growth factor (default: 1.25)
-S            Turn on Sasl authentication

simple authentication secure layer,框架,为不支持认证框架的程序提供简单的认证,如smtp协议

m e m c a c h e d

[root@cos17 ~ ]#cat /usr/lib/systemd/system/memcached.service
[Unit]
Description=Memcached 
Before=httpd.service
After=network.target

[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/memcached
ExecStart=/usr/bin/memcached -u $USER -p $PORT -m $CACHESIZE -c $MAXCONN $OPTIONS

[Install]
WantedBy=multi-user.target

m e m c a c h e d

[root@cos17 ~ ]#vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="10240"                                                                                             
CACHESIZE="256"
OPTIONS="-f 1.5"
[root@cos17 ~ ]#systemctl start memcached
[root@cos17 ~ ]#ps aux
memcach+   2639  0.0  0.1 344080  1688 ?        Ssl  15:03   0:00 /usr/bin/memcached -u memcached -p 11211 -

[root@cos17 ~ ]#cat /proc/2639/cmdline
/usr/bin/memcached-umemcached-p11211-m256-c10240-f1.5

[root@cos17 ~ ]#rpm -ql libmemcached
[root@cos17 ~ ]#memping -h    
[root@cos17 ~ ]#memping --servers='127.0.0.1:11211'
[root@cos17 ~ ]#less /usr/share/doc/memcached-1.4.15/protocol.txt

$ telnet localhost 11211
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
set foo 0 0 3 (保存命令)
bar      (数据)
STORED    (结果)
get foo     (取得命令)
VALUE foo 0 3 (数据)
bar       (数据)

[root@cos17 ~ ]#telnet 192.168.31.17 11211
Trying 192.168.31.17...
Connected to 192.168.31.17.
Escape character is '^]'.
stats

add mykey 0 600 9  #关键字key,600秒过期,字节大小
dhy.com

STORED
incr mykey 10
delete mykey
flush               #清空

猜你喜欢

转载自blog.csdn.net/csdn_immortal/article/details/82561711