python多实例tomcat自动安装(一)

在公司做运维,会遇到在linux机器安装一些中间件,比较常见的是安装tomcat、nginx。为了运维工作的标准化,也为了防止不同人安装习惯不一样导致的安装目录乱七八糟,所以一般会实现个自动化安装脚本,这里用python实现个自动化安装。在编写脚本前,先熟悉多实例tomcat的原理。

一、多实例tomcat原理

多实例tomcat:这里是指在单机上安装多个tomcat实例。
应用场景:在生产环境,当然一般都是单机只有一个tomcat实例,但在测试环境,这样就太浪费了,所以一般都会安装多个实例,给不同的业务使用。
有种最简单的方法:就是复制多份tomcat安装文件。不过,这种的缺点也是很明显:占空间,升级麻烦。当存在多个实例时,升级时又得重新复制多份,也容易导致多个实例的tomcat版本不一致。
所以,最常用的方法是:tomcat核心文件只一份,复制多份配置文件,即可实现多实例。

1、tomcat各目录的作用

  • bin:存放脚本文件,例如启停脚本 startup.sh shutdown.sh
  • conf:存放配置文件,最主要的是server.xml 和 web.xml
  • lib:存放各种依赖jar包
  • logs:存放日志文件
  • temp:存放tomcat运行时产生的临时文件
  • webapps:应用部署目录
  • work:主要存放由JSP文件生成的servlet(java文件以及最终编译生成的class文件)

2、部署过程

  • 创建实例目录 servers,然后每个实例主目录以其实例名命名

    例如,新建实例 tm_adidas,tm_nike,其结构如下:

    servers
    ├── tm_adidas
    └── tm_nike

  • 复制必要的配置文件

    这里把官方安装包里的 conf、logs、temp、webapps、work目录复制到每个实例。

  • 修改server.xml配置文件

    主要修改监听端口、关闭端口、应用部署目录:
    监控端口:默认是8080,因为是多实例,所以各个实例的端口都不能一样,并且不能被其它程序占用,这里选用30086
    关闭端口:默认是8005,这里选用40086
    应用部署目录:修改appbase参数,默认是webapps

<Server port="40086" shutdown="SHUTDOWN">
    <Listener className="org.apache.catalina.core.AprLifecycleListener" />
    <!--Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /-->
    <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
    <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>

    <GlobalNamingResources>
    <!-- Used by Manager webapp -->
    <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="30086" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" minSpareThreads="25"
               enableLookups="false" redirectPort="8443" acceptCount="200"
               connectionTimeout="40000" 
               disableUploadTimeout="false"/>

    <!-- This is here for compatibility only, not required -->
    <!-- <Connector port="59009" protocol="AJP/1.3" /> -->

    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase" />
      <Host name="localhost" appBase="/home/admin/app/servers/tm_adidas/webapps" unpackWARs="true">
          <Valve className="org.apache.catalina.valves.AccessLogValve" rotatable="true"
                 directory="logs"  prefix="access.log"
                 pattern="%h %{X-FORWARDED-FOR}i %l %u %t %r %s %b  %q %{User-Agent}i %T %D" resolveHosts="false"/>
      </Host>
    </Engine>
  </Service>
  • 最终的目录结构

    tomcat目录:放置官方安装文件,并且把oracle jdk也放入其中,一般都是使用oracle jdk,不选用开源jdk;
    severs目录:放置所有实例。
    这里写图片描述

  • 实例启停

    思路:设置每个实例的环境变量,然后调用官方安装包bin下的脚本启停。
    最重要的三个参数:
    JAVA_HOME:jdk的根目录
    CATALINA_HOME、 CATALINA_BASE:
    Tomcat官方文档指出,CATALINA_HOME路径的路径下只需要包含bin和lib目录,这也就是支持tomcat软件运行的目录,而CATALINA_BASE设置的路径可以包括上述所有目录,不过其中bin和lib目录并不是必需的,缺省时会使用CATALINA_HOME中的bin和lib。

#!/bin/bash

##设置实例启停的环境变量
export JAVA_HOME = /home/admin/app/tomcat/jdk1.8.0_162
export CATALINA_HOME = /home/admin/app/tomcat/apache-tomcat-8.0.50
export CATALINA_BASE = /home/admin/app/servers/tm_adidas
export CATALINA_TMPDIR = $CATALINA_BASE/temp
export CATALINA_PID = $CATALINA_BASE/tm_adidas.pid
export JAVA_OPTS = "-Xms2048m -Xmx2048m -XX:MaxNewSize=128m -XX:MaxPermSize=128m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError -verbose:gc -Xloggc:$CATALINA_BASE/logs/gc.log -Dtomcat.name=tm_adidas"

##启动
sh $CATALINA_HOME/bin/startup.sh

##停止
sh $CATALINA_HOME/bin/stop.sh

二、自动部署

会用python实现个自动部署脚本,并且统一实例启停脚本,方便管理:

##根据实例名即可实现不同实例的启停
python serverctl.py tm_adidas start  ##启动实例tm_adidas
python serverctl.py tm_adidas stop   ##关闭实例tm_adidas

请自下一节分析
python多实例tomcat自动安装(二)

tomcat多实例原理参考:

猜你喜欢

转载自blog.csdn.net/kong2030/article/details/81590170