author:JevonWei

版权声明:原创作品


Tomcat Cluster负载均衡

环境

tomcatA    172.16.253.108
tomcatB 172.16.253.105
代理服务器 172.16.253.191

Tomcat集群

Tomcat A

[root@tomcatA ~]#  yum -y install java-1.8.0-openjdk*
[root@tomcatA ~]# yum -y install tomcat-lib tomcat tomcat-webapps tomcat-docs-webapp tomcat-admin-webapps
[root@tomcatA ~]# iptables -F
[root@tomcatA ~]# setenforce 0
[root@tomcatA ~]# mkdir -pv /data/webapps/ROOT/{classes,lib,WEB-INF}
[root@tomcatA ~]# vim /etc/tomcat/server.xml
<Engine name="Catalina" defaultHost="www.jevon1.com"> \\修改默认主机为www.jevon1.com
<Host name="www.jevon1.com" appBase="/data/webapps" unpackWARs="true" autoDeploy="true" >
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="jevon_access_log" suffix=".log"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host>
[root@tomcatA ~]# vim /data/webapps/ROOT/index.jsp
<%@ page language="java" %>
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color="red">TomcatA.magedu.com</font></h1>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("magedu.com","magedu.com"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
[root@tomcatA ~]# systemctl start tomcat
[root@tomcatA ~]# ss -ntl

Tomcat B

[root@tomcatB ~]#  yum -y install java-1.8.0-openjdk*
[root@tomcatB ~]# yum -y install tomcat-lib tomcat tomcat-webapps tomcat-docs-webapp tomcat-admin-webapps
[root@TomcatB ~]# iptables -F
[root@TomcatB ~]# setenforce 0
[root@tomcatB ~]# mkdir -pv /data/webapps/ROOT/{classes,lib,WEB-INF}
[root@tomcatB ~]# vim /etc/tomcat/server.xml
<Engine name="Catalina" defaultHost="www.jevon2.com"> \\修改默认主机为www.jevon21.com
<Host name="www.jevon2.com" appBase="/data/webapps" unpackWARs="true" autoDeploy="true" >
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="jevon_access_log" suffix=".log"
pattern="%h %l %u %t &quot;%r&quot; %s %b" />
</Host> [root@TomcatB ~]# vim /data/webapps/ROOT/index.jsp
<%@ page language="java" %>
<html>
<head><title>TomcatB</title></head>
<body>
<h1><font color="blue">TomcatB.magedu.com</font></h1>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<% session.setAttribute("magedu.com","magedu.com"); %>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
[root@tomcatB ~]# systemctl start tomcat
[root@tomcatB ~]# ss -ntl

Nginx代理

代理服务器

[root@danran ~]# vim /etc/hosts
172.16.253.108 www.jevon1.com
172.16.253.105 www.jevon2.com
[root@danran ~]# yum -y install nginx
[root@danran ~]# vim /etc/nginx/nginx.conf
http {
upstream appsrvs {
server www.jevon1.com:8080;
server www.jevon2.com:8080;
}
}
server {
listen 80;
server_name www.danran.com;
index index.jsp index.html;
root /usr/share/nginx/html;
location / {
proxy_pass http://appsrvs/;
}
}
[root@danran ~]# nginx -t
[root@danran ~]# nginx start nginx

client

elinks www.danran.com



elinks www.danran.com

Haproxy代理

代理服务器

[root@danran ~]# vim /etc/hosts
172.16.253.108 www.jevon1.com
172.16.253.105 www.jevon2.com
[root@httpd ~]# yum -y install haproxy
[root@httpd ~]# vim /etc/haproxy/haproxy.cfg
frontend tomcat
bind *:80
default_backend appsrvs
backend appsrvs
balance roundrobin
server app1 www.jevon1.com:8080 check
server app2 www.jevon2.com:8080 check
listen stats
bind *:9009
stats enable
[root@httpd ~]# systemctl start haproxy
[root@httpd ~]# ss -ntl

client

elinks www.danran.com



elinks www.danran.com

http://www.danran.com:9009/haproxy?stats

Htppd代理

代理服务器

[root@httpd ~]# yum -y install httpd
[root@httpd ~]# httpd -M \\确保以下三个模块
proxy_balancer_module (shared)
proxy_module (shared)
proxy_http_module (shared)

proxy_ajp_module (shared) [root@httpd ~]# vim /etc/httpd/conf.d/tomcat-http.conf
<proxy balancer://appsrvs> \\定义balancer集群组
BalancerMember http://www.jevon1.com:8080
BalancerMember http://www.jevon2.com:8080
ProxySet lbmethod=byrequests \\调度算法byrequests为轮询;bybusyness根据繁忙程度调度,相当于least-connest;bytraffic根据流量调度
</Proxy>
<VirtualHost *:80>
ServerName www.danran.com
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://appsrvs/
ProxyPassReverse / balancer://appsrvs/
<Location />
Require all granted
</Location>
</VirtualHost>
[root@httpd ~]# httpd -t
[root@httpd ~]# systemctl start httpd

client

elinks www.danran.com



elinks www.danran.com

httpd的AJP协议代理

代理服务器

[root@httpd ~]# vim /etc/httpd/conf.d/tomcat-ajp.conf
<proxy balancer://appsrvs> \\定义balancer集群组
BalancerMember ajp://www.jevon1.com:8009 \\tomcat服务的8080端口不支持ajp协议,8009端口支持aip协议
BalancerMember ajp://www.jevon2.com:8009
ProxySet lbmethod=byrequests \\调度算法byrequests为轮询;bybusyness根据繁忙程度调度,相当于least-connest;bytraffic根据流量调度
</Proxy>
<VirtualHost *:80>
ServerName www.danran.com
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://appsrvs/
ProxyPassReverse / balancer://appsrvs/
<Location />
Require all granted
</Location>
</VirtualHost>
[root@httpd ~]# httpd -t
[root@httpd ~]# systemctl start httpd

client

elinks www.danran.com



elinks www.danran.com

实现Tomcat集群的session粘性

Tomcat A

[root@danran ~]# vim /etc/httpd/conf.d/tomcat-ajp.conf
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<proxy balancer://appsrvs>
BalancerMember ajp://www.jevon1.com:8009 route=tcA \\route=tcA为cookie标识,tcA为自定义信息
BalancerMember ajp://www.jevon2.com:8009 route=tcB
ProxySet lbmethod=byrequests
ProxySet stickysession=ROUTEID \\ROUTEID同header上设置的Sookie信息一致;
</Proxy>
<VirtualHost *:80>
ServerName www.danran.com
ProxyVia On
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Require all granted
</Proxy>
ProxyPass / balancer://appsrvs/
ProxyPassReverse / balancer://appsrvs/
<Location />
Require all granted
</Location>
</VirtualHost> balancer的状态界面
<Location /balancer-manager> 管理接口的状态界面的自定义URL
SetHandler balancer-manager 启用的内部处理器为balancer-manager,固定的
ProxyPass ! \\不反代
Require all granted \\运行某
</Location>
[root@danran ~]# httpd -t
[root@danran ~]# systemctl restart httpd

client访问www.danran.com实现会话粘性

[root@danran ~]# curl -I www.danran.com
HTTP/1.1 200 OK
Date: Sun, 03 Sep 2017 00:47:42 GMT
Server: Apache/2.4.6 (Red Hat Enterprise Linux) PHP/5.4.16
Set-Cookie: JSESSIONID=F36265B9FF2CC34C7203E41372FE4A0A; Path=/; HttpOnly
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 416
Set-Cookie: ROUTEID=.tcA; path=/

client显示balancer状态界面

http://www.danran.com/balancer-manager

Tomcat Cluster负载均衡的更多相关文章

  1. Nginx 服务器 之Nginx与tomcat实现负载均衡

      本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡. 一.nginx与tomcat实现负载均衡 1.在/usr/local/ngnix/conf  创建 ...

  2. Apache+Tomcat部署负载均衡(或集群)

    本来只打算写Tomcat集群部署,简化Apache和Tomcat整合过程的.后来想了想,这样不便于没有用过Apache的朋友来学习本文内容.于是干脆加大篇幅,让对Apache不了解的朋友能对Apach ...

  3. 利用httpd对tomcat进行负载均衡配置

    实验系统:CentOS 6.6_x86_64 实验前提:提前准备好编译环境,防火墙和selinux都关闭 实验说明:本实验共有2台主机,IP分配如拓扑 实验软件:jdk-8u60-linux-x64 ...

  4. Nginx+Tomcat+Memcached负载均衡集群服务搭建

    操作系统:CentOS6.5  本文档主要讲解,如何在CentOS6.5下搭建Nginx+Tomcat+Memcached负载均衡集群服务器,Nginx负责负载均衡,Tomcat负责实际服务,Memc ...

  5. nginx+tomcat+redis负载均衡及session共享

    概述 本文档是用来详细描述 nginx+tomcat+redis负载均衡实现session共享 所需软件及下载地址 软件名称 下载地址 功能说明 Nginx-v1.6.0 http://nginx.o ...

  6. Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群

    Tomcat集群,Nginx集群,Tomcat+Nginx 负载均衡配置,Tomcat+Nginx集群 >>>>>>>>>>>> ...

  7. Tomcat(五):nginx/httpd + tomcat及负载均衡tomcat

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  8. Linux 下配置 nginx + 两个 tomcat 的负载均衡

    前提:已经安装了 nginx 和两个 tomcat 1.修改 nginx.conf 配置文件    1)在 http{} 节点之间添加 upstream 配置 2)修改 nginx 的监听端口,默认是 ...

  9. 使用 Nginx + Tomcat 搭建负载均衡

    负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. 负载均衡,英文名称为Load Balance, ...

随机推荐

  1. .NET Core 成都线下面基会拉开序幕

    2017年07月29日下午,由 .NET China Foundation 成都小组组织的 .NET Core 成都地区线下技术交流会在成都成华区某茶楼成功举行,这也是成都地区 .NET Core 非 ...

  2. Unity Shader入门精要读书笔记(一)序章

    本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...

  3. Angular4.0从入门到实战打造在线竞拍网站学习笔记之三--依赖注入

    Angular4.0基础知识之组件 Angular4.0基础知识之路由 依赖注入(Dependency Injection) 正常情况下,我们写的代码应该是这样子的: let product = ne ...

  4. Scrapy提取多个标签的text

    对于要提取嵌套标签所有内容的情况, 使用string或//text(), 注意两者区别 >>> from scrapy import Selector >>> &g ...

  5. 快慢指针实现不依赖计数器寻找中位数(linked list)

    该方法在不借助计数器变量实现寻找中位数的功能.原理是:快指针的移动速度是慢指针移动速度的2倍,因此当快指针到达链表尾时,慢指针到达中点.程序还要考虑链表结点个数的奇偶数因素,当快指针移动x次后到达表尾 ...

  6. Linux常用脚本命令总结

    基本操作 通用操作 1. export 显示所有的环境变量,也可以获取到某个变量的详细信息: export # 显示所有 echo $SHELL # 只显示SHELL 2. whereis 使用系统自 ...

  7. Lettuce_webdriver 自动化测试

    这篇文章主要讲解以下几点: 1. Lettuce_webdriver环境搭建 2. lettuce_webdriver自动化实例讲解 一. lettuce_webdriver环境搭建 搭建lettuc ...

  8. NYOJ 252 01串(斐波那契数列变形)

    01串 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个, ...

  9. NYOJ 67 三角形面积(线代,数学)

    三角形面积 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 给你三个点,表示一个三角形的三个顶点,现你的任务是求出该三角形的面积   输入 每行是一组测试数据,有6个 ...

  10. JavaScript闭包,只学这篇就够了

    # 闭包不是魔法 这篇文章使用一些简单的代码例子来解释JavaScript闭包的概念,即使新手也可以轻松参透闭包的含义. 其实只要理解了核心概念,闭包并不是那么的难于理解.但是,网上充斥了太多学术性的 ...