linux下一個apache+tomcat負載均衡和集群

先說一下我的環境

一個ubuntu虛擬機,

一個apache2.2示例

兩tomcat1.7示例


1.安裝apacheserver

sudo apt-get install apache2
假設要重新啟動的話,執行命令:

sudo /etc/init.d/apache2 restart

ubuntu下的apache會默認創建路徑/var/www,apache默認載入的時候,就是載入的這個路徑以下的

2.安裝兩個tomcat實例

去官網下載一個

然后在本地在cp一下,

此時文件夾結構為:

/home/hehe/my/soft/tomcat1,

/home/hehe/my/soft/tomcat2

3.安裝mod_jk

mod_jk實質上是Apache與Tomcat的連接器,并藉此附帶提供集群和負載均衡的功能。

地址為http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.31/x86_64/,注意要于你安裝的apache的版本號相應。

4.配置apache

? ? ubuntu默認會將apache的安裝文件放在/etc/apache2以下

進入這個文件夾之后,新建一個httpd.conf文件

放心apache啟動時,會載入這個文件的

然后編譯這個文件。加上這么句話

ServerName localhost:80include mod_jk.conf
? ? ? ? ?

然后我們在當前路徑下新建一個mod_jk.conf文件

這里先要將mod_jk-1.2.31-httpd-2.2.x.so放在當前路徑下

#load module mod_jk-1.2.31-httpd-2.2.3.so is for Apache 2.2.x.  
LoadModule jk_module /usr/lib/apache2/modules/mod_jk-1.2.31-httpd-2.2.x.so#這個是用來配置負載的
JkWorkersFile workers.properties
#這個是打印日志
JkLogLevel debug
#這個是日志的名稱
JkLogFile mod_jk.log
#打印的級別
JkLogLevel warn

所以在當前路徑下咱們還得新建一個 mod_jk.log,文件。這里面會記錄日志

接下來配置workers.properties文件

在當前路徑下新建一個workers.properties文件

#負載均衡器
worker.list=LB_worker,worker_1,worker_2,jkstatus  #第一個tomcat的配置
worker.worker_1.host=localhost #tomcat在哪個機器上面,若是別的機器。須要寫上別的機器的ip地址  
worker.worker_1.port=8009      #端口,等會在tomcat里面配置的時候要一一相應
worker.worker_1.type=ajp13     
worker.worker_1.lbfactor=1     #載入因子#第二個tomcat的配置
worker.worker_2.host=localhost  
worker.worker_2.port=9009  
worker.worker_2.type=ajp13  
worker.worker_2.lbfactor=1  #類型是一個負載均衡器
worker.LB_worker.type=lb
#重試三次
worker.LB_worker.retries=3
#負載給tomcat1和tomcat2
worker.LB_worker.balance_workers=worker_1,worker_2
#這是說session的粘性,就是說同一個session是否提交給同一個tomcat。由于等會兒,集群的時候要用到一個session提交給兩臺機器,所以設置為false
worker.LB_worker.sticky_session=false  
worker.LB_worker.sticky_session_force=false
#jk的狀態  
worker.jkstatus.type=status
5.配置請求交給負載均衡器

在/etc/apache2/sites-available下有個default文件,

在這個文件的最后一句話</VirtualHost>之前加上這么一段

JkMount /*.jsp LB_worker
JkMount /jkstatus jkstatus
然后就交給了LB_worker

6.接下來配置tomcat1

改一下conf以下的server.xml文件,改port,和上面的相應

   <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

然后找到這句話,改成這樣,注意worker_1和workers.properties相應

<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker_1">

若是集群的話,還要改一句話。把這句話的前后的凝視符號給去掉,放開

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

接下來配置tomcat2

先把以下這句話給改了,port號改為8006

<Server port="8006" shutdown="SHUTDOWN">

然后改以下這句

    <Connector port="9082" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="9443" />

改一下conf以下的server.xml文件,改port。和上面的相應

   <Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />

然后找到這句話,改成這樣。注意worker_2和workers.properties相應

<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker_2">

若是集群的話,還要改一句話,把這句話的前后的凝視符號給去掉,放開

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

7.新建一個項目mytest,里面有一個叫wel.jsp的文件,

這個jsp的內容是:

<%@ page language="java" contentType="text/html; charset=GB18030"pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<%System.out.println("this is tomcat server nod 2");
%>
<%
int i=0;while(i<3000){i++;}out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>this is tomcat server nod 2");
%>
</body>
</html>
然后將這個項目放在tomcat2的webapp以下

同一時候也放在tomcat1的文件夾下

注意。以下這句改成這樣,2改為1

   System.out.println("this is tomcat server nod 1");


    out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>this is tomcat server nod 1");

8.重新啟動一個apache,tomcat1,tomcat2

然后在瀏覽器里面訪問

http://127.0.0.1/mytest/wel.jsp

不斷的刷新頁面。你會發現其在node1,和node2之間不斷換。說明請求有時候交給了1,有時候交給了tomcat2,實現了負載均衡的功能


以下在來實現tomcat1。和tomcat2的集群功能

所謂集群就是。一個client的相應的session在兩個tomcat中有一模一樣的相應的session

在mytest里面在新建一個wel2.jsp文件

里面的內容為:

<%@ page contentType="text/html; charset=utf-8" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%out.println("<br> ID " + session.getId()+"<br>");// 在session里面設置屬性String dataName = request.getParameter("attributeName");if (dataName != null && dataName.length() > 0) {String dataValue = request.getParameter("attributeValue");session.setAttribute(dataName, dataValue);}out.print("<b>打印Session內容:>");Enumeration e = session.getAttributeNames();while (e.hasMoreElements()) {String name = (String)e.nextElement();String value = session.getAttribute(name).toString();out.println( name + " = " + value+"<br>");System.out.println( name + " = " + value);}
%><form action="wel2.jsp" method="POST">屬性名:<input type=text size=20 name="attributeName"><br>值:<input type=text size=20 name="attributeValue"><br><input type=submit></form>
</body>
   </form>
</body>
</html>
兩個tomcat里面都有一個這種文件

然后兩個tomcat的web.xml以下加上以下這句話

<distributable/>,兩個session之間能相互復制

重新啟動

然后訪問http://10.211.55.3/mytest/wel2.jsp


又一次輸入這個地址



你會發現確實交給了兩個server,并且session里面的值一模一樣!

集群完畢。




版權聲明:本文博客原創文章,博客,未經同意,不得轉載。

轉載于:https://www.cnblogs.com/mfrbuaa/p/4662420.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256988.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256988.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256988.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JS實現css屬性動畫效果

html代碼 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>css屬性運動框架</title><style>body,div{margin: 0;padding: 0;}ul,li{list-style: none;}ul li{width: 200px;height: 100px;background: yellowgre…

學習筆記(24):Python網絡編程并發編程-進程與線程的區別

立即學習:https://edu.csdn.net/course/play/24458/296438?utm_sourceblogtoedu 線程與進程的區別&#xff1a; 1.消耗區別&#xff1a;進程>線程 1&#xff09;進程運行結果 #進程運行 from multiprocessing import Process def task(name):print("我是%s"%na…

Codeforces Beta Round #1

A /*************************************************************************> File Name: A.cpp> Author: opas_chenxin> Mail: 1017370773qq.com > Created Time: 2016年05月06日 星期五 02時22分23秒 ************************************************…

windows系統中創建線程常用哪幾個函數,有什么區別?

windows系統中創建線程常用哪幾個函數&#xff1f; 在windows系統中創建線程的函數有&#xff1a; CreadThread&#xff0c;AfxBeginThread&#xff0c;_beginthread&#xff0c;_beginthreadex。 他們的區別在于使用的場景不同。 CreateThread是Windows的API函數(SDK函數的標…

java.lang.String小測試

還記得java.lang.String么&#xff0c;如果現在給你一個小程序&#xff0c;你能說出它的結果么 1 public static String ab(String a){2 return a "b";3 }4 5 public static void testAb(){6 String x "a";7 ab…

Oracle傳輸表空間

一、簡介 可傳輸表空間(還有個集)最大的優勢是其速度比export/import或unload/load要快的多。因為可傳輸表空間主要是復制數據文件到目標路徑&#xff0c;然后再使用export/import或Data Pump export/import等應用僅導出/導入表空間對象的元數據到新數據庫。 &#xff08;1&…

進程控制塊PCB結構體 task_struct 描述

進程控制塊&#xff0c;英文名&#xff08;Processing Control Block&#xff09;&#xff0c;簡稱 PCB 。 進程控制塊是系統為了管理進程設置的一個專門的數據結構&#xff0c;主要表示進程狀態。 每一個進程都對應一個PCB來維護進程相關的信息&#xff1b; 在Linux中&#xf…

基于OpenCV與tensorflow實現實時手勢識別

基于OpenCV與tensorflow object detection API使用遷移學習&#xff0c;基于SSD模型訓練實現手勢識別完整流程&#xff0c;涉及到數據集收集與標注、VOC2012數據集制作&#xff0c;tfrecord數據生成、SSD遷移學習與模型導出&#xff0c;OpenCV攝像頭實時視頻流讀取與檢測處理&a…

學習筆記(25):Python網絡編程并發編程-Thread其他屬性和守護線程

立即學習:https://edu.csdn.net/course/play/24458/296440?utm_sourceblogtoedu 1.Thread其他的屬性 CurrentThread().getName():獲得當前線程的名字 t.is_Alive:判斷線程是否還在運行 t.join():等待線程運行結束再執行join后面的代碼 t.setName("name"):為線程…

AIX主機信任關系配置

1.配置主機信任關系的時候&#xff0c;需要先在兩臺主機/etc/hosts文件中添加要信任主機的&#xff29;&#xff30;&#xff0c;假設有(192.168.8.190 aix190,192.168.8.191 aix191)2個主機,在191主機配置如下所示 192.168.8.190 aix190 2.如果系統配置DNS&#xff0c;則需要去…

Sprint2團隊貢獻分

團隊貢獻分&#xff1a; 郭志豪&#xff1a;31% http://www.cnblogs.com/gzh13692021053/ 楊子健&#xff1a;22%http://www.cnblogs.com/yzj666/ 譚宇森&#xff1a;23%http://www.cnblogs.com/yzj666/ 劉森松&#xff1a;24% http://www.cnblogs.com/lssh/轉載于:https://w…

學習筆記(26):Python網絡編程并發編程-GIL與自定義互斥鎖的區別

立即學習:https://edu.csdn.net/course/play/24458/296443?utm_sourceblogtoedu 1.GIL的基本概念 答&#xff1a;GIL本質上就是一把鎖&#xff0c;只是他是一把在python解釋器上的鎖 2.GIL與互斥鎖的區別 答&#xff1a; 1&#xff09;GIL保護的是在python解釋器上的參數&a…

多目標跟蹤檢測

方法&#xff1a; 1、實時性&#xff0c;每幀視頻10ms 2、方法&#xff0c;首先深度學習檢測到目標&#xff0c;然后再寫跟蹤算法

2014年最具人氣國外WORDPRESS主題

在國外&#xff0c;WrodPress這個博客系統極為受歡迎&#xff0c;使用WordPress來建站可以降低很多成本&#xff0c;另外還能以十分便宜的價格獲得一個漂亮的WP網站模板。 今天向大家分享來自Themeforest 2014年最具人氣的高級WrodPress主題&#xff0c;這些主題無論是設計還是…

軟件工程學習感想

通過這半學期我對軟件工程的學習&#xff0c;從軟件工程的基礎到考試用戶的需求分析與求解&#xff0c;最后到黑盒白盒測試通過自身做過的一些案例&#xff0c;講解了軟件工程這門本身枯燥乏味的課程&#xff0c;這不僅增強了學生學習的積極性&#xff0c;也通過讓我們自己去做…

開源視覺salm算法介紹

當前的開源SLAM方案 開源方案傳感器形式地址鏈接MonoSLAM單目https://github.com/hanmekim/SceneLib2 PTAM單目 http://www.robots.ox.ac.uk/~gk/PTAM/ORB-SLAM 單目為主http://webdiis.unizar.es/~raulmur/orbslam/ORB-SLAM2單目https://github.com/raulmur/ORB_SLAM2LSD-SLAM…

學習筆記(27):Python網絡編程并發編程-GIL與多線程

立即學習:https://edu.csdn.net/course/play/24458/296444?utm_sourceblogtoedu GIL與多線程 1.須知&#xff1a; 1&#xff09;cpu主要是為了提升計算性能&#xff0c;增加CPU提升計算性能&#xff1b; 2&#xff09;每一個CPU一旦遇到阻塞狀態都會處于等待狀態&#xff0c…

J0ker的CISSP之路:復習-Access Control(3)

本文同時發表在&#xff1a;[url]http://netsecurity.51cto.com/art/200801/63649.htm[/url] 在《J0ker的CISSP之路》系列的上一篇文章里&#xff0c;J0ker給大家介紹了訪問控制CBK里面一些常見的破壞信息資產保密性的威脅類型&#xff0c;那么什么類型的威脅會破壞信息資產的完…

C#中對泛型List進行分組輸出元素

背景&#xff1a;在輸出列表時&#xff0c;往往需要按照某一字段進行分組&#xff0c;比如在輸出城市列表時&#xff0c;按照首字母進行分組&#xff0c;輸出學生列表時&#xff0c;按照年級進行分組&#xff0c;然后再對分組的結果按照其他的字段進行排序。 如存在以下STU學生…

分頁3

http://www.cnblogs.com/ChrisLee2011/p/4288194.html 頁面的HTML部分如下&#xff1a; < div class "tableContainer"> < input id "currentPage" type "hidden" value " ViewData[ "currentPage"] "/> < i…