高性能群集部署技術-Nginx+Tomcat負載均衡群集

目錄

#1.1案例概述

? 1.1.1案例前置知識點

? 1.1.2案例環境

#2.1案例實施

? 2.1.1實施準備

? 2.1.2查看JDK是否安裝

? 2.1.3安裝配置Tomcat

? 2.1.4Tomcat主配置文件說明

? 2.1.5建立Java的Web站點

#3.1Nginx+Tomcat負載均衡,動靜分離群集的實驗案例

? 3.1.1案例概述

? 3.1.2案例環境

? 3.1.3案例實施

? 3.1.4Nginx服務器配置

? 3.1.5測試效果


1.1案例概述

? ?目前,IBM 的 WebSphere 及 Oracle 的 WebLogic 占據了市面上 Java 語言 Web 站點的大部分份額。這兩種軟件以其無與倫比的性能及可靠性等優勢被廣泛應用于大型互聯網公司的 Web 場景中,但是其高昂的價格也使得小型互聯網公司對此望而卻步。

? ?Tomcat 自 5.x 版本以來,其性能上已經得到了大幅的提升,再加上其開放性的框架和可二次開發等特性,已經完全可以用在訪問量不是很大的生產環境下。目前,大多數用于 JSP 技術開發的電子商務網站基本應用了 Tomcat,而且 Tomcat 的 Servlet 和 JSP 這兩種 API 也完全可以適用于 V3 版移聯建站管理系統。

1.1.1案例前置知識點

(1)Tomcat 簡介
? ? ?名稱由來:Tomcat 最初是由 Sun 的軟件構架師詹姆斯?鄧肯?戴維森開發的。后來他幫助將其變為開源項目,并由 Sun 貢獻給 Apache 軟件基金會。由于大部分開源項目 O’Reilly 都會出一本相關的書,并且將其封面設計成某個動物的素描,因此他希望將此項目以一個動物的名字命名,因為他希望這種動物能夠自己照顧自己,最終,他將其命名為 Tomcat(公貓)。而 O’Reilly 出版的介紹 Tomcat 的書籍的封面也被設計成了一個公貓的形象。而 Tomcat 的 Logo 兼吉祥物也被設計成了一只公貓。
? ? 其實 Tomcat 在開始研發的時候并不叫這個名字,早期 Tomcat 項目的名字叫 Catalina,所以當我們安裝完 Tomcat 后會發現安裝路徑下面有很多和 Catalina 有關的目錄和文件,而這些文件通常也是我們使用或者配置 Tomcat 的重要文件。

(2)應用場景
? ? Tomcat 服務器是一個免費的開放源代碼的 Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試 JSP 程序的首選。一般來說,Tomcat 雖然和 Apache 或者 Nginx 這些 Web 服務器一樣,具有處理 HTML 頁面的功能,然而由于其處理靜態 HTML 的能力遠不及 Apache 或者 Nginx,所以 Tomcat 通常是作為一個 Servlet 和 JSP 容器,單獨運行在后端,如圖 5.1 所示。

1.1.2案例環境

主機IP 地址操作系統應用
Tomcat 服務器OpenEuler24192.168.10.101apache-tomcat-9.0.8

2.1案例實施

2.1.1實施準備

(1)關閉防火墻

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

?(2)在安裝Tomcat之前必須安裝JDK

? ? ?JDK 的全稱是 Java Development Kit,是 Sun 公司免費提供的 Java 語言的軟件開發工具包,其中包含 Java 虛擬機(JVM)。編寫好的 Java 源程序經過編譯可形成 Java 字節碼,只要安裝了 JDK,就可以利用 JVM 解釋這些字節碼文件,從而保證了 Java 的跨平臺性。

? ? ?在平臺兼容性方面,JDK 作為解釋字節碼文件并據此調用操作系統 API 實現對應功 Java 虛擬機,與操作系統類型和平臺位數密切相關,因此存在不同類型的版本,而 Tomcat 也具有上述特征,默認情況下 JDK 已經安裝,所以需要預先下載 Tomcat,本章中所使用的 Tomcat 軟件的源碼包為 apache-tomcat-9.0.8.tar.gz。

2.1.2查看JDK是否安裝

[root@localhost tomcat9]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

2.1.3安裝配置Tomcat

(1)Tomcat的安裝和配置

[root@localhost ~]# tar xf apache-tomcat-9.0.8.tar.gz

(2)解壓并移動到/usr/local下

[root@localhost ~]# mv apache-tomcat-9.0.8/ /usr/local/tomcat9

(3)啟動tomcat

[root@localhost tomcat9]# /usr/local/tomcat9/bin/startup.sh
Using CATALINA_BASE:  /usr/local/tomcat9
Using CATALINA_HOME:  /usr/local/tomcat9
Using CATALINA_TMPDIR: /usr/local/tomcat9/temp
Using JRE_HOME:       /usr
Using                 CLASSPATH: /usr/local/tomcat9/bin/bootstrap.jar:/usr/local/tomcat9/bin/tomcat-juli.jar
Tomcat started.

Tomcat默認運行在8080端口

[root@localhost ~]# netstat -anpt | grep 8080
tcp6  0  0 ::8080 :::*  LISTEN  2809/java

(4)打開瀏覽器驗證

2.1.4Tomcat主配置文件說明

xml
<?xml version="1.0" encoding="UTF-8"?>
......                             //省略部分內容
<Server port="8005" shutdown="SHUTDOWN">
// Tomcat 關閉端口,默認只對本機地址開放,可以在本機通過 telnet 127.0.0.1 8005
訪問
// 對 Tomcat 進行關閉操作
......                             //省略部分內容
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443" />
//Tomcat 啟動的默認端口號 8080,可以根據需要進行更改......                             //省略部分內容<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
//Tomcat 啟動 AJP 1.3 連接器時默認的端口號,可以根據需要進行更改
......                             //省略部分內容
//以下為 Tomcat 定義虛擬主機時的配置及日志配置
<Host   name="localhost"    appBase="webapps"    unpackWARs="true"
autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" /> -->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory =
"logs"prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t &quot ;%r&quot ; %s %b" /></Host>
</Engine>
</Service>
</Server>

?2.1.5建立Java的Web站點

(1)在根目錄下建立一個web目錄,并在里面建立一個webapp1目錄,用于存放網站文件。

[root@localhost ~]# mkdir -pv /web/webapp1
mkdir: created directory "/web"
mkdir: created directory "/web/webapp1"

?(2)在webapp1目錄下建立一個index.jsp的測試頁面。

[root@localhost ~]# vim /web/webapp1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html>
<head>
<title>JSP test1 page</title> </head>
<body>
<% out.println("動態頁面 1,http://www.test1.com");%> </body>
<body>
<div>靜態頁面的圖片 1</div><br><img src="logo.jpg">
</body></html>

?(3)修改Tomcat的server.xml文件。

plaintext
[root@localhost ~]# vim /usr/local/tomcat9/conf/server.xml
......省略部分內容
<Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><!-- SingleSignOn valve, share authentication between web applicationsDocumentation at: /docs/config/valve.html --><!--<Valve className="org.apache.catalina.authenticator.SingleSignOn" />--><!-- Access log processes all example.Documentation at: /docs/config/valve.htmlNote: The pattern used is equivalent to using pattern="common" --><Valve className="org.apache.catalina.valves.AccessLogValve"directory="logs" prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /><Context docBase="/web/webapp1" path="" reloadable="false" ></Context>
</Host>
//docBase: web 應用的文檔基準目錄
//reloadable:  設置監視"類"是否變化
//path=""  設置默認"類"......省略部分內容

(4)關閉Tomcat,再重新啟動。

[root@localhost ~]# /usr/local/tomcat9/bin/shutdown.sh
[root@localhost ~]# /usr/local/tomcat9/bin/startup.sh

?(5)確認Web站點

3.1Nginx+Tomcat負載均衡,動靜分離群集的實驗案例

3.1.1案例概述

? ?通常情況下,一臺 Tomcat 站點由于可能出現單點故障及無法應付過多客戶復雜多樣的請求等問題,不能單獨應用于生產環境下,所以需要一套更可靠的解決方案來完善 Web 站點架構。

? ?Nginx 是一款非常優秀的 http 服務器軟件,它能夠支持高達 50000 個并發連接數的響應,擁有強大的靜態資源處理能力,運行穩定,并且內存、CPU 等系統資源消耗非常低。目前很多大型網站都應用 Nginx 服務器作為后端網站程序的反向代理及負載均衡器,來提升整個站點的負載并發能力。

? ?Nginx 是一個非常強大的靜態 web 服務,Tomcat 處理動態請求效率不高,而一般網站大多數的內容都是靜態文件(如圖片、html、css、js 等),經過 Nginx 前端的反向代理加速和過濾,后端 Tomcat 處理請求的壓力便可大大減少,只需負責處理動態內容就可以了。在性能與穩定性的權衡下,使用 Nginx+Tomcat 搭配便可讓它們在各自擅長的領域大展拳腳。

? ? 本案例介紹以 Nginx 作為負載均衡器、靜態頁面處理,Tomcat 作為應用服務器的負載群集、動態頁面處理的設置方法。網站拓撲架構如圖 5.4 所示。

3.1.2案例環境

主機IP 地址操作系統應用
Tomcat1 服務器OpenEuler24192.168.10.101apache-tomcat-9.0.8
Tomcat2 服務器OpenEuler24192.168.10.102apache-tomcat-9.0.8
Nginx 服務器OpenEuler24192.168.10.103nginx-1.26.3

?3.1.3案例實施

1.Tomcat2 server配置

? ? ? Tomcat2 server 配置方法基本同 Tomcat1,其中包括:
? ? (1)關閉防火墻。
? ? (2)確認是否安裝 JDK,JAVA 版本與 Tomcat1 server 保持一致。
? ?(3)安裝配置 Tomcat,版本與 Tomcat1 server 保持一致。
? ?(4)創建 /web/webapp1 目錄,修改 Tomcat 配置文件 server.xml,將網站文件目錄更改到 /web/webapp1 / 路徑下。
? ?(5)在 /web/webapp1 / 路徑下建立 index.jsp,為了區別將測試頁面 index.jsp 的內容更改如下。

[root@localhost ~]# vim /web/webapp1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html>
<head>
<title>JSP test2 page</title> </head>
<body>
<% out.println("動態頁面 2,http://www.test2.com") ;%> </body>
<body>
<div>動態頁面的圖片 2</div><br><img src="logo.jpg">
</body>
</html>

3.1.4Nginx服務器配置

? ?在 Nginx 服務器 192.168.10.103 上安裝 Nginx,反向代理到兩個 Tomcat 站點,并實現負載均衡。
(1)關閉防火墻。

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

(2)安裝相關軟件包。

[root@localhost ~]# dnf install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker

(3)解壓并安裝 Nginx。

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
[root@nodel ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# tar zxf nginx-1.26.3.tar.gz
[root@localhost ~]# cd nginx-1.26.3
[root@localhost nginx-1.26.3]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-pcre
[root@localhost nginx-1.26.3]# make && make install

(4)配置 nginx.conf。
? ? ?配置命令如下:

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf

? ?在 http {…} 中加入以下代碼,設定負載均衡的服務器列表,weight 參數表示權重,權重越高,被分配到的概率越大。為了使測試效果比較明顯,我們把權重設置為一樣。

upstream tomcat_server {
server 192.168.10.101:8080 weight=1;
server 192.168.10.102:8080 weight=1;
}

下面是編輯 Nginx 靜態頁面文件。

[root@nginx conf]# vim /usr/local/nginx/html/index.html
server {
listen 80;
server_name localhost;
#charset koi8-r; 把 #號去掉,utf-8
#access_log logs/host.access.log main;
location ~ .jsp{ proxy_set_header Hosthost; 
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Client-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://tomcat_server;
}
location ~ .(gif|jpg|jpeg|png|bmp|swf|css)$ {
root /usr/local/nginx/html/img;
expires 30d;
}
location / {
root html;
index index.html index.htm;
}
…… // 省略部分內容
…… // 省略部分內容
}

下面在 Nginx 上準備靜態圖片。

[root@nginx ~]# mkdir /usr/local/nginx/html/img // 創建靜態文件目錄
[root@nginx ~]# cp /root/logo.jpg/usr/local/nginx/html/img

測試 Nginx 配置文件是否正確。

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

啟動 Nginx 服務。

[root@localhost ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

查看 Nginx 服務進程。

root@localhost ~]# ps aux | grep nginx
root 5279 0.0 0.0 9836 2264 ? Ss 09:00 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nginx 5280 0.0 0.0 11568 4052 ? S 09:00 0:00 nginx: worker process
root 5315 0.0 0.1 21988 7852 pts/0 S+ 09:03 0:00 grep --color=auto nginx

nginx 查看端口號及 PID 進程號。

[root@localhost ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13304/nginx: master

3.1.5測試結果? ?

? ? ? 打開瀏覽器訪問?http://192.168.10.103/index.jsp。不斷刷新瀏覽器測試,可以看到由于權重相同,頁面會反復在以下兩個頁面來回切換。第一次訪問,出現 test1 的測試頁面,并且能正常加載 nginx 上的靜態頁面圖片,如圖 5.6 所示。刷新后,第二次訪問,出現 test2 的測試頁面,如圖 5.7 所示。

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

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

相關文章

《Go語言圣經》函數值、匿名函數遞歸與可變參數

《Go語言圣經》函數值、匿名函數遞歸與可變參數 函數值&#xff08;Function Values&#xff09; 在 Go 語言中&#xff0c;函數被視為第一類值&#xff08;first-class values&#xff09;&#xff0c;這意味著它們可以像其他值一樣被操作&#xff1a;擁有類型、賦值給變量、…

vtk和opencv和opengl直接的區別是什么?

簡介 VTK、OpenCV 和 OpenGL 是三個在計算機圖形學、圖像處理和可視化領域廣泛使用的工具庫&#xff0c;但它們在功能、應用場景和底層技術上存在顯著差異。以下是它們的核心區別和特點對比&#xff1a; 1. 核心功能與定位 工具核心功能主要應用領域VTK (Visualization Toolk…

最新豆包大模型發布!火山引擎推出Agent開發新范式

Datawhale大會 2025火山引擎 Force 原動力大會 6月11日-12日&#xff0c;北京國家會議中心人山人海&#xff0c;2025 火山引擎 Force 原動力大會如約而至。 作為開發者社區的一員&#xff0c;這場大會上的一系列新發布讓我們感受到了&#xff1a;這個 Agent 技術落地元年的關鍵…

RFC4291-IPv6地址架構解說

RFC 4291 是由互聯網工程任務組&#xff08;IETF&#xff09;發布的關于 IPv6 地址架構 的標準文檔。 該文檔詳細定義了 IPv6 地址的格式、類型、表示方法以及分配方式。 以下是對 RFC 4291 中 IPv6 地址架構的全面解析&#xff0c;包括地址格式、類型、表示方法、特殊地址以…

簡單對比 **HTTP**、**MQTT** 和 **CoAP** 這三種通信協議

對比 HTTP、MQTT 和 CoAP 這三種通信協議&#xff0c;從 消息結構、資源占用、安全性 等方面進行全面分析。 &#x1f310; HTTP vs MQTT vs CoAP 對比 特性HTTPMQTTCoAP協議層級應用層基于 TCP應用層基于 TCP / WebSocket應用層基于 UDP (也支持 TCP)消息模式請求/響應 (客戶…

【Dify 案例】【自然語言轉SQL案例】【五】【實戰二】【財務管理查詢商品信息數據】

援引實戰一,進行數據業務處理化 1.開始 2.自然語言轉SQL的工具 3.參數提取器 4.SQL查詢

FPGA基礎 -- Verilog語言要素之標識符

一、什么是標識符&#xff08;Identifier&#xff09; 在 Verilog 中&#xff0c;標識符是用戶定義的名字&#xff0c;用于標識模塊、變量、端口、函數、任務、參數、宏定義等各種語言要素。 就像 C 語言的變量名、函數名一樣&#xff0c;Verilog 中的標識符為 HDL 代碼提供了…

Tomcat雙擊startup.bat閃退的解決方法

首先需要確認java環境是否配置正確&#xff0c;jdk是否安裝正確 winR打開cmd&#xff0c;輸入該命令 java -version 出現對應的版本就說明jdk配置正確 如果沒有&#xff0c;則參考jdk的安裝及配置 如果以上都沒有問題&#xff0c;就繼續排查 確認Tomcat的環境變量配置 概…

計算機基礎(三):深入解析Java中的原碼、反碼、補碼

計算機基礎系列文章 計算機基礎(一)&#xff1a;ASCll、GB2312、GBK、Unicode、UTF-32、UTF-16、UTF-8深度解析 計算機基礎(二)&#xff1a;輕松理解二進制、八進制、十進制和十六進制 計算機基礎(三)&#xff1a;深入解析Java中的原碼、反碼、補碼 目錄 引言一、 基礎概念&…

phpstudy無法啟動mysql,一啟動就關閉,完美解決

phpstudy無法啟動mysql&#xff0c;一啟動就關閉&#xff0c;完美解決 phpstudy的mysql無法啟動&#xff0c;一啟動就關閉如何解決。 問題出現的原因&#xff1a;phpstudy自帶的mysql&#xff0c;可能與之前單獨安裝的mysql發生沖突。(之前安裝的mysql已經占用3306端口) 解決方…

mysql中的<>和!=

在MySQL中&#xff0c;<> 運算符表示 不等于。它與 ! 運算符功能完全相同&#xff0c;都是用于比較兩個表達式是否不相等。 SELECT * FROM table_name WHERE column_name <> value;當 column_name 的值不等于 value 時&#xff0c;返回該行當值相等或為 NULL 時&a…

C#學習日記

命名空間 知識點一 命名空間基本概念 概念 命名空間是用來組織和重用代碼的 作用 就像是一個工具包&#xff0c;類就像是一件一件的工具&#xff0c;都是申明在命名空間中的 知識點二 命名空間的使用 基本語法 namespace 命名空間名 {類類 } namespace MyGame {class GameO…

第八十二篇 大數據開發基礎:樹形數據結構深度解析與實戰指南(附創新生活案例)

目錄 一、樹的本質&#xff1a;層次化數據組織二、生活中的樹形智慧&#xff1a;無處不在的層次案例1&#xff1a;圖書館圖書分類系統案例2&#xff1a;電商平臺商品類目樹案例3&#xff1a;城市行政區域劃分 三、大數據中的核心樹結構1. B樹&#xff1a;數據庫索引的脊梁2. 決…

從0開始學計算機視覺--Day1--計算機視覺的起源

我們經常能聽到計算機視覺這個詞語&#xff0c;像數字圖像處理&#xff0c;算法設計&#xff0c;深度學習等領域。但很少有人會先去了解清楚這門知識&#xff0c;而是用到什么再學什么&#xff0c;雖然這在項目進度上能節省不少時間&#xff0c;但有時候囫圇吞棗式地學習容易落…

簡單的 ?Flask? 后端應用

from flask import Flask, request, jsonify, session import os app Flask(__name__) app.secret_key os.urandom(24) users { 123: admin, admin: admin } # 登錄接口 app.route(/login, methods[POST]) def login(): data request.get_json() username data.get(usern…

spring-webmvc @PathVariable 典型用法

典型用法 基礎用法 GetMapping("/users/{id}") public String getUser(PathVariable Long id) {return "User ID: " id; } 請求&#xff1a;/users/1001 輸出&#xff1a;User ID: 1001---- GetMapping("/users/{userId}/orders/{orderId}") …

LVS+Keepliaved高可用群集

目錄 keepalived雙擊熱備基礎知識1.keepallived概述及安裝keepalived的熱備方式 2.使用keepalived實現雙機熱備 案例1.基礎主備調度器環境配置2.配置主調度器3.配置從調度器4.配置兩臺節點服務器5.測試 keepalived雙擊熱備基礎知識 Keepalived 起初是專門針對 LVS 設計的一款強…

在Unreal Engine 5(UE5)中,Get PlayerPawn和Get PlayerController的區別以及如何計算玩家和目標之間的距離。

一、兩者區別 在Unreal Engine 5&#xff08;UE5&#xff09;中&#xff0c;獲取玩家的位置信息通常有兩種方式&#xff1a;通過PlayerPawn或通過PlayerController。具體使用哪一個取決于你想要獲取的是哪個實體的位置。 1.Get Player Pawn&#xff1a; PlayerPawn是玩家實際…

linux線程同步

互斥鎖 同步與互斥概述** 現代操作系統基本都是多任務操作系統&#xff0c;即同時有大量可調度實體在運行。在多任務操作系統中&#xff0c;同時運行的多個任務可能&#xff1a; 都需要訪問/使用同一種資源 多個任務之間有依賴關系&#xff0c;某個任務的運行依賴于另一個任…

Spring 的IoC 和 AOP

第一部分&#xff1a;關于 IoC (控制反轉) 1. 核心思想 (What & Why) 首先&#xff0c;我會先解釋 IoC 的核心思想&#xff0c;而不是直接講技術。 “IoC&#xff0c;即控制反轉&#xff0c;它是一種重要的設計思想&#xff0c;而不是一個具體的技術。它的核心是將傳統上…