最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Nginx+Tomcat實現負載均衡的全過程

 更新時間:2022年05月29日 10:21:58   作者:zj233333  
很多用到nginx的地方都是作為靜態(tài)伺服器,這樣可以方便緩存那些靜態(tài)文件,比如CSS,JS,html,htm等文件,下面這篇文章主要給大家介紹了關于使用Nginx+Tomcat實現負載均衡的相關資料,需要的朋友可以參考下

Nginx + Tomcat 實現負載均衡

1. 環(huán)境

Linux version:  5.4.0-96-generic
OS Version:     ubuntu1~20.04
Architecture:   amd64
Nginx version:  nginx/1.18.0 (Ubuntu)
JVM Version:    11.0.15+10-Ubuntu-0ubuntu0.20.04.1
Tomcat Version: Apache Tomcat/9.0.63

2. 安裝

2.1 安裝 Nginx

在命令行輸入:

sudo apt-get install nginx

測試命令:

sudo nginx -t

窗口顯示:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

在瀏覽器輸入服務器 ip:

image-20220525212228322

2.2 安裝 Java

安裝 jdk:

sudo apt-get -y install openjdk-11-jdk

查看版本:

java --version

輸出如下:

openjdk 11.0.15 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1, mixed mode, sharing)

安裝成功。

查看 Java 的安裝位置:

update-alternatives --config java

輸出如下:

There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-11-openjdk-amd64/bin/java

將 $JAVA_HOME 添加到環(huán)境變量:

sudo vim $HOME/.bashrc
shift+G

在行尾添加:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$PATH:$JAVA_HOME

退出 vim ,激活環(huán)境變量:

source $HOME/.bashrc

驗證環(huán)境變量:

echo $JAVA_HOME

輸出如下,激活成功。

/usr/lib/jvm/java-11-openjdk-amd64

2.3 安裝 Tomcat

官網下載的 Tomcat 9.0.63,注意需為 Core/tar.gz(pgp, sha512) 版本,或 點此下載 ,將文件上傳到服務器中的路徑 /usr/local 下,輸入下列命令解壓:

cd /usr/local && tar -zxvf apache-tomcat-9.0.63.tar.gz

配置環(huán)境變量,打開 Tomcat 啟動腳本:

cd apache-tomcat-9.0.63 && vim bin/startup.sh
shift+G

在語句 exec "$PRGDIR"/"$EXECUTABLE" start "$@" 的上一行插入下列語句:

JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME
CLASSPATH=.:$JRE_HOME/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
TOMCAT_HOME=/usr/local/apache-tomcat-9.0.63

保存并退出。

開放服務器的 8080 端口:

firewall-cmd --zone=public --add-port=8080/tcp --permanent

重啟防火墻

systemctl restart firewalld.service

去云服務器管理控制臺添加安全組:

image-20220525234438235

運行:

./bin/shutdown.sh && rm -rf logs/catalina.out && ./bin/startup.sh ; tail -f logs/catalina.out

輸出應該如下所示:

在瀏覽器訪問 $ip:8080,顯示:

image-20220526002245669

說明你配置成功。

3. 部署

3.1 Tomcat 服務器部署

本實驗需要使用 3 個端口,分別使用 8001,8082,8083,在騰訊云控制臺開放端口后,在 shell 中手動開放端口并重啟防火墻:

firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --zone=public --add-port=8082/tcp --permanent
firewall-cmd --zone=public --add-port=8083/tcp --permanent
systemctl restart firewalld.service

注意去騰訊云開啟你的安全組

我們使用 Tomcat 自帶的 3 個 Web 項目來實現不同的端口訪問不同的應用,假設你完全按照上文的方式操作,那么此時你的 Tomcat 為 /usr/local/apache-tomcat-9.0.63,根據根路徑打開服務器的配置文件:

cd /usr/local/apache-tomcat-9.0.63/conf && vim server.xml

刪除掉原代碼,換成以下代碼:

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
     <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
     <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
     <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
     <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
     <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
     <GlobalNamingResources>
     <Resource name="UserDatabase" auth="Container"
               type="org.apache.catalina.UserDatabase"
               description="User database that can be updated and saved"
               factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
               pathname="conf/tomcat-users.xml" />
     </GlobalNamingResources>

     <Service name="Catalina">
          <Connector port="8081" protocol="HTTP/1.1"
                    connectionTimeout="20000"
                    redirectPort="8443" />
               <Engine name="Catalina" defaultHost="localhost">
                    <Realm className="org.apache.catalina.realm.LockOutRealm">
                    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                         resourceName="UserDatabase"/>
                    </Realm>
                    <Host name="localhost"  appBase="webapps"
                         unpackWARs="true" autoDeploy="true">
                         <Context path="" docBase="ROOT" reloadable="true" />
                         <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>

     <Service name="Catalina2">
          <Connector port="8082" protocol="HTTP/1.1"
                    connectionTimeout="20000"
                    redirectPort="8443" />
               <Engine name="Catalina2" defaultHost="localhost">
                    <Realm className="org.apache.catalina.realm.LockOutRealm">
                    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                         resourceName="UserDatabase"/>
                    </Realm>
                    <Host name="localhost"  appBase="webapps"
                         unpackWARs="true" autoDeploy="true">
                         <Context path="" docBase="examples" reloadable="true" />
                         <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>

     <Service name="Catalina3">
          <Connector port="8083" protocol="HTTP/1.1"
                    connectionTimeout="20000"
                    redirectPort="8443" />
               <Engine name="Catalina3" defaultHost="localhost">
                    <Realm className="org.apache.catalina.realm.LockOutRealm">
                    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
                         resourceName="UserDatabase"/>
                    </Realm>
                    <Host name="localhost"  appBase="webapps"
                         unpackWARs="true" autoDeploy="true">
                         <Context path="" docBase="examples/websocket" reloadable="true" />
                         <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>

這樣,通過 $ip:8081、$ip:8082、$ip:8083 分別訪問就可以得到不同的服務端。

8083 端口的資源不完整,因為 Tomcat 默認只提供了 2 個有效的 app,第三個端口會返回一個 404 頁面,某種程度上它也是一個應用。

3.2 Nginx 反向代理

編輯 nginx.conf 配置文件:

vim /etc/nginx/nginx.conf

將下列語句插入到模塊 http 的末尾:

upstream tomcat_server {
    server 101.42.117.143:8081;
    server 101.42.117.143:8082;
    server 101.42.117.143:8083;
}

server {
    listen 80;
    server_name 101.42.117.143;

    location / {
        proxy_pass http://tomcat_server;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

啟動或重啟 nginx:

nginx 或 nginx -s reload

這樣,可以直接訪問 80 端口,或 $ip 后將其代理到后端的 3 臺服務器上。

nginx 默認采用輪詢策略。

4. 負載均衡

4.1 輪詢

輪詢策略 nginx.conf 的配置如下:

upstream tomcat_server {
    server 101.42.117.143:8081 weight=1;
    server 101.42.117.143:8082 weight=1;
    server 101.42.117.143:8083 weight=1;
}

server {
    listen 80;
    server_name 101.42.117.143;

    location / {
        proxy_pass http://tomcat_server;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

重啟 nginx:

nginx -s reload

使用 postman 頻繁訪問,頁面出現的頻率是 ABC ABC ABC ABC。

4.2 加權輪詢

加權輪詢策略 nginx.conf 的配置如下:

upstream tomcat_server {
    server 101.42.117.143:8081 weight=1;
    server 101.42.117.143:8082 weight=3;
    server 101.42.117.143:8083 weight=5;
}

server {
    listen 80;
    server_name 101.42.117.143;

    location / {
        proxy_pass http://tomcat_server;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

重啟 nginx:

nginx -s reload

使用 postman 頻繁訪問,頁面出現的頻率是 CBCACBCBC CBCACBCBC。

該算法稱為提案者輪換選擇算法,每一輪都會將被選中的對象減去總權重值,每一輪都會將各結點的權重值加上固定的預設權重值,這是一個公平的輪換算法,可以防止權重過大的結點持續(xù)占據資源。過程如下:

初始權重加權選擇選中者減去權重和
0 0 01 3 5C1 3 -4
1 3 -42 6 1B2 -3 1
2 -3 13 0 6C3 0 -3
3 0 -34 3 2A-5 3 2
-5 3 2-4 6 7C-4 6 -2
-4 6 -2-3 9 3B-3 0 3
-3 0 3-2 3 8C-2 3 -1
-2 3 -1-1 6 4B-1 -3 4
-1 -3 40 0 9C0 0 0
0 0 01 3 5C1 3 -4
1 3 -42 6 1B2 -3 1
2 -3 13 0 6C3 0 -3

4.2 IP Hash

IP Hash 策略 nginx.conf 的配置如下:

upstream tomcat_server {
    server 101.42.117.143:8081;
    server 101.42.117.143:8082;
    server 101.42.117.143:8083;
    ip_hash;
}

server {
    listen 80;
    server_name 101.42.117.143;

    location / {
        proxy_pass http://tomcat_server;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

重啟 nginx:

nginx -s reload

它會將主機的 $ip 哈希映射到一個隨機的固定值,然后對 3 取模得到響應的端口序號;

使用主機 1 的 postman 頻繁訪問,頁面出現的頻率是 AAAAAA;

使用主機 2 的 postman 頻繁訪問,頁面出現的頻率是 BBBBBB。

總結

到此這篇關于使用Nginx+Tomcat實現負載均衡的文章就介紹到這了,更多相關Nginx+Tomcat負載均衡內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Kubernetes之安裝nginx-controller作為統一網關方式

    Kubernetes之安裝nginx-controller作為統一網關方式

    這篇文章主要介紹了Kubernetes之安裝nginx-controller作為統一網關方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • LNMP簡介(最新推薦)

    LNMP簡介(最新推薦)

    LNMP是指一組通常一起使用來運行動態(tài)網站或者服務器的自由軟件名稱首字母縮寫,L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python
    2023-08-08
  • 服務器報錯nginx?502?Bad?Gateway的原因及如何解決詳解

    服務器報錯nginx?502?Bad?Gateway的原因及如何解決詳解

    項目啟動時莫名其妙網站訪問不了,502 Bad Gateway,下面這篇文章主要給大家介紹了關于服務器報錯nginx?502?Bad?Gateway的原因及如何解決的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • Nginx http升級到https的完整步驟

    Nginx http升級到https的完整步驟

    這篇文章主要給大家介紹了關于Nginx http升級到https的完整步驟,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Nginx具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • Nginx中的文件下載服務器詳解

    Nginx中的文件下載服務器詳解

    利 用Nginx的諸多內置指令可實現自動生成下載文件列表 頁、限制下載帶寬等功能,這篇文章給大家介紹Nginx中的文件下載服務器功能,感興趣的朋友一起看看吧
    2024-06-06
  • nginx?ingress代理websocket流量的配置方法

    nginx?ingress代理websocket流量的配置方法

    ingress?nginx默認支持websocket協議,使用長連接協議時需要注意連接超時的設置,文中有提到讀取和發(fā)送超時的注解參數,通過本文閱讀可以快速掌握,對nginx?ingress代理websocket相關知識感興趣的朋友一起看看吧
    2022-03-03
  • Nginx啟動時80端口被占用的問題解決

    Nginx啟動時80端口被占用的問題解決

    本文主要介紹了在啟動Nginx時遇到80端口被占用的問題及解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12
  • nginx配置客戶端保存cookie的實現

    nginx配置客戶端保存cookie的實現

    本文主要介紹了nginx配置客戶端保存cookie的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • nginx中proxy_set_header參數的實現

    nginx中proxy_set_header參數的實現

    本文詳細介紹了Nginx中proxy_set_header指令的用法,通過設置不同的請求頭信息,可以實現更靈活的反向代理功能,具有一定的參考價值,感興趣的可以了解一下
    2024-12-12
  • Nginx服務器中使用gzip壓縮的相關配置解析

    Nginx服務器中使用gzip壓縮的相關配置解析

    這篇文章主要介紹了Nginx服務器中使用gzip壓縮的相關配置解析,包括對gzip請求處理相關的壓縮配置,需要的朋友可以參考下
    2015-12-12

最新評論

绍兴县| 肇源县| 军事| 增城市| 界首市| 昌宁县| 云南省| 察哈| 阿勒泰市| 深圳市| 海阳市| 乐清市| 茶陵县| 乐昌市| 洛浦县| 衡水市| 永靖县| 达孜县| 靖安县| 博湖县| 武定县| 江津市| 东海县| 太白县| 名山县| 昌图县| 马龙县| 江山市| 吉隆县| 七台河市| 同江市| 安多县| 沈阳市| 马公市| 樟树市| 洱源县| 安达市| 罗田县| 琼结县| 涞水县| 广宁县|