2017 11-02 tomcat 应用

一.实现nginx与tomcat的反向代理负载均衡的应用

实验原理图:
2017 11-02 tomcat 应用_第1张图片
搜狗截图20171106231142.png

实验环境准备:一个客户端主机,一个调度器(反向代理服务器),两个tomcat后端服务器
实验步骤:
1.两个后端服务器Yum安装 tomcat tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp
并yum install java-1.8.0-openjdk-devel.x86_64
在代理服务器上安装httpd和nginx
2.在后端服务器上创建目录
mkdir -pv /usr/share/tomcat/webapps/myapp/WEB-INF
编辑 index.jsp vim -pv /usr/share/tomcat/webapps/myapp/index.jsp

      <%@ page language="java" %>
  2  
  3   TomcatA
  4   
  5     

TomcatA.magedu.com

6 7 8 9 <% session.setAttribute("magedu.com","magedu.com"); %> 10 11 12 13 14 15 16
Session ID<%= session.getId() %>
Created on<%= session.getCreationTime() %>
17 18

在另一主机上做相同操作,只需要将"red"改为blue做区分即可
在网页上测试: 172.18.254.242/myapp和172.18.254.31/myapp


2017 11-02 tomcat 应用_第2张图片
搜狗截图20171106220419.png

2017 11-02 tomcat 应用_第3张图片
搜狗截图20171107143334.png

可以看出不同的效果,证明编辑成功
3.设置nginx服务器
vim /etc/nginx/nginx.conf

upstream tcsrvs {
     server 192.168.136.134:8080;
     server 192.168.136.170:8080;
}
        location / {
         proxy_pass http://tcsrvs;
}

配置好后重启nginx服务
在网页客户端进行测试 172.18.25.62/myapp
通过结果显示代理成功


2017 11-02 tomcat 应用_第4张图片
搜狗截图20171106221356.png

(4)在虚拟机客户端使用curl命令来显示是否均衡调度

for i in {1..10};do curl -s 172.18.25.62/myapp/index.jsp |grep -i tomcat ;done
  TomcatA
    

TomcatA.magedu.com

TomcatA

TomcatA.magedu.com

TomcatA

TomcatA.magedu.com

TomcatA

TomcatA.magedu.com

TomcatA

TomcatA.magedu.com

TomcatA

TomcatA.magedu.com

TomcatA

TomcatA.magedu.com

TomcatA

TomcatA.magedu.com

TomcatA

TomcatA.magedu.com

TomcatA

TomcatA.magedu.com

显示结果为均衡调度
(5)使用httpd来实现调度
关掉nginx服务器,打开httpd
vim /etc/httpd/conf.d/host-tomcat.conf


    BalancerMember http://172.18.254.242:8080
    BalancerMember http://172.18.254.31:8080
    ProxySet lbmethod=byrequests——相当于轮询调度算法,如果后端tomcat服务器有权重会按权重来进行调度
 

                                
                                        ServerName www.magedu.com
                                        ProxyVia On
                                        ProxyRequests Off——关闭正向代理
                                        ProxyPreserveHost On
                                        
                                                Require all granted——授权
                                        
                                        ProxyPass / balancer://tcsrvs/——代理服务器地址
                                        ProxyPassReverse / balancer://tcsrvs/
                                        
                                                Require all granted ——授权
                                        
                                

经过测试,httpd代理也成功
(6)扩展,实现权重的调度
BalancerMember http://172.18.254.242:8080 loadfactor=1
BalancerMember http://172.18.254.31:8080 loadfactor=3
在客户端测试,实现3:1的调度
(7)健康性检查
将tomcat后端服务器关闭一个,再到客户端进行测试结果不会再往故障的tomcat服务器上进行调度
或者在host-tomcat.conf上
BalancerMember http://172.18.254.242:8080 status=D
BalancerMember http://172.18.254.31:8080
这样就将242主机关闭,此时只会往31的服务器上进行调度
也可以设置为
BalancerMember http://172.18.254.242:8080 status=H 设置为备用,只有当31主机不可用时,该主机才会上线进行工作
BalancerMember http://172.18.254.31:8080
(7)使用ajp协议来调度
BalancerMember ajp://172.18.254.242:8009
BalancerMember ajp://172.18.254.31:8009
实现相同的调度,只需要将端口和协议名称改变即可
(8)启用内键管理器

SetHandler balancer-manager——启用内键的管理器
ProxyPass !——不会往后端调度而是自己进行管理
Require all granted——在实际应用中不可以这样授权,应该设置管理登录来实现

二.session回话保持的实现

三种保持方法:
(1)session sticky
source_ip
nginx: ip_hash
haproxy: source
lvs: sh
cookie:
nginx:hash
haproxy: cookie
(2) session cluster:delta session manager
(3) session server:redis(store), memcached(cache)

1.首先实现session sticky绑定的实现

在nginx或是apache服务器上进行设置
vim /etc/httpd/conf.d/http.tomcat.conf

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED——加入的请求的报文首部
                                   
                                        BalancerMember http://172.18.254.242:8080  loadfactor=1 route=tcA——一定要加这个标识符,否则无法实现绑定的目的
                                        BalancerMember http://172.18.254.31:8080   loadfactor=1 route=tcB——同上
                                        ProxySet lbmethod=byrequests
                                        ProxySet stickysession=ROUTEID——新加入的内容,routeid进行会话绑定
                                      

                                
                                        ServerName www.magedu.com
                                        ProxyVia On
                                        ProxyRequests Off
                                        ProxyPreserveHost On

                                       
                                                Require all granted
                                        
                                        ProxyPass / balancer://tcsrvs/
                                        ProxyPassReverse / balancer://tcsrvs/
                                        
                                                Require all granted
                                        
                                

在后端tomcat服务器上vim /etc/tomcat/server.xml
在此加入jvmRoute="tcA"
同理在另一个后端服务器上做相同操作
配置完成后在网页上进行测试查看效果
显示结果是只要第一次选中了一个后端tomcat服务器,那么只要是同一个客户端发来的相同的请求就会往同一地址调度

2实现session cluster服务

步骤:此时在调度服务器上只需要将header和 ProxySet stickysession=ROUTEID注释掉即可
在tomcat服务器上
vim /etc/tomcat/server.xml

 
133 
134           
137 
138           
139             
144             
150 
151             
152               
153             
154             
155          
156           
157 
158           
160           
                 
167 
168           ——注意在官方文档上没有后面的“/”符号,在设置时一定要加上,否则无法启动tomcat
169           ——同上
170         

在另一个服务器上做相同操作,只需要将ip地址改为172.18.254.31即可
其次要设置 cp /etc/tomcat/web/xml /usr/share/tomcat/webapps/myapp/下
然后vim web.xml加入 实现集群会话
另一个主机同上操作
最后在网页上进行测试
结果是,进行多次访问时,虽然调度到不同的主机上,但是sessionID不发生变化


2017 11-02 tomcat 应用_第5张图片
搜狗截图20171107122743.png

2017 11-02 tomcat 应用_第6张图片
搜狗截图20171107122916.png

如图所示,sessionID未发生改变
注意细节:要同步各主机的时间,否则会影响实验结果
用nginx 和ajp协议访问结果相同

三.session server的实现
session server得实现方法:
(1)memcached
(2)redis
(3)couchbase
首先实现基于memcached的方法来实现
1.memcached的介绍
memcached是高性能、分布式的内存对象缓存系统
缓存服务器特点:
缓存:cache,无持久存储功能;
bypass缓存,依赖于客户端的智能;
k/v cache,仅支持存储可流式化数据;
k/v cache:仅可存储可序列化数据;存储项:k/v;
智能性一半依赖于客户端(调用memcached的API开发程序),一半依赖于服务端;
分布式缓存:互不通信的分布式集群;
分布式系统请求路由方法:取模法,一致性哈希算法;
算法复杂度:O(1)
清理过期缓存项:
缓存耗尽:LRU
缓存项过期:惰性清理机制
2.memcached的下载安装
yum install memcache


2017 11-02 tomcat 应用_第7张图片
搜狗截图20171107171412.png

下载成功后直接开启服务systemctl start memcached
ss -ntlu 监听端口为11211
3.协议格式:memcached协议
支持 文本格式和二进制格式,如果没有文本格式就yum install libmemcached来支持二进制的格式
vim /usr/share/doc/memcached-1.4.15/protocol.txt来查看memcached使用的文档协议


2017 11-02 tomcat 应用_第8张图片
搜狗截图20171107172113.png

使用telnet命令来演示
2017 11-02 tomcat 应用_第9张图片
搜狗截图20171107173250.png

2017 11-02 tomcat 应用_第10张图片
搜狗截图20171107173747.png

4.memcached程序的常用选项:
        -m :Use  MB memory max to use for object storage; the default is 64 megabytes.
            -c :Use  max simultaneous connections; the default is 1024.
            -u :以指定的用户身份来运行进程;
            -l :监听的IP地址,默认为本机所有地址;
            -p :监听的TCP端口, the default is port 11211.
            -U :Listen on UDP port , the default is port 11211, 0 is off.
            -M:内存耗尽时,不执行LRU清理缓存,而是拒绝存入新的缓存项,直到有多余的空间可用时为止;
            -f :增长因子;默认是1.25;
            -t :启动的用于响应用户请求的线程数;
            
        memcached默认没有认证机制,可借用于SASL进行认证;
            SASL:Simple Authentication Secure Layer
            
        API:
            php-pecl-memcache
            php-pecl-memcached
            python-memcached
            libmemcached
            libmemcached-devel

5.启动memcached后,实现session server的配置
(1)在实际应用中,tomcat无法直接将缓存存放到memcached中,需要借助第三方的工具来实现,因此我们需要进入www.github.com

2017 11-02 tomcat 应用_第11张图片
搜狗截图20171107174901.png

2017 11-02 tomcat 应用_第12张图片
搜狗截图20171107175051.png

2017 11-02 tomcat 应用_第13张图片
搜狗截图20171107175132.png

2017 11-02 tomcat 应用_第14张图片
搜狗截图20171107175726.png

2017 11-02 tomcat 应用_第15张图片
搜狗截图20171107175827.png

(2)了解过后开始进行配置
在虚拟机上vim /etc/tomcat/server.xml



  
  

复制该文件到172.18.254.31 另一个jvmRoute="tcB"
(3)mkdir kryo
下载相关文件


搜狗截图20171107210707.png

另一台主机也下载相同配置文件
重启服务后,在客户端测试查看结果


2017 11-02 tomcat 应用_第16张图片
搜狗截图20171107213022.png
2017 11-02 tomcat 应用_第17张图片
搜狗截图20171107213044.png

你可能感兴趣的:(2017 11-02 tomcat 应用)