• Tomcat多实例及负载均衡


    Tomcat多实例配置
    ==================面试==========
    一般在在公司中一个实例的内存为4-8个G ,一个实例最高有400个并发量
    一般来说一台机器最多10个左右实例,普遍设置8个实例
    并发量:同一个时间,用户最多有多少访问量
    例子:要处理20000的并发量,需要几台机器
    20000/400=50(个实例) 50/10=5(台)nginx调度器需要2台(一主一备) 数据库需要2台 (一主一备)   并且要保证机器的内存要有64G才能够搞定2万的并发量
    所以要处理2万的并发量至少要10台服务器
    =================================

    Tomcat多实例配置
    应用程序需要部署在服务器上时Tomcat软件的部署方式可以分为以下几种:
    单实例单应用(webapps/a)  ///只有一个Java进程,只提供一个页面(一个实例是一个进程)
    单实例多应用(webapps/{a,b}) ///一个进程,多个页面
    多实例单应用     ///多个进程跑一个服务页面
    多实例多应用     ///
    实例的概念可以先理解为一个Tomcat目录中的一个工作子目录
    【1】单实例单应用:比较常用的一种方式,只需要把做好的war包丢在webapps 目录下,执行启动Tomcat的脚本就行了。
    【2】单实例多应用有两个不同的Web项目的war包,还是只需要丢在webapps目录下,执行启动Tomcat 的脚本,访问不同项目会加载不同的WEB虚拟目录。这种方式在生产环境中要慎用,因为重启或挂掉Tomcat程序后会影响另外一个应用的访问。。
    【3】多实例单应用:多 个Tomcat实例部署同一个项目,端口号不同,可以利用Nginx做负载均衡。
    【4】多实例多应用, 多个Tomcat实例部署多个不同的项目。这种模式在服务器资源有限,或者对服务器资源要求并不是很高的情况下,可以实现多个不同项目部署在同一台服务器上的需求,来实现资源使用的最大化。。
    =================================
    a、解压并部署tomcat程序。
    [root@localhost ~]# /usr/local/tomcat8/bin/shutdown.sh
    [root@localhost ~]# rm -rf /usr/local/tomcat8/ /web/    //把之前装的给卸掉重新安装tomcat
    [root@localhost ~]# tar xf apache-tomcat-8.5.40.tar.gz
    [root@localhost ~]# mv apache-tomcat-8.5.40 /usr/local/
    [root@localhost ~]# ls /usr/local/
    apache-tomcat-8.5.40  games    lib      nginx  src
    bin                   include  lib64    sbin
    etc                   java     libexec  share
    b、创建两个实例的工作目录
    [root@localhost ~]# mkdir -p /usr/local/tomcat_instance/tomcat1
    [root@localhost ~]# mkdir -p /usr/local/tomcat_instance/tomcat2
    c、拷贝tomcat程序目录下的conf 目录分别放入2个实例目录中
    [root@localhost ~]# cp -R /usr/local/apache-tomcat-8.5.40/conf/ /usr/local/tomcat_instance/tomcat1
    [root@localhost ~]# cp -R /usr/local/apache-tomcat-8.5.40/conf/ /usr/local/tomcat_instance/tomcat2
    d、在tomcat实例目录下的bin目录中创建实例启动和停止脚本
    启动脚本
    [root@localhost ~]# mkdir /usr/local/tomcat_instance/tomcat1/bin
    [root@localhost ~]# mkdir /usr/local/tomcat_instance/tomcat2/bin
    [root@localhost ~]# touch /usr/local/tomcat_instance/tomcat1/bin/startup.sh
    [root@localhost ~]# chmod +x /usr/local/tomcat_instance/tomcat1/bin/startup.sh
    [root@localhost ~]# touch /usr/local/tomcat_instance/tomcat2/bin/startup.sh
    [root@localhost ~]# chmod +x /usr/local/tomcat_instance/tomcat2/bin/startup.sh
    [root@localhost ~]# ls /usr/local/tomcat_instance/
    tomcat1  tomcat2
    [root@localhost ~]# ls /usr/local/tomcat_instance/tomcat1
    bin  conf
    [root@localhost ~]# ls /usr/local/tomcat_instance/tomcat1/conf/
    catalina.policy       logging.properties
    catalina.properties   server.xml
    context.xml           tomcat-users.xml
    jaspic-providers.xml  tomcat-users.xsd
    jaspic-providers.xsd  web.xml
    [root@localhost ~]# ls /usr/local/tomcat_instance/tomcat1/bin/
    startup.sh
    [root@localhost ~]# ls /usr/local/tomcat_instance/tomcat2/bin/
    startup.sh
    ··································
    修改startup.sh 文件
    [root@localhost ~]# vim /usr/local/tomcat_instance/tomcat1/bin/startup.sh
    #!/bin/bash
    export CATALINA_HOME="/usr/local/apache-tomcat-8.5.40"
    export CATALINA_BASE="/usr/local/tomcat_instance/tomcat1"
    export CATALINA_TMPDIR="$CATALINA_BASE/temp"
    export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"
    export JAVA_OPTS="-server -Xms1024m -Xmx1024m -Djava.awt.headless=true -Dtomcat.name=tomcat1"
    #创建logs目录
    if [ ! -d "$CATALINA_BASE/logs" ]
    then
            mkdir $CATALINA_BASE/logs
    fi
    #创建temp目录
    if [ ! -d "$CATALINA_BASE/temp" ]
    then
            mkdir $CATALINA_BASE/temp
    fi
    #调用tomcat启动脚本
    bash $CATALINA_HOME/bin/startup.sh "$@"
    保存退出
    [root@localhost ~]# cp /usr/local/tomcat_instance/tomcat1/bin/startup.sh /usr/local/tomcat_instance/tomcat2/bin/
    cp:是否覆盖"/usr/local/tomcat_instance/tomcat2/bin/startup.sh"? y
    [root@localhost ~]# vim /usr/local/tomcat_instance/tomcat2/bin/startup.sh
    #!/bin/bash
    export CATALINA_HOME="/usr/local/apache-tomcat-8.5.40"
    export CATALINA_BASE="/usr/local/tomcat_instance/tomcat2"   //修改为2
    export CATALINA_TMPDIR="$CATALINA_BASE/temp"
    export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"
    export JAVA_OPTS="-server -Xms1024m -Xmx1024m -Djava.awt.headless=true -Dtomcat.name=tomcat2"  //修改为2
    #创建logs目录
    if [ ! -d "$CATALINA_BASE/logs" ]
    then
            mkdir $CATALINA_BASE/logs
    fi
    #创建temp目录
    if [ ! -d "$CATALINA_BASE/temp" ]
    then
            mkdir $CATALINA_BASE/temp
    fi
    #调用tomcat启动脚本
    bash $CATALINA_HOME/bin/startup.sh "$@"
    保存退出
    ·······························
    修改shutdown.sh 文件
    [root@localhost ~]# vim /usr/local/tomcat_instance/tomcat2/bin/shutdown.sh
    #!/bin/bash
    export CATALINA_HOME="/usr/local/apache-tomcat-8.5.40"
    export CATALINA_BASE="/usr/local/tomcat_instance/tomcat2"
    export CATALINA_TMPDIR="$CATALINA_BASE/temp"
    export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"
    bash $CATALINA_HOME/bin/shutdown.sh "$@"
    保存退出
    [root@localhost ~]# chmod +x /usr/local/tomcat_instance/tomcat2/bin/shutdown.sh
    [root@localhost ~]# vim /usr/local/tomcat_instance/tomcat1/bin/shutdown.sh
    #!/bin/bash
    export CATALINA_HOME="/usr/local/apache-tomcat-8.5.40"
    export CATALINA_BASE="/usr/local/tomcat_instance/tomcat1"
    export CATALINA_TMPDIR="$CATALINA_BASE/temp"
    export CATALINA_PID="$CATALINA_BASE/bin/tomcat.pid"
    bash $CATALINA_HOME/bin/shutdown.sh "$@"
    保存退出
    [root@localhost ~]# chmod +x /usr/local/tomcat_instance/tomcat1/bin/shutdown.sh
    ······································
    修改server.xml 文件
    [root@localhost ~]# vim /usr/local/tomcat_instance/tomcat1/conf/server.xml
    这个端口设定为8005 不做改变
    [root@localhost ~]# vim /usr/local/tomcat_instance/tomcat2/conf/server.xml
    //修改以下3个的端口号
     22 <Server port="8006" shutdown="SHUTDOWN">
     69     <Connector port="8090" protocol="HTTP/1.1"
    116     <Connector port="8010" protocol="AJP/1.3" redi    rectPort="8443" />
    保存退出
    ··········································
    因为配置文件中指定的路径是 webapps/ROOT
    [root@localhost ~]# mkdir -p  /usr/local/tomcat_instance/tomcat1/webapps/ROOT
    [root@localhost ~]# mkdir -p  /usr/local/tomcat_instance/tomcat2/webapps/ROOT
    ···········································
    写测试页面
    [root@localhost ~]# vim /usr/local/tomcat_instance/tomcat1/webapps/ROOT/index.jsp
    <html>
    <title>Tomcat-1</title>
    <body>
            hello ,This is Tomcat-1.
    </body>
    </html>
    保存退出
    [root@localhost ~]# vim /usr/local/tomcat_instance/tomcat2/webapps/ROOT/index.jsp
    <html>
    <title>Tomcat-2</title>
    <body>
            hello ,This is Tomcat-2.
    </body>
    </html>
    保存退出
    ~~~~~~~~~~~~~~~~~~~~~·2个实例制作完成~~~~~~~~~~~~~~~
    启动实例
    [root@localhost ~]# /usr/local/tomcat_instance/tomcat1/bin/startup.sh
    [root@localhost ~]# /usr/local/tomcat_instance/tomcat2/bin/startup.sh
    [root@localhost ~]# netstat -lnpt |grep java
    tcp6       0      0 :::8080                 :::*                    LISTEN      16547/java         
    tcp6       0      0 :::8090                 :::*                    LISTEN      16601/java         
    tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      16547/java         
    tcp6       0      0 127.0.0.1:8006          :::*                    LISTEN      16601/java         
    tcp6       0      0 :::8009                 :::*                    LISTEN      16547/java         
    tcp6       0      0 :::8010                 :::*                    LISTEN      16601/java
    ···················
    在浏览器中进行测试 192.168.200.66:8080   192.168.200.66:8090

     ======做第3个实例======
    //复制tomcat2 的内容,并把相关文件做修改
    [root@localhost ~]# cd /usr/local/tomcat_instance/
    [root@localhost tomcat_instance]# ls
    tomcat1  tomcat2
    [root@localhost tomcat_instance]# cp -R tomcat2 tomcat3
    [root@localhost tomcat_instance]# ls
    tomcat1  tomcat2  tomcat3
    [root@localhost tomcat_instance]# cd tomcat3
    [root@localhost tomcat3]# ls
    bin  conf  logs  temp  webapps  work
    [root@localhost tomcat3]# vim bin/
    shutdown.sh  startup.sh   tomcat.pid
    ~···~···修改  shudown.sh~···~
    [root@localhost tomcat3]# vim bin/shutdown.sh
    3 export CATALINA_BASE="/usr/local/tomcat_instance/tomcat3"
    保存退出
    ~~····修改startup.sh~~····~·~
    [root@localhost tomcat3]# vim bin/startup.sh
     3 export CATALINA_BASE="/usr/local/tomcat_instance/tomcat3"
      6 export JAVA_OPTS="-server -Xms1024m -Xmx1024m -Djava.awt.headless=true -Dtomcat.name=tomcat3"
    保存退出
    [root@localhost tomcat3]# rm -rf bin/tomcat.pid
    ·····修改conf文件
    [root@localhost tomcat3]# vim conf/server.xml
     22 <Server port="8004" shutdown="SHUTDOWN">
     69     <Connector port="8070" protocol="HTTP/1.1"
    116     <Connector port="8008" protocol="AJP/1.3" redirectPort="8443" />
    保存退出
    ~````修改webapps ..`````
    [root@localhost tomcat3]# vim webapps/ROOT/index.jsp
    <html>
    <title>Tomcat-3</title>
    <body>
            hello ,This is Tomcat-3.
    </body>
    </html>
    保存退出
    ~~~~~启动~~~~~
    [root@localhost tomcat3]# /usr/local/tomcat_instance/tomcat3/bin/startup.sh
    [root@localhost tomcat3]# netstat -lnpt |grep java
    tcp6       0      0 127.0.0.1:8004          :::*                    LISTEN      17358/java
    tcp6       0      0 :::8070                 :::*                    LISTEN      17358/java
    tcp6       0      0 :::8008                 :::*                    LISTEN      17358/java  
    在浏览器中进行测试:192.168.200.66:8070

     
     
     
     ~~~~~让nginx调度多台机器~~~~~~
    [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
     31     keepalive_timeout  65;
     32         upstream tomcat_pool{
     33                 server 192.168.200.66:8070 weight=    1;          
     34                 server 192.168.200.66:8080 weight=    1; 
     35                 server 192.168.200.66:8090 weight=    1;
     36         }
    保存退出
    [root@localhost ~]# nginx -t
    [root@localhost ~]# killall -HUP nginx
     
     

     

     

    注意CATALINA_BASE所指向的tomcat实例目录路径
    ~~

    ~~~~~~~

    ~~~~~~~~·完成实验!!!!! !!!!!!!!!!!!!!!!!!!

  • 相关阅读:
    Indy的TCPServer到底能支持多少个连接
    Delphi TStream 详细介绍
    WebAPI下的如何实现参数绑定
    使用 Weinre 调试移动网站及 PhoneGap 应用
    面向对象的三大特征:封装、继承、多态
    轻量级前端MVVM框架avalon
    三种工厂模式的分析以及C++实现
    简单实现TCP下的大文件高效传输
    Nunit NMock Ncover单元测试
    算法实践——数独的基本解法
  • 原文地址:https://www.cnblogs.com/elin989898/p/11919119.html
Copyright © 2020-2023  润新知