自己部署时整理的笔记,记录在这里以备不时之需,未进行校验,如发现问题欢迎留言
配置完成后各相关版本信息:CentOS7.7.1908 + JDK1.8.0_221 + apache-tomcat-8.5.53 + pdi-ce-8.3.0.0-371(kettle)
不是标配,jdk是找的手头有的1.8版本,其他都尽量找的最新的
一、环境部署
Windows和Linux都做了,拿Linux整理吧,部署时候需要联网,没深究具体哪些域名,比较多。
此部分不细述kettle使用方法,主要讲解Jenkins调用已制作好的kettle转换或作业实现调度监控。
(一)kettle
kettle是解压直接使用,下述网址下载,我是用的整理时候的之前下载的最新版,再看官网找下载链接已有9.0版本了~~个人觉得7.1要比8.3稳定的多,所以9.0没尝试欲望,况且下载太太太太太慢了
或者老版本
上传到操作系统,unzip 文件名直接解压,mv 重命名为kettle8,该环境目录为/root/kettle8
(二)JDK、Tomcat部署
有点画蛇添足,其实没必要介绍的,记录下载地址吧
1. JDK:
Oracle的东西都要注册各账户下载,不想官方下载就找其他地方~~
下载rpm版本,安装省事
2. Tomcat:挑选个吧
下载tar.gz版本,解压缩直接使用
(三)Jenkins部署
后来找到的清华源,快啊~~留这个吧
下载war包,直接放了tomcat webapps目录下,启动tomcat就能用
慎重起见,下载了LTS版本,当前节点最新版本jenkins-LTS2.222.1.war
需要首先登录http://ip:8080/jenkins-LTS2.222.1,admin/admin
使默认/root/.jenkins/目录下生成updates目录及里面default.json文件,修改该文件更改update源及网络测试地址:
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
#没有生成这个目录及文件,就先点击下更新插件,可以随意选择一个,节省时间。
二、配置优化调整
(一)tomcat
1. 端口号、超时时间等优化
修改配置 :
<Executor
name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="50"
prestartminSpareThreads="true"
maxQueueSize="100"/>
修改配置:
<!--在Connector中设置executor属性指向上面的执行器-->
<!--protocol="org.apache.coyote.http11.Http11Nio2Protocol"-->
<Connector
port="8080"
executor="tomcatThreadPool"
protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="80000"
maxConnections="10000"
redirectPort="8443"
enableLookups="false"
acceptCount="5000"
disableUploadTimeout="true"
URIEncoding="UTF-8"
compression="on"
compressionMinSize="20480"
acceptorThreadCount="2"
server="Version 2.222.1"
compressableMimeType="text/html,text/plain,text/css,application/javascript,application/json,application/x-font-ttf,application/x-font-otf,image/svg+xml,image/jpeg,image/png,image/gif,audio/mpeg,video/mp4"
/>
参数讲解:
port:连接端口。
protocol:连接器使用的传输方式。
executor: 连接器使用的线程池名称
enableLookups:禁用DNS 查询
maxIdleTime:线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为6000(1分钟),单位毫秒。
acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,默认设置 100 。
maxPostSize:限制 以FORM URL 参数方式的POST请求的内容大小,单位字节,默认是 2097152(2兆),10485760 为 10M。如果要禁用限制,则可以设置为 -1。
acceptorThreadCount: 用于接收连接的线程的数量,默认值是1。一般这个指需要改动的时候是因为该服务器是一个多核CPU,如果是多核 CPU 一般配置为 2。
disableUploadTimeOut:允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false
keepAliveTimeout - 表示在下次请求过来之前,tomcat保持该连接多久。这就是说假如客户端不断有请求过来,且未超过过期时间,则该连接将一直保持。
maxKeepAliveRequests -表示该连接最大支持的请求数。超过该请求数的连接也将被关闭(此时就会返回一个Connection: close头给客户端)。 (maxKeepAliveRequests="1"代表禁用长连接)(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间)
压缩会增加Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去做。
Tomcat 的压缩是在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并浏览。相对于普通的 浏览过程 HTML、CSS、Javascript和Text,它可以节省40% 左右的流量。更为重要的是,它可以对动态生成的,包括CGI、PHP、JSP、ASP、Servlet,SHTML等输出的网页也能进行压缩,压缩效率也很高。
maxThreads : 最大并发连接数,不配置时默认200,一般建议设置500~ 800 ,要根据自己的硬件设施条件和实际业务需求而定。
minSpareThreads:Tomcat启动初始化的线程数,默认值25
prestartminSpareThreads:在tomcat初始化的时候就初始化minSpareThreads的值,不设置trueminSpareThreads 的值就没啥效果了。
maxQueueSize: 最大的等待队列数,超过则拒绝请求
2. 管理AJP端口
AJP是为 Tomcat 与 HTTP 服务器之间通信而定制的协议,能提供较高的通信速度和效率。如果tomcat前端放的是apache的时候,会使用到AJP这个连接器。 默认是开启的。如果不使用apache,注释该连接器。
<!--
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-->
3. JVM 配置
JDK 1.8中 PermSize 和 MaxPermGen 已经无效。JDK 1.8 中已经不存在永久代的结论 而以 元空间 代替。
修改 catalina.sh (4G 内存机器参考配置):
JAVA_OPTS="-server -Dfile.encoding=UTF-8 -Xms2G -Xmx2G -Xmn1G -Djava.awt.headless=true -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heap.dump -verbose:gc -XX:+PrintGCDetails -Xloggc:/tmp/heap_trace.gc -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Duser.timezone=GMT+8"
参数解释:
-Xms2G 初始分配的堆内存
-Xmx2G 最大允许分配的堆内存,这两个配成一样。
-Xmn512m 年轻代大小
-XX:MetaspaceSize=512M 初始元空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整:如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。
-XX:MaxMetaspaceSize=512M
-XX:+UseConcMarkSweepGC 并发标记清除(CMS)收集器
-XX:+CMSClassUnloadingEnabled
-XX:+HeapDumpOnOutOfMemoryError 表示当JVM发生OOM时,自动生成DUMP文件。
-XX:HeapDumpPath=${目录}参数表示生成DUMP文件的路径,也可以指定文件名称,例如:-XX:HeapDumpPath=${目录}/java_heapdump.hprof。如果不指定文件名,默认为:java_<pid>_<date>_<time>_heapDump.hprof。
-verbose:gc 输出GC日志,-XX:+PrintGC 与 -verbose:gc 是一样的,可以认为-verbose:gc 是 -XX:+PrintGC的别名.
-XX:+PrintGCDetails 打印GC详细信息
-XX:+PrintGCTimeStamps 打印gc时间戳
-XX:+PrintGCDateStamps
-Xloggc:/tmp/gc.log 定义gc日志目录
-XX:CMSInitiatingOccupancyFraction=75 是指设定CMS在对内存占用率达到75%的时候开始GC(因为CMS会有浮动垃圾,所以一般都较早启动GC);
-XX:+UseCMSInitiatingOccupancyOnly 只是用设定的回收阈值(上面指定的75%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整
4. 重启脚本
vim /home/scripts/restart.sh
#/bin/bash
#function instruction: this shell use to Startup Tomcat
#2020年04月14日完成测试部署
#0 7,19 * * * /home/scripts/restart.sh > /home/logs/restart_`date +'%F_%H:%M:%S'`.log
#定义各变量信息
#1、Tomcat解压路径,这里使用的是免安装版本,解压直接使用
export tomcatPath=/home/apache-tomcat-8.5.54
#2、Tomcat bin路径
export binPath=$tomcatPath/bin
#3、Tomcat catalina.out 日志路径
export logPath=$tomcatPath/logs
#4、Tomcat work缓存文件
export workfiles=$tomcatPath/work/Catalina/*
#5、Tomcat temp临时文件
export tempfiles=$tomcatPath/temp/*
#6、Tomcat cache缓存文件
export cacheFile=$binPath/system/karaf/caches/*
#统计$tomcatPath进程数
export tpid=`ps -ef | grep tomcat | grep -w "$tomcatPath"| grep -v grep |wc -l`
echo "发现$tpid个$binPath进程"
#$tomcatPath进程数>=1个,优先使用shutdown.sh关闭进程,再次判断不成功的话,就kill关闭进程
if [ $tpid -ge 1 ]; then
echo "[info] [(`date +'%F %H:%M:%S'`)]=====开始kill tomcat $binPath====="
export spid=`ps -ef | grep tomcat | grep "$tomcatPath"| grep -v grep | awk '{print $2}'`
echo $spid
ps -ef | grep tomcat | grep -w "$tomcatPath" | grep -v 'grep' | awk '{print $2}' | xargs kill -9
echo "[info] [(`date +'%F %H:%M:%S'`)]=====开始清理tomcat $binPath缓存====="
rm -rf $workfiles
rm -rf $tempfiles
rm -rf $cacheFile
echo "[info] [(`date +'%F %H:%M:%S'`)]=====缓存清理完成,进程kill 成功 pid:$spid====="
echo "[Info] [(`date +'%F %H:%M:%S'`)]=====Tomcat 关闭完成,开始重新启动 $binPath,请查看后面log====="
bash $binPath/startup.sh
tail -f $logPath/catalina.out
else
echo "[Info] [(`date +'%F %H:%M:%S'`)]=====不存在$binPath启动进程,将初始化启动====="
echo "[Info] [(`date +'%F %H:%M:%S'`)]=====初始启动 tomcat $binPath 开始,请查看后续日志====="
bash $binPath/startup.sh
tail -f $logPath/catalina.out
fi
5. 设置Tomcat服务并开机启动
#注释的环境变量信息需要按需要定义,本环境已经在catalina.sh文件定义,再定义会冲突,启动时在tomcat目录logs/catalina.out文件会有详细错误描述
vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=Tomcat8.5.54
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
#Environment='JAVA_HOME=/usr/bin/java'
Environment='CATALINA_PID=/home/apache-tomcat-8.5.54/bin/tomcat.pid'
#Environment='CATALINA_OPTS=-server -Xms2G -Xmx2G -Xmn512m -Djava.awt.headless=true -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$CATALINA_HOME/logs/heap.dump -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly'
WorkingDirectory=/home/apache-tomcat-8.5.54/
ExecStart=/home/apache-tomcat-8.5.54/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
#ExecStop=/home/apache-tomcat-8.5.54/bin/shutdown.sh
PrivateTmp=true
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
#测试服务,成功后设置开机启动
systemctl daemon-reload
systemctl start tomcat;systemctl status tomcat.service -l
systemctl enable tomcat
6.缓存配置
不配置的话,log一直warning
在conf/context.xml文件的</Context>里面添加下面一行
<Resources cachingAllowed="true" cacheMaxSize="100000" />
(二)Jenkins
1. 配置jenkis的端口(如果不是war包部署的话)
vi /etc/sysconfig/jenkins
JENKINS_PORT="8080"
2. 安装插件
查看/root/.jenkins/updates/default.json文件,看首行是否改成baidu.com,这个老是自己改回去:
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
三、Jenkins执行kettle
1. 新建构建:
-->丢弃旧的构建
-->定时构建
H 7 * * 1 --每周一7点的某一时刻
H 7 1 * * --每月1号7点的某一时刻
-->构建--执行Linux shell(按实际目录配置)
#!/bin/bash
export KETTLE_PATH=/root/kettle8
export JOB_FILE=/home/etljobs/wangxiao/6_XC_YueBao.ktr
export LOG_FILE=/home/etljobs/logs/wangxiao.log
$KETTLE_PATH/pan.sh /norep /level:Detailed>>$LOG_FILE -file=$JOB_FILE
2.定时构建描述
* * * * *
(五颗星,中间用空格隔开)
第一颗*表示分钟,取值0~59
第二颗*表示小时,取值0~23
第三颗*表示一个月的第几天,取值1~31
第四颗*表示第几月,取值1~12
第五颗*表示一周中的第几天,取值0~7,其中0和7代表的都是周日
* 匹配范围内所有值
M-N 匹配M~N范围内所有值
M-N/X 或者 */X 在指定M~N范围内,或整个有效区间内,每隔X构建一次
A,B,...,Z 匹配多个值
符号 H 的用法
为了在系统中产生均匀的计划任务, 尽可能的使用符合H(就是Hash)
例如, 用 0 0 * * * 来执行十几个任务,将会在午夜产生较大的峰值,
相反, 用 H H * * * 在一天中仍然会执行每一个任务, 但是并不在同一时间去做,可以更好的利用有限的资源。
符号H可以用作一个范围.
例如, H H(0-7) * * * 代表着在凌晨0:00 到早上7:59的这段时间, 你还可以用H 代表有范围或者无范围中的 区间。
H可以被当做一个范围内的随机值,实际上,它是一个任务的hash,并不是一个随机函数,所以对于任务项目来说, 这个值都是稳定的。
要注意在一个月中天的字段,短周期内例如 * /3 或者 H/3 将在接近月末的时候,因为月长的不固定,工作会不稳定。
例如,* /3 将会在一个31天的月中,第1天、第4天、第7天......、第28天、第31天执行构建,然后再下一个月继续重复执行,
hash常常会选择范围1~28天内执行,所以,H/3 在月末的3~6天里,产生运行间隙(长时间循环导致长度不一致,但是这个影响相对来说不明显)
空行 和 以 #开头的被视为 注释
一些别名
@yearly, @annually, @monthly, @weekly, @daily, @midnight, and @hourly,这些使用系统默认自动匹配的时间。
比如,
@hourly 跟 H * * * * 都表示一个小时之内的任意时间.
@midnight 代表 0:00 AM and 2:59 AM 之间的时间.
上述案例将第一位写成H,是程序建议H要比具体数值更优
其他案例:
每个工作日从早上9点到下午5点这段时间内每间隔2小时之间的某刻。(或许在上午10:38, 下午12:38, 下午2:38 , 下午4:38)
H H(9-16)/2 * * 1-5
每天9点、17点、22点整点执行
00 9,17,22 * * *
每隔15分钟。(或许:07, :22, :37, :52)
H/15 * * * *
四、扩展
1)JDK安装
安装前检查:
rpm -qa | grep java
rpm -e --nodeps java*
安装jdk
cd /software/
tar zxvf jdk-8u161-linux-x64.tar.gz
mv jdk1.8.0_161 /data/jdk
ln -s /data/jdk /usr/local/JAVA
# 配置环境变量:
在/etc/profile 中加入:
# Set JDK 环境变量
export JAVA_HOME=/usr/local/JAVA ##JDK路径
export PATH=/bin:/jre/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/root/bin
export CLASSPATH=/lib/:/jre/lib:
#使配置文件生效
source /etc/profile
# 检查验证是否安装成功
java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
2)APR扩展
Tomcat可以使用Apache Portable Runtime来提供卓越的性能及可扩展性,更好地与本地服务器技术的集成。Apache Portable Runtime是一个高度可移植的库,位于Apache HTTP Server 2.x的核心。APR有许多用途,包括访问高级IO功能(如sendfile,epoll和OpenSSL),操作系统级功能(随机数生成,系统状态等)以及本地进程处理(共享内存,NT管道和Unix套接字)。
wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.7.0.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.gz
1.安装相关依赖包
# yum -y install gcc gcc-c++ libtool* autoconf automake expat-devel perl perl-devel
2.下载安装包 http://mirror.bit.edu.cn/apache/apr/
# cd /software/
# wget http://mirror.bit.edu.cn/apache/apr/apr-1.6.2.tar.gz
# wget http://mirror.bit.edu.cn/apache/apr/apr-iconv-1.2.2.tar.gz
# wget http://mirror.bit.edu.cn/apache/apr/apr-util-1.6.0.tar.gz
# wget https://www.openssl.org/source/openssl-1.1.0f.tar.gz
备用地址 https://mirrors.tuna.tsinghua.edu.cn/apache//apr/
wget http://219.239.26.11/files/224600000AE1B9A7/mirror.bit.edu.cn/apache//apr/apr-1.6.3.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.6.3.tar.gz
wget https://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-iconv-1.2.2.tar.gz
wget http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
3.安装APR
# tar zxvf apr-1.6.2.tar.gz
# cd apr-1.6.2
# vim configure
如有问题可以修改该值,经测试并没有发现该问题
默认值:
RM='$RM'
修改为:
RM='$RM -f'
# ./configure --prefix=/usr/local/apr
# make && make install
4.安装apr-iconv
# tar zxvf apr-iconv-1.2.1.tar.gz
# cd apr-iconv-1.2.1
# ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr
# make && make install
5.安装apr-util
# tar zxvf apr-util-1.6.0.tar.gz
# cd apr-util-1.6.0
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
# make && make install
6.安装OpenSSL
# tar zxvf openssl-1.1.0f.tar.gz
# cd openssl-1.1.0f
# ./config --prefix=/usr/local/openssl
# make -j 4 && make install
7.安装tomcat-native
# cd /usr/local/tomcat/bin/
# tar zxvf tomcat-native.tar.gz
# cd tomcat-native-1.2.12-src/native
# ./configure --with-ssl=/usr/local/openssl --with-apr=/usr/local/apr --with-java-home=/usr/local/JAVA
# make && make install
注意:如果以上 configure 失败,可以执行 make distclean 清除
8.添加变量内容
# vim /etc/profile.d/jdk.sh
export LD_LIBRARY_PATH=/usr/local/apr/lib:$LD_LIBRARY_PATH
# source /etc/profile.d/jdk.sh
至此APR安装成功。
9.接下来需要修改tomcat配置文件中的APR运行模式,并测试是否安装成功。
# vim /usr/local/tomcat/conf/server.xml
默认值:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改为:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
默认值:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改为:
<Connector port="8009" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443" />
10.现在重启tomcat服务,并查看启动日志
# systemctl restart tomcat
# cat /usr/local/tomcat/logs/catalina.out
...
INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
...
注意:如果遇到上面的提示找不到基于APR的Apache Tomcat Native库,因此无法使用APR模式启动。
解决方案:
# cp -R /usr/local/apr/lib/* /usr/lib64
# cp -R /usr/local/apr/lib/* /usr/lib
再次重启tomcat,并查看启动日志
# cat /usr/local/tomcat/logs/catalina.out
...
INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8009"]
...
可以看到已经以apr协议模式启动成功,经基于APR的技术web压力测试,Tomcat的性能飙升。