1. 程式人生 > >Nginx + Tomcat 負載均衡群集 【內附源碼包】

Nginx + Tomcat 負載均衡群集 【內附源碼包】

live linu ron appbase ets 動態 方案 openssl stub

前言

1·在之前都學習 Linux 的一些服務和搭建,都很熟悉 !這篇文章主要講Nginx、Tomcat與 Nginx + Tomcat 負載均衡群集。
2·在各種網站服務器軟件中,除了 Apache HTTP Server 外,還有一款輕量級的 HTTP 服務器軟件——Nginx,它是由俄羅斯 Lgor Sysoev(伊戈爾·賽索耶夫)開發。
技術分享圖片


Nginx 的優點:

1·穩定性
2·系統資源消耗低
3·高並發鏈接的處理能力 (30000~50000 個並發請求),核心優點!
4·反向代理服務器
5·安裝、配置非常簡介 (支持 per 語法)
6·啟動容易、幾乎可以做到 7 * 24 不間斷運行


Nginx 適用範圍

1·大量提供社交網絡
2·新聞資訊
3·電子商務
4·虛擬主機等
5·列如:淘寶、新浪博客、新浪播客、網易新聞 等


Nginx的不為人知的特點

1· nginx代理和後端web服務器間無需長連接;

2·接收用戶請求是異步的,即先將用戶請求全部接收下來,再一次性發送後後端web服務器,極大的減輕後端web服務器的壓力 發送響應報文時,是邊接收來自後端web服務器的數據,邊發送給客戶端的

3·網絡依賴型低。NGINX對網絡的依賴程度非常低,理論上講,只要能夠ping通就可以實施負載均衡,而且可以有效區分內網和外網流量 支持服務器檢測。NGINX能夠根據應用服務器處理頁面返回的狀態碼、超時信息等檢測服務器是否出現故障,並及時返回錯誤的請求重新提交到其它節點上

4·nginx是以多進程的方式來工作的,當然nginx也是支持多線程的方式的,只是我們主流的方式還是多進程的方式,也是nginx的默認方式
技術分享圖片


Tomcat 簡介:

Tomcat 最初是由 Sun 的軟件架構師 詹姆斯·鄧肯·戴維森開發的,後來他將其變為開源項目,並獻給 Apache 軟件基金會 ,詹姆斯希望講此項目以一個動物的名字命名,所以才命名為 Tomcat (公貓)。
技術分享圖片
Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬於輕量級應用服務器,在中小型系統和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首選。對於一個初學者來說,可以這樣認為,當在一臺機器上配置好Apache 服務器,可利用它響應HTML(標準通用標記語言下的一個應用)頁面的訪問請求。實際上Tomcat是Apache 服務器的擴展,但運行時它是獨立運行的,所以當你運行tomcat 時,它實際上作為一個與Apache 獨立的進程單獨運行的。


Tomcat 與 Nginx 的區別

Tomcat一般是做動態解析才會用得到,支持jsp的解析,需要配置JDK支持
Tomcat一般支持並發並不高100個差不多了
Nginx 則一般是做靜態,本身不具備動態解析功能,需要配置其他插件或通過其他軟件協同才具備動態功能,但nginx在靜態上的功能非常強大,也可做訪問控制,而且可以做成各種協議負載服務器,包括流媒體的也可以做
Nginx 在靜態方面支持並發輕松達幾萬


Nginx + Tomcat 反向代理之負載均衡

反向代理(Reverse Proxy)方式是指:以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個反向代理服務器。如下圖所示:
技術分享圖片
一個 Tomcat 站點由於可能出現單點故障及無法應付過多客戶復雜多樣的請求問題,不能單獨應用於生產環境下,所以我們需要一套更可靠的解決方案來完善 WEB 站點架構
Nginx 是一款非常優秀的 http 服務器軟件,它能夠支持高達50000個並發鏈接數的響應,擁有強大的靜態資源處理能力,運行穩定,並且內存、cpu等系統資源消耗非常低。
下面這個案例講講解以 Nginx 作為負載均衡器,Tomcat 作為應用服務器的負載集群的設置方法。如下拓撲圖:
技術分享圖片


環境部署準備說明:

主機 操作系統 IP地址 主要軟件
Nginx 服務器 CenOS 7 192.168.100.60 nginx-1.12.0.tar.gz
Tomcat 服務器1 CenOS 7 192.168.100.70 jdk-8u91-linux-x64.tar.gz 和 apache-tomcat-8.5.16.tar.gz
Tomcat 服務器2 CenOS 7 192.168.100.80 jdk-8u91-linux-x64.tar.gz 和 apache-tomcat-8.5.16.tar.gz
window 7 192.168.100.90 主要用於實驗結果測試

源碼包附送:

需要源碼包的請訪問:百度網盤源碼包 密碼:o0jl


部署開始:

1·安裝 Tomcat 服務器
· 安裝 Tomcat 服務器之前必須安裝JDK。它是 Sun 公司免費提供的 Java 語言的軟件開發工具包,只有安裝了 JDK 才可以識別 tomcat
執行以下命令解壓軟件包、且移動、重命名: jdk-8u91-linux-x64.tar.gz。
· tar zxvf jdk-8u91-linux-x64.tar.gz -C /opt/
· cd /opt/
· mv jdk1.8.0_91 /usr/local/java


2·配置 Java 環境:
·在 /etc/profile.d 下建立 java.sh 腳本,內容如下:
· vim /etc/profile.d/java.sh
· #!/bin/bash
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
·將 java.sh 腳本導入到環境變量,使其生效
· source /etc/profile.d/java.sh
運行 java - version 命令查看 Java 白本是否和之前安裝的一致
·java -version 得到以下結果
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
到此 Java 環境配置完成


安裝配置 Tomcat

1· 解壓 apache-tomcat-8.5.16.tar.gz 包
[root@localhost ~]# tar -zxvf apache-tomcat-8.5.16.tar.gz -C /opt/


2· 將解壓後生成的文件 apache-tomcat-8.5.16 移動到 /usr/local/下,改名為 tomcat8
[root@localhost ~]# mv /opt/apache-tomcat-8.5.16 /usr/local/tomcat8


3· 啟動 Tomcat
· [root@localhost ~]# /usr/local/tomcat8/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat8
Using CATALINA_HOME: /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.


4· Tomcat 默認運行在 8080 端口,運行 netstat 查看8080端口監聽信息
·[root@localhost bin]# netstat -antp | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 1767/java


5·打開window 7瀏覽器訪問 http://192.168.100.70:8080,如出現以下界面,則表示 Tomcat 配置啟動成功。
技術分享圖片


6·為了之後方便識別,修改它的站點,創建 Web 目錄 為它的站點
·[root@localhost bin]# mkdir -pv /web/app1
mkdir: 已創建目錄 "/web/app1"


7· 在 /web/app1 中創建默認首頁,這裏需要註意,格式為: .jsp 結尾
[root@localhost bin]# vim /web/app1/index.jsp
加入以下內容:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("Welcome to test site,http ://www .test1.com");%>
</body>
</html>


8· 修改主配置文件,指定站點目錄為我們創建的新目錄 /web/app1/index.jsp
[root@localhost conf]# vim /usr/local/tomcat8/conf/server.xml
在Host name 下加入以下內容
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">

<Context docBase="/web/app1" path="" reloadable="false">
</Context>


9·重啟服務、訪問 http://192.168.100.70:8080 再次驗證:
技術分享圖片


10·到此 Tomcat 1 配置完畢,Tomcat 2 配置都是一樣的,只是需要修改站點內容,方便識別!
· 關閉防火墻 firewalld 、setenforce 0
· 安裝 JDK ,配置 Java 環境 版本保持一致
· 安裝配置 Tomcat 保本保持一致
· 創建 /web/app2 目錄,修改 Tomcat 配置文件 server.xml ,將網站文件目錄更改到 /web/app2 路徑下
· 在 /web/app2 目錄創建 index.jsp ,為了區別測試頁面 index.jsp 稍作調整就好
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("Welcome to test site,http ://www .test2.com");%>
</body>
</html>


Nginx 服務器配置

在 Nginx 服務器 192.168.100.60 下安裝 Nginx ,反向代理兩個 Tomcat 站點,並實現負載均衡

1·創建管理 Nginx 用戶
useradd -M -s /sbin/nologin nginx


2·解壓縮軟件包 nginx-1.12.0.tar.gz
[root@localhost ~]# tar -zxvf nginx-1.12.0.tar.gz -C /opt/


3·編譯環境安裝
[root@localhost ~]# yum install gcc gcc-c++ pcre-devel zlib-devel openssl-devel -y


4·開始安裝,編譯
[root@localhost ~]# cd /opt/nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_flv_module \
--with-http_ssl_module
[root@localhost nginx-1.12.0]# make && make install


5·解釋以上模塊的含義,按照順序解釋:
· 指定安裝路徑為 /usr/local/nginx
· 指定運行的用戶為 nginx
· 指定運行的組為 nginx
· 啟用文件修改支持
· 啟用狀態統計
· 啟用 gzip 靜態壓縮
· 啟用 flv 模塊,提供尋求內存使用基於時間的偏移量文件
· 啟用 SSL 模塊


6·修改主配置文件:nginx.conf ,設定負載均衡的服務器列表
[root@localhost nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;

#log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
#                  ‘$status $body_bytes_sent "$http_referer" ‘
#                  ‘"$http_user_agent" "$http_x_forwarded_for"‘;

#access_log  logs/access.log  main;

sendfile        on;

sendfile        on;
#tcp_nopush     on;

#keepalive_timeout  0;
keepalive_timeout  65;

#gzip  on;        需要加入以下4行,包括符號!

> upstream tomcat_server {
> server 192.168.100.70:8080 weight=1;
> server 192.168.100.80:8080 weight=1;
> }

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;

> proxy_pass http ://tomcat_server; 需要加入這句話
利用以上方式,把 Nginx 的默認站點通過prox_pass 方法代理到了設定好的 tomcat_server 負載均很服務器組上


6·測試 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 配置正確,無語法錯誤


7· 為了我們方便管理 Nginx 的啟動方式,和我們自己的習慣,這裏寫一個啟動腳本!
[root@localhost ~]# vim /etc/init.d/nginx
#!/bin/bash

PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0


8·賦予 Nginx 啟動腳本執行權限、並啟動服務
· chmod +x /etc/init.d/nginx
·chkconfig --add nginx
·systemctl start nginx
·systemctl status nginx


9·查看 Nginx 端口號及 PID 進程:
[root@localhost ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13611/nginx: master


測試負載均衡效果:

1·打開 window 7 訪問 http:// 192.168.100.60
2·不斷刷新瀏覽器測試,可以看到由於權重相同,頁面會在以下兩個頁面來回切換
3·如下圖,第一次訪問出現 test 1 ,刷新再次訪問,出現 test 2 .說明負載均衡群集搭建成功!
技術分享圖片
技術分享圖片


過程中可能遇到的問題排錯:

1·配置 Tomcat 時需要首先安裝 JDK 軟件包
2·配置號 Java 環境後需要執行 source /etc/profile.d/java.sh 使其生效
3·安裝 Nginx 前 需要 yum install gcc gcc-c++ pcre-devel zlib-devel openssl-devel -y 否則會報錯
4·修改 Nginx 主配置文件時需要註意特殊的符號,不要漏寫。使用命令:/usr/local/nginx/sbin/nginx -t 檢查配置文件格式
5·檢查是否重啟服務、關閉防火墻!


總結與歸納:

1·Tomcat 服務器時一個免費的開放源代碼的 Web 應用服務器,屬於輕量級應用服務器,在中小型系統和並發訪問用戶不是很多的場合下被普遍使用,是開發和調試 JSP 程序的首選
2·在安裝 Tomcat 之前必須先安裝 JDK。server.xml 為 Tomcat 的主配置文件。通過該文件,可以修改啟動端口、網站目錄、虛擬主機、開啟https 等功能
3·可以將兩個或兩個以上的 Tomcat 服務器放到 Nginx 中組成一個負載均衡群集,然後通過 proxy_pass 這種 Web 帶的方式在 localtion 中設置集群站點,通過 weight 值來分別對 Tomcat 服務器進行權重的設置
4·在生成環境中,Tomcat server 的硬件可能會不相同,可以通過修改相應服務器的 weight 值,對配置較高或稍微低一點的服務器進行分配控制

Nginx + Tomcat 負載均衡群集 【內附源碼包】