天天看點

群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離

文章目錄

  • 一、 Tomcat 的應用場景
  • 二、 搭建Nginx+Tomcat負載均衡與動靜分離
    • 2.1 nginx支援的負載均衡排程算法
    • 實驗目的
    • 實驗環境
    • 實驗過程
      • 首先實作動靜分離
      • 1. 實驗環境準備
      • 2. 手工安裝nginx
      • 3. 手工編譯安裝tomcat
      • 4. 動靜分離配置
      • 5. 圖檔的動靜分離
      • 6. tomcat 群集
      • 7. nginx 做反向代理
      • 8. 測試

一、 Tomcat 的應用場景

Tomcat 自 5.x版本以來,其性能上已經得到了大幅的提升,再加上其開放性的架構和可二次開發等特性,已經完全可以用在通路量不是很大的生産環境下。

Tomcat 最初是由 Sun 的軟體構架師詹姆斯·鄧肯·戴維森開發的。後來他 幫助将其變為開源項目,并由 Sun 貢獻給 Apache 軟體基金會。

Tomcat 伺服器是一個免費的開放源代碼的 Web 應用伺服器,屬于輕量級應用伺服器, 在中小型系統和并發通路使用者不是很多的場合下被普遍使用,是開發和調試 JSP 程式的首選。 一般來說,Tomcat 雖然和 Apache 或者 Nginx 這些 Web 伺服器一樣,具有處理 HTML 頁面的功能,然而由于其處理靜态 HTML 的能力遠不及 Apache 或者 Nginx,是以 Tomcat 通常是作 為一個 Servlet 和 JSP 容器,單獨運作在後端。

二、 搭建Nginx+Tomcat負載均衡與動靜分離

2.1 nginx支援的負載均衡排程算法

  • weight輪詢(預設):接收到的請求按照順序逐一配置設定到不同的後端伺服器,即使在使用過程中,某一台後端伺服器當機,nginx會自動将該伺服器剔除出隊列,請求受理情況不會受到任何影響。 這種方式下,可以給不同的後端伺服器設定一個權重值(weight),用于調整不同的伺服器上請求的配置設定率;權重資料越大,被配置設定到請求的幾率越大;該權重值,主要是針對實際工作環境中不同的後端伺服器硬體配置進行調整的。
  • ip_hash:每個請求按照發起用戶端的ip的hash結果進行比對,這樣的算法下一個固定ip位址的用戶端總會通路到同一個後端伺服器,這也在一定程度上解決了叢集部署環境下session共享的問題。
  • fair:智能調整排程算法,動态的根據後端伺服器的請求處理到響應的時間進行均衡配置設定,響應時間短處理效率高的伺服器配置設定到請求的機率高,響應時間長處理效率低的伺服器配置設定到的請求少;結合了前兩者的優點的一種排程算法。但是需要注意的是nginx預設不支援fair算法,如果要使用這種排程算法,請安裝upstream_fair子產品
  • url_hash:按照通路的url的hash結果配置設定請求,每個請求的url會指向後端固定的某個伺服器,可以在nginx作為靜态伺服器的情況下提高緩存效率。同樣要注意nginx預設不支援這種排程算法,要使用的話需要安裝nginx的hash軟體包

實驗目的

  • 通過通路nginx位址,實作動靜分離
  • 動态請求自動轉到Tomcat處理,還要實作靜态資源存放在nginx伺服器中,但Tomcat仍舊能夠加載出資源(以圖檔為例)
  • 靜态請求轉到nginx處理

實驗環境

VMware軟體

一台centos7系統作為nginx伺服器,IP位址:14.0.0.77,主機名:nginx

兩台centos7系統作為Tomcat伺服器,IP位址:14.0.0.110、14.0.0.177 ,主機名:tomcat01、tomcat02

實驗過程

首先實作動靜分離

1. 實驗環境準備

分别設定主機名、關閉防火牆、關閉增強型核心防護功能

分别對三台伺服器進行設定
[[email protected] ~]# hostnamectl set-hostname nginx
[[email protected] ~]# hostnamectl set-hostname tomcat01
[[email protected] ~]# hostnamectl set-hostname tomcat02
三台伺服器都要進行操作
[[email protected] ~]# systemctl stop firewalld.service 
[[email protected] ~]# setenforce 0
           

2. 手工安裝nginx

在目前目錄将軟體包拷貝進來

[[email protected] ~]# yum -y install pcre-devel pcre zlib-devel gcc gcc-c++    ##安裝環境包
[[email protected] ~]# useradd -M -s /sbin/nologin nginx
[[email protected] ~]# tar xzvf nginx-1.12.0.tar.gz -C /usr/local/
[[email protected] ~]# cd /usr/local/nginx-1.12.0/
[root@nginx nginx-1.12.0]# ./configure   ##配置
--prefix=/usr/local/nginx\
--user=nginx\
--group=nginx\   
--with-http_stub_status_module
[root@nginx nginx-1.12.0]# make && make install   ##編譯安裝
[root@nginx nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin
[root@nginx nginx-1.12.0]# cd /etc/init.d/    
[[email protected] init.d]# vim nginx    ##編輯啟動腳本
#!/bin/bash
#chkconfig:-  99 20
#description:Nginx Service Control Script
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
[[email protected] init.d]# chmod +x nginx 
[[email protected] init.d]# chkconfig --add nginx
[[email protected] init.d]# service nginx start 
[[email protected] init.d]# netstat -ntap | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      16436/nginx: master 
           
群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離

3. 手工編譯安裝tomcat

安裝JDK

将軟體包拷貝到目前目錄
[[email protected] ~]# tar zvxf jdk-8u91-linux-x64.tar.gz  -C /usr/local/
[[email protected] ~]# vim /etc/profile     ##配置環境變量
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
[[email protected] ~]# source /etc/profile   ##加載環境變量
           

安裝tomcat

[[email protected] ~]# tar zvxf apache-tomcat-8.5.16.tar.gz -C /usr/local/
[[email protected] ~]# cd /usr/local/
[[email protected] local]# mv apache-tomcat-8.5.16/ tomcat
[[email protected] local]# ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin
[[email protected] local]# ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin
[[email protected] local]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[[email protected] local]# netstat -ntap | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      12683/java    
           
群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離

4. 動靜分離配置

  • nginx配置
設定動态請求交由Tomcat處理
[[email protected] init.d]# cd /usr/local/nginx/conf/
[[email protected] conf]# vim nginx.conf
 server {
        listen       80;
        server_name  localhost;
        添加以下内容
        location ~.*.jsp$ {
          proxy_pass http://14.0.0.110:8080;
          proxy_set_header Host $host;
        }
           
設定靜态網頁内容,友善識别
[[email protected] conf]# cd ../html/
[[email protected] html]# vim index.html
<!DOCTYPE html>
<html>
<head>
<title>靜态頁面</title>	'//修改标題'
<meta http-equiv="content-type" content="text/html;charset=utf-8">	'//設定支援中文字元集'
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>靜态網站</h1>	'//修改内容主題'
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>這是一個靜态網頁.</em></p>	'//設定頁尾内容'
</body>
</html>
[[email protected] html]# service nginx stop
[[email protected] html]# service nginx start
           
群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離
  • tomcat配置
[[email protected] conf]# mkdir /usr/local/tomcat/webapps/test
[[email protected] conf]# vim /usr/local/tomcat/webapps/test/index.jsp
<!DOCTYPE html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<!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=UTF-8">
<title>動态頁面</title>
</head>
<body>
<div>動态頁面</div>
</body>
</html>
[[email protected] conf]# shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[[email protected] conf]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
           
群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離

5. 圖檔的動靜分離

群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離

如果不是動靜分離的話,我們應該将圖檔放到tomcat的站點目錄下,但是要實作圖檔的動靜分離,将圖檔等靜态資源放到nginx的目錄下。配置如下

[[email protected] html]# cd ../conf/
[[email protected] conf]# vim nginx.conf
 location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
          root html;
          expires 30d;
        }
           
群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離
[[email protected] conf]# cd ../html/
[[email protected] html]# mkdir test   ##這個目錄名一定要與tomcat站點目錄一樣,否則報錯
[[email protected] html]# cd test/
一定要将圖檔拷貝到目前目錄下
[[email protected] test]# ls
games.png
[[email protected] test]# service nginx restart 
           
群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離

6. tomcat 群集

在伺服器tomcat02上進行tomcat手工編譯安裝,步驟與tomcat01一樣,這裡就不做示範。步驟從安裝完成後開始。

為兩個啟動、關閉腳本建立軟連接配接後
[[email protected] tomcat]# mkdir -pv /web/webapp1
mkdir: 已建立目錄 "/web"
mkdir: 已建立目錄 "/web/webapp1"
[[email protected] tomcat]# 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("Welcome HEllo World Web");%>    '//輸出的資訊,Tomcat2節點内容設定為Welcome No HEllo World Web'
 </body>
</html>
           

修改tomcat 配置檔案

[[email protected] tomcat]# vim /usr/local/tomcat/conf/server.xml
[[email protected] webapp1]# vim /usr/local/tomcat/conf/server.xml 	'//修改配置檔案中站點資訊'
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
            添加以下資訊
        <Context docBase="/web/webapp1" path="" reloadable="false">    
        </Context>
'//docBase:web應用的文檔基準目錄,reloadable:設定監視“類”是否變化,path:設定預設“類”'

           
群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離

對服務進行重新開機

[[email protected] tomcat]# shutdown.sh
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[[email protected] tomcat]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[[email protected] tomcat]# 

           

進行通路測試

群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離

在tomcat01伺服器建立站點

[[email protected] test]# mkdir -pv /web/webapp1
mkdir: 已建立目錄 "/web"
mkdir: 已建立目錄 "/web/webapp1"
[[email protected] test]# 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("Welcome No HEllo World Web");%>
 </body>
</html>

           

修改主配置檔案

群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離

進行重新開機

[[email protected] test]# shutdown.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[[email protected] test]# startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
           

在虛拟機進行通路測試

群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離

7. nginx 做反向代理

[[email protected] test]# vim /usr/local/nginx/conf/nginx.conf
 upstream tomcat-server {    
                        server 14.0.0.110:8080 weight=1;
                        server 14.0.0.177:8080 weight=1;
                    }
...
省略部配置設定置檔案
location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://tomcat_server;	'//設定轉發到節點伺服器'
        }
           
群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離
群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離

檢查文法

[[email protected] test]# 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
[[email protected] test]# service nginx restart
           

8. 測試

在虛拟機中進行測試

群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離
群集--Nginx+Tomcat 群集(Tomcat 的應用場景、搭建 Nginx+Tomcat 負載均衡、動靜分離實操)一、 Tomcat 的應用場景二、 搭建Nginx+Tomcat負載均衡與動靜分離

繼續閱讀