1. はじめに まず、1 台のマシンで複数のインスタンスを使用する理由という質問に答える必要があります。 2. システム環境 システム: 16.04.5 LTS 3. 環境構築 3.1、Tomcatをダウンロード jdk をインストールします: apt-get で openjdk-8-jdk をインストールします 公式サイトにアクセスしてください: https://tomcat.apache.org/download-90.cgi コアを見つけて、tar.gz をクリックし、ダウンロード リンクがポップアップ表示されたらダウンロード アドレスをコピーします。 http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.13/bin/apache-tomcat-9.0.13.tar.gz を取得します。 tomcatを解凍します: tar -xzvf apache-tomcat-9.0.13.tar.gz プログラム ディレクトリを作成します。 ##プログラムディレクトリを作成する mkdir /data ##解凍したファイルをデータディレクトリに移動します mv ./apache-tomcat-9.0.13 /data/ cp /etc/profile /etc/profile.bak echo "CATALINA_HOME=/data/apache-tomcat-9.0.13" をエクスポート >> /etc/profile echo "export PATH=\$PATH:\$CATALINA_HOME/bin">> /etc/profile && source /etc/profile ##sh ファイルを作成します touch tomcat-start.sh tomcat-stop.sh ##権限を変更する chmod 760 /data/tomcat-start.sh /data/tomcat-stop.sh プロファイルをバックアップし、Tomcat の CATALINA_HOME を環境変数に書き込み、環境変数を有効にします。 作成するtomcat-start.sh の内容は次のとおりです。 #!/bin/bash ##CATALINA_BASE は、現在のスクリプトの親ディレクトリです。CATALINA_BASE のサブディレクトリにない場合は、export CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd) を変更することを忘れないでください。 $CATALINA_BASE をエコーする TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'` if [ -n "$TOMCAT_ID" ] ; then echo "tomcat($TOMCAT_ID) はまだ実行中です。まずシャットダウンしてください"; 出口2; フィ TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh` [ "$?" = "0" ]の場合; echo "シェルスクリプト: $0" 「CATALINA_BASE: $CATALINA_BASE」をエコーします echo "Tomcat スレッド: $TOMCAT_ID" echo "開始成功!!!" それ以外 echo "$0 $CATALINA_BASE の起動に失敗しました" $TOMCAT_START_LOG をエコーします フィ 作成するtomcat-stop.sh の内容は次のとおりです。 #!/bin/bash ##CATALINA_BASE は、現在のスクリプトの親ディレクトリです。CATALINA_BASE のサブディレクトリにない場合は、export CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd) を変更することを忘れないでください。 $CATALINA_BASE をエコーします TOMCAT_ID=`ps aux |grep "java"|grep "[D]catalina.base=$CATALINA_BASE "|awk '{ print $2}'` if [ -n "$TOMCAT_ID" ] ; then TOMCAT_STOP_LOG=`$CATALINA_HOME/bin/shutdown.sh` それ以外 echo "Tomcat インスタンスが見つかりません: $CATALINA_BASE" 出口 フィ [ "$?" = "0" ]の場合; echo "シェルスクリプト: $0" 「CATALINA_BASE: $CATALINA_BASE」をエコーします echo "停止成功!!!" それ以外 echo "$0 $CATALINA_BASE の停止に失敗しました" $TOMCAT_STOP_LOG をエコーします フィ 2 つの Tomcat をコピーします。 ##lib および bin フォルダの内容を完全に削除し、空の bin フォルダを生成します cp -r apache-tomcat-9.0.13 /data/apache-tomcat-test1 && cd /data/apache-tomcat-test1 && rm -rf lib/ bin/ && mkdir bin && cd - ## 起動スクリプトと停止スクリプトを bin フォルダにコピーし、権限をつけてコピーします cp -p tomcat-start.sh tomcat-stop.sh /data/apache-tomcat-test1/bin/ ##同じ tomcat ディレクトリを権限付きでコピーします cp -Rp /data/apache-tomcat-test1/ /data/apache-tomcat-test2/ server.xml ポートを構成する ご存知のとおり、同じサーバーにデプロイされた異なる Tomcat には異なるポートを設定する必要があります。そうしないとポートの競合が発生するため、conf/server.xml の最初の 3 つのポートのみを変更する必要があります。しかし、次の 4 つがあります。
コメントなしバージョン: <?xml バージョン="1.0" エンコーディング="UTF-8"?> <サーバーポート="8005" シャットダウン="シャットダウン"> <リスナークラス名="org.apache.catalina.startup.VersionLoggerListener" /> <リスナークラス名="org.apache.catalina.core.AprLifecycleListener" SSLEngine="オン" /> <リスナークラス名="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <リスナークラス名="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <リスナークラス名="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <グローバル命名リソース> <リソース名="UserDatabase" auth="コンテナ" タイプ="org.apache.catalina.UserDatabase" description="更新および保存できるユーザーデータベース" ファクトリー="org.apache.catalina.users.MemoryUserDatabaseFactory" パス名="conf/tomcat-users.xml" /> </グローバル命名リソース> <サービス名="Catalina"> <コネクタ ポート="8080" プロトコル="HTTP/1.1" 接続タイムアウト = "20000" リダイレクトポート="8443" /> <コネクタ ポート="8009" プロトコル="AJP/1.3" リダイレクト ポート="8443" /> <エンジン名="Catalina" defaultHost="localhost"> <レルムクラス名="org.apache.catalina.realm.LockOutRealm"> <レルムクラス名="org.apache.catalina.realm.UserDatabaseRealm" リソース名="ユーザーデータベース"/> </レルム> <ホスト名="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve クラス名="org.apache.catalina.valves.AccessLogValve" ディレクトリ="logs" プレフィックス="localhost_access_log" サフィックス=".txt" パターン="%h %l %u %t "%r" %s %b" /> </ホスト> </エンジン> </サービス> </サーバー> tomcat-test1 は次のように変更されます:
tomcat-test2 は次のように変更されます:
ロゴを変更します: echo "test1"> /data/apache-tomcat-test1/webapps/ROOT/index.jsp echo "test2"> /data/apache-tomcat-test2/webapps/ROOT/index.jsp 変更が完了したら、Tomcat を起動します。 Apache Tomcat テスト 1 の bin/Tomcat 開始.sh Apache Tomcat テスト 2 の bin/Tomcat 開始.sh カール処理はまだ完了していないため、比較的遅くなります。起動したら大丈夫です。 カール 127.0.0.1:9010 カール 127.0.0.1:9020 ここでのアクセスポートは 4. 追記 実は、設定は難しくありません。参考記事のアイデアによると、Tomcat の lib と bin を共有することです。このようにすると、アップグレード時に lib を交換するだけで済み、bin は CATALINA_HOME の同じスクリプトを使用します。実際、CATALINA_HOME の下の bin の下の起動スクリプトとシャットダウン スクリプトは、一様に catalina.sh を呼び出し、単一マシンのマルチインスタンス システムは 5. 質問 5.1. Tomcat の起動が遅い セッション ID の生成に 1 分 6 秒かかり、長すぎるため、アプリケーションの展開にかかる全体的な時間が大幅に増加していることがわかります。この問題は、アプリケーションの起動時に jvm パラメータ #!/bin/bash ##CATALINA_BASE は、現在のスクリプトの親ディレクトリです。CATALINA_BASE のサブディレクトリにない場合は、export CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd) を変更することを忘れないでください。 $CATALINA_BASE をエコーする TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'` エクスポート JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"; if [ -n "$TOMCAT_ID" ] ; then echo "tomcat($TOMCAT_ID) はまだ実行中です。まずシャットダウンしてください"; 出口2; フィ TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh` [ "$?" = "0" ]の場合; echo "シェルスクリプト: $0" 「CATALINA_BASE: $CATALINA_BASE」をエコーします echo "Tomcat スレッド: $TOMCAT_ID" echo "開始成功!!!" それ以外 echo "$0 $CATALINA_BASE の起動に失敗しました" $TOMCAT_START_LOG をエコーします フィ 5.2. リモートsshを使用する場合、環境変数は有効になりません 現在の環境変数を更新するには、source コマンドを使用します。 具体的な変更点は以下のとおりです。 #!/bin/bash ##CATALINA_BASEは現在のスクリプトの親ディレクトリです。CATALINA_BASEのサブディレクトリにない場合は、ソースの/etc/profileを変更することを忘れないでください。 エクスポート CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd) エクスポート JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"; TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'` エコー "----------------------------------" echo "CATALINA_BASE:$CATALINA_BASE を使用しています" echo "CATALINA_HOME:$CATALINA_HOME を使用しています" エコー "----------------------------------" if [ -n "$TOMCAT_ID" ] ; then echo "tomcat($TOMCAT_ID) はまだ実行中です。まずシャットダウンしてください"; 出口2; フィ TOMCAT_START_LOG=`$CATALINA_HOME/bin/startup.sh` [ "$?" = "0" ]の場合; echo "シェルスクリプト: $0" echo "Tomcat スレッド: $TOMCAT_ID" echo "開始成功!!!" それ以外 echo "$0 $CATALINA_BASE の起動に失敗しました" 「CATALINA_BASE: $CATALINA_BASE」をエコーします $TOMCAT_START_LOG をエコーします フィ
#!/bin/bash ## CATALINA_BASEは現在のスクリプトの親ディレクトリです。CATALINA_BASEのサブディレクトリにない場合は、ソースの/etc/profileを変更することを忘れないでください。 エクスポート CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd) TOMCAT_ID=`ps aux |grep "java"|grep "[D]catalina.base=$CATALINA_BASE "|awk '{ print $2}'` エコー "----------------------------------" echo "CATALINA_BASE:$CATALINA_BASE を使用しています" echo "CATALINA_HOME:$CATALINA_HOME を使用しています" エコー "----------------------------------" if [ -n "$TOMCAT_ID" ] ; then TOMCAT_STOP_LOG=`$CATALINA_HOME/bin/shutdown.sh` それ以外 echo "Tomcat インスタンスが見つかりません: $CATALINA_BASE" 出口 フィ [ "$?" = "0" ]の場合; echo "シェルスクリプト: $0" echo "停止成功!!!" それ以外 echo "$0 $CATALINA_BASE の停止に失敗しました" 「CATALINA_BASE: $CATALINA_BASE」をエコーします $TOMCAT_STOP_LOG をエコーします フィ 再起動スクリプトを添付します: #!/bin/bash ソース /etc/profile エクスポート CATALINA_BASE=$(cd $(dirname $0); cd .. ; pwd) GREEN_COLOR='\E[1;32m' # 緑 RES='\E[0m' TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'` スリープ時間=1 エコー "----------------------------------" echo "CATALINA_BASE:$CATALINA_BASE を使用しています" echo "CATALINA_HOME:$CATALINA_HOME を使用しています" エコー "----------------------------------" if [ -n "$TOMCAT_ID" ] ; then echo -e "${GREEN_COLOR}pid $TOMCAT_ID で tomcat インスタンスが見つかりました。今すぐシャットダウンしてください!${RES}"; echo -e "${GREEN_COLOR}---------------start shut down-------------------${RES}" ソース $(dirname $0)/tomcat-stop.sh; echo -e "${GREEN_COLOR}--------------- シャットダウン終了 -------------------${RES}" フィ [ -n "$TOMCAT_ID" ] の間 する スリープ $SLEEP_TIME echo wait "$SLEEP_TIME" s TOMCAT_ID=`ps aux |grep "java"|grep "Dcatalina.base=$CATALINA_BASE "|grep -v "grep"|awk '{ print $2}'` 終わり echo -e "${GREEN_COLOR}---------------スタートアップを開始-------------------${RES}" ソース $(dirname $0)/tomcat-start.sh echo -e "${GREEN_COLOR}---------------スタートアップ終了-------------------${RES}" 参考ブログ: Tomcatの単一マシン複数インスタンスについてお話しましょう Spring Boot アプリケーションの初回起動が遅い 単一マシン上での Tomcat の複数インスタンスの実装に関するこの記事はこれで終わりです。単一マシン上での Tomcat の複数インスタンスに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 画像のフェードインとフェードアウト効果を実現する js
>>: MySQL が大規模トランザクションを避けるべき理由とその解決方法
1. まず、次のパスに従って対応するフォルダを作成します。 ローカルのdockerでmysqlを実行...
1. MySQL WorkbenchをダウンロードするWorkbench は、MySQL のグラフィ...
まず解決策を見てみましょう #------------mysql の root ユーザーに権限を付与...
目次前提条件使用効果コミット前ミューテーション効果コミットミューテーション効果コミットレイアウト効果...
まず次のコマンドを実行します: [root@mini61 setuptools-8.2.1]# py...
<br />注目を集めるウェブサイトを作成するには、どのような原則に従うべきでしょうか?...
Linux CentOS 7.7 システムを Vmware にインストールする方法。最小限のインスト...
目次導入1. one-click.jsとは2. パッケージングツールはどのように機能しますか? 3....
目次序文文章パラメータ例Lodash 実装:トーキー機能: castPath関数: stringTo...
序文プロジェクトのニーズに応じて、Vue-touch を使用して、vue モバイル端末の左スワイプ編...
前書き: MySQL でテーブルを設計する場合、MySQL では UUID や非連続かつ非繰り返しの...
MySQLのインストール(4、5、6は省略可能)ステートメント: CentOS のバージョンは 7....
1. 新旧ドメイン名のジャンプ適用シナリオ: ドメイン名ベースのリダイレクト。会社の古いドメイン名は...
ディスプレイ定義IDテーブルに定義された自動増分IDが上限に達した場合、次のIDを申請する際に得られ...
アーティストになるつもりがない場合は、開発者として HTML を読んで、必要に応じて簡単な変更を加え...