3台服务器环境
192.168.56.41 tomcat-1 安装tomcat,和tomcat-2 session 复制 192.168.56.42 tomcat-2 安装tomcat,和tomcat-1 session 复制 192.168.56.43 httpd-3 安装 apache httpd 和 mod_jd 执行负载均衡一 安装 jdk (在 tomcat-1、tomcat-2 两台服务器上)
1 安装openjdk 1.8的jre和jdkyum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
安装后的jre和jdk在 /usr/lib/jvm/ 里,本例中具体的文件夹是java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64
2 在 /etc/profile文件 或者 /etc/profile.d/文件夹中新建 java.sh 文件,这里使用新建文件的方式,在文件中加入以下内容vi /etc/profile.d/java.sh
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.el7_3.x86_64JRE_HOME=$JAVA_HOME/jreCLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarPATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/binexport JAVA_HOME JRE_HOME CLASSPATH PATH
3 让环境变量立即生效
source /etc/profile
4 检验版本
java -version
二 安装 tomcat (在 tomcat-1、tomcat-2 两台服务器上)
1 前往 http://tomcat.apache.org/download-80.cgi 下载tomcat8.5.20的压缩文件curl -O http://apache.fayea.com/tomcat/tomcat-8/v8.5.20/bin/apache-tomcat-8.5.20.tar.gz
2 解压下载的压缩文件 apache-tomcat-8.5.20.tar.gz
tar -zxvf apache-tomcat-8.5.20.tar.gz
3 新建 /usr/local/tomcat 文件夹,并将解压的文件移动到 /usr/local/tomcat 下
mkdir /usr/local/tomcatmv apache-tomcat-8.5.20 /usr/local/tomcat/apache-tomcat-8.5.20
4 在 /etc/profile.d/ 文件夹中新建tomcat的配置文件
vi /etc/profile.d/tomcat.sh
CATALINA_HOME=/usr/local/tomcat/apache-tomcat-8.5.20CATALINA_BASE=$CATALINA_HOMEPATH=$PATH:$CATALINA_BASE/binexport PATH CATALINA_HOME CATALINA_BASE
5 让环境变量立即生效
source /etc/profile
6 为tomcat添加systemd unit服务启动文件,之后就能通过systemctl命令控制
vi /etc/systemd/system/tomcat.service
[Unit]Description=Tomcat 8.5.20After=syslog.target network.target remote-fs.target nss-lookup.target[Service]Type=forkingPIDFile=/usr/local/tomcat/apache-tomcat-8.5.20/tomcat.pidExecStart=/usr/local/tomcat/apache-tomcat-8.5.20/bin/startup.shExecReload=/bin/kill -s HUP $MAINPIDExecStop=/usr/local/tomcat/apache-tomcat-8.5.20/bin/shutdown.shPrivateTmp=true[Install]WantedBy=multi-user.target
7 开启tomcat的防火墙端口
firewall-cmd --permanent --zone=public --add-port=8080/tcpfirewall-cmd --permanent --zone=public --add-port=8009/tcpfirewall-cmd --reload
三 为 tomcat 配置 apr 连接处理器, apr 是 tomcat 三个处理器 (bio、nio、apr)中支撑高并发和异步处理性能最好的 (在 tomcat-1、tomcat-2 两台服务器上)
1 下载编译安装 apr,为之后的 tomcat-native 编译安装及运行提供环境 1.1 安装 libtool ,避免安装的时候出现错误 grep: /usr/local/src/apr-1.6.2/libtool: No such file or directory 或者 make[1]: *** [libapr-1.la] Error 1 以及 make: *** [all-recursive] Error 1yum install -y gcc libtool
1.2 下载并编译安装apr
curl -O http://apache.fayea.com//apr/apr-1.6.2.tar.gztar -zxvf apr-1.6.2.tar.gzcd apr-1.6.2
1.3 修改 configure 配置文件 中的 $RM "$cfgfile" 改为 $RM -f "$cfgfile" ,也可以忽略该错误,我在编译的时候也可以顺利编译通过,没有出现error,但不知道会对后续产生影响不,否则报错 rm: cannot remove 'libtoolT': No such file or directory
vi configure
1.4 执行编译
./configuremakemake install
(安装后文件会自动生成在 /usr/local/apr文件夹下,库文件生产在 /usr/local/apr/lib 下)
2 下载编译安装高版本的 openssl,为之后的 tomcat-native 编译安装及运行提供环境
CentOS 7.2 mini 中默认的 openssl 版本是 1.0.1e,无法完成 tomcat 8.5.20 中自带的 tomcat-native 1.2.12的编译。最新的openssl提供了1.0.2和1.1.0两个系列版本,1.0.2使用多而且是长期支持版本,该版本编译后的文件默认存放在 /usr/local/ssl下,1.1.0系列编译后产生的头文件在/usr/local下、库文件在/usr/local/ssl下,本例使用1.0.2。还有一点需要注意,网上很多文章说使用yum remove openssl openssl-devel删除系统中的旧版本,不过会连带删除很多基础库,所以风险更大,不推荐使用,这里使用安装新版和改变旧版本名称连接的方式解决。 2.1 安装编译 openssl 时需要的 perl 和 zlib-devel (不安装 zlib-devel 会在编译 openssl 时加 zlib 参数出现错误 c_zlib.c:25:19: fatal error: zlib.h: No such file or directory)yum -y install perl zlib-devel
2.2 下载并编译安装openssl 1.0.2l
curl -O https://www.openssl.org/source/openssl-1.0.2l.tar.gztar -zxvf openssl-1.0.2l.tar.gzcd openssl-1.0.2l./config shared zlib (如果是 1.1.0系列一定要加 -fPIC 参数,否则在编译 tomcat-native 时会出现如下错误)
--------------如果不加 -fPIC,在编译 tomcat-native的时候因为 openssl 会出现以下错误 -------------
/usr/local/openssl/lib/libssl.a(s3_meth.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with –fPIC /usr/local/openssl/lib/libssl.a: could not read symbols: Bad value collect2: error: ld returned 1 exit status make[1]: *** [libtcnative-1.la] Error 1 make[1]: Leaving directory `/usr/local/tomcat-native-1.2.8-src/native' make: *** [all-recursive] Error 1 ---------------------------------------------------------------------------------------------------------makemake install
2.3 升级系统环境为高版本
mv /usr/bin/openssl /usr/bin/openssl.bak (备份原来的)ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl (建立软连接)ln -s /usr/local/ssl/include/openssl /usr/include/opensslecho "/usr/local/ssl/lib">>/etc/ld.so.conf (设置到运行库)
3 编译安装tomcat-native,tomcat-native的源码文件在安装的tomcat中 /usr/local/tomcat/apache-tomcat-8.5.20/bin/tomcat-native.tar.gz 位置
cd /usr/local/tomcat/apache-tomcat-8.5.20/bin/tar -xzvf tomcat-native.tar.gzcd tomcat-native-1.2.12-src/native ./configure --with-apr=/usr/local/apr/ \ --with-java-home=$JAVA_HOME \ --with-ssl=/usr/local/ssl/ \ --prefix=$CATALINA_HOMEmakemake install
(编译后的库会放在 $CATALINA_HOME/lib 下)
4 在 /usr/local/tomcat/apache-tomcat-8.5.20/bin 下新建 setenv.sh 环境文件,该文件是tomcat的默认启动配置文件 catalina.sh 在启动时加载的一个由用户自己创建和添加环境配置信息的环境配置文件vi /usr/local/tomcat/apache-tomcat-8.5.20/bin/setenv.sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/libLD_RUN_PATH=$LD_RUN_PATH:$CATALINA_HOME/libexport LD_LIBRARY_PATH LD_RUN_PATHCATALINA_PID="$CATALINA_BASE/tomcat.pid"CATALINA_OPTS="-server -Xms256m -Xmx800m -XX:+HeapDumpOnOutOfMemoryError -XX:PermSize=128m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -noclassgc -verbose:gc"
四 启动并检查tomcat是否正常加载apr (本人手动编译的 tomcat 一直都没有办法让其自动将监听改变为apr,只能通过手动完成,如有大神留言指导感激不尽) (在 tomcat-1、tomcat-2 两台服务器上)
1 启动查看 tomcat 目录下的日志文件,yum安装在 /usr/share/tomcat/logs/catalina.日期.log,源码安装在/usr/local/tomcat/apache-tomcat/apache-tomcat-8.5.20/catalina.日期.log,如果显示以下内容,表明正常使用aprsystemctl start tomcatcat /usr/local/tomcat/apache-tomcat-8.5.20/logs/catalina.日期.log文件
Feb 8, 2015 12:27:41 PM org.apache.catalina.core.AprLifecycleListener initINFO: Loaded APR based Apache Tomcat Native library 1.x.y.Feb 8, 2015 12:27:41 PM org.apache.catalina.core.AprLifecycleListener initINFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].Feb 8, 2015 12:27:41 PM org.apache.coyote.http11.Http11AprProtocol initINFO: Initializing Coyote HTTP/1.1 on http-8080
显示以上内容标明 apr 运行正常,如果内容中还包括以下内容,表明 tomcat 自动将监听改为 apr ,
Initializing ProtocolHandler ["http-apr-8080"]Initializing ProtocolHandler ["ajp-apr-8009"]Starting ProtocolHandler ["http-apr-8080"]Starting ProtocolHandler ["ajp-apr-8009"]
如果没有以上内容,需要在tomcat的server.xml配置文件中修改监听为apr,位置在 $CATALIINA_HOME/conf/server.xml
将改为
2 设置tomcat自启动
systemctl enable tomcat
五 配置 tomcat 集群和 session 复制 (在 tomcat-1、tomcat-2 两台服务器上)
1 设置服务器NTP时间同步 1.1 安装 ntp 设置服务器时间同步yum install -y ntp
1.2 启用同步配置
timedatectl set-ntp yes
1.3 设置同步服务自启动并启动服务
systemctl enable ntpdsystemctl start ntpd
1.4 验证
ntpq -c peers
2 向tomcat server.xml配置文件中加入集群和session复制配置
vi $CATALINA_HOME/conf/server.xml
3 打开防火墙45564 、 4000两个配置文件的端口
firewall-cmd --permanent --zone=public --add-port=45564/tcpfirewall-cmd --permanent --zone=public --add-port=4000/tcpfirewall-cmd --reload
六 安装 apache httpd 2.4.6,CentOS 7.2 mini 默认yum是这个版本 (在 httpd-3 服务器上)
1 yum 安装 httpdyum install httpd httpd-devel -y
2 打开防火墙80端口
firewall-cmd --permanent --zone=public --add-port=80/tcpfirewall-cmd --reload
3 默认安装路径如下
配置文件在/etc/httpd/conf/httpd.conf 静态网页存放路径在 /var/www/html 文件夹下 程序主目录在/usr/share/httpd/ httpd的module文件夹在/usr/lib64/httpd/modules/ 4.设置httpd自启动systemctl enable httpd
七.下载并编译安装 tomcat connector (mod_jk) (在 httpd-3 服务器上)
1 安装 gcc 进行编译、安装 libtool 对生成的 lib 进行拷贝等操作yum install -y gcc libtool
2 下载编译
curl -O http://apache.fayea.com/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gztar -zxvf tomcat-connectors-1.2.42-src.tar.gzcd tomcat-connectors-1.2.42-src/native
编译的时候需要httpd开发包中的apxs文件夹进行编译,这个文件夹是在安装httpd-devel后生成的,位置在/usr/bin/apxs
./configure --with-apxs=/usr/bin/apxsmakemake installlibtool --finish /usr/lib64/httpd/modules
八 在apache httpd 中配置 mod_jk (在 httpd-3 服务器上)
1 在 httpd 的 conf.d 文件夹下添加 mod_jk 的配置信息,该文件夹下的文件会在httpd启动时自动加载vi /etc/httpd/conf.d/mod_jk.conf
LoadModule jk_module modules/mod_jk.soJkWorkersFile conf/workers.properties JkMountFile conf/uriworkermap.properties
2 在httpd的conf文件夹下添加 workers.properties 和 uriworkermap.properties文件
vi /etc/httpd/conf/workers.properties
worker.list=controllerworker.tomcat-1.port=8009 #ajp13 端口号,在tomcat下server.xml配置,默认8009worker.tomcat-1.host=192.168.56.41 #tomcat的主机地址,如不为本机,请填写ip地址worker.tomcat-1.type=ajp13worker.tomcat-1.lbfactor=1 #server的加权比重,值越高,分得的请求越多worker.tomcat-2.port=8009worker.tomcat-2.host=192.168.56.42worker.tomcat-2.type=ajp13worker.tomcat-2.lbfactor=1worker.controller.type=lb #定义负载均衡控制器worker.controller.balanced_workers=tomcat-1,tomcat-2 #指定此负载平衡器负责的Tomcat应用节点。worker.controller.sticky_session=false #此处指定集群是否需要会话复制,false 复制,true 当某用户的请求第一次分发到哪台就一直在哪台
vi /etc/httpd/conf/uriworkermap.properties
/*=controller/jkstatus=status#!/*.gif=controller#!/*.jpg=controller#!/*.png=controller#!/*.css=controller#!/*.js=controller#!/*.htm=controller#!/*.html=controller
3 设置 httpd 自动启动并启动
systemctl enable httpd
4 降低安全审核机制
vi /etc/selinux/config
修改文件中的 SELINUX=permissive
reboot
九 最后需要在部署的网站 web.xml文件中添加 <distributable/> 标签
十 些可参考的内容
1.查找软件包安装位置的命令rpm -ql 软件名称
2.使用云更新软件
yum update 软件名称
3.比较全的yum源 epel-release
最新版查找地址 https://mirrors.tuna.tsinghua.edu.cn/epel//7/x86_64/e/ 下载安装 curl -O https://mirrors.tuna.tsinghua.edu.cn/epel//7/x86_64/e/epel-release-7-10.noarch.rpm (编写文章时最新版本为epel-release-7-10.noarch.rpm) rpm -ivh epel-release-7-10.noarch.rpm yum clean all yum update 查看源的命令yum repolist
4.设置环境变量的三种方法
4.1 在/etc/profile文件中添加变量【对所有用户生效(永久的)】vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib export CLASSPATH
改文件后马上生效的命令
source /etc/profile
4.2 编辑用户的默认配置文件 .bashrc
vi /home/guok/.bash.profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib export CLASSPATH
改文件后马上生效的命令
source /home/guok/.bash_profile
4.3 临时加入环境变量【只对当前shell(BASH)有效(临时的)】
export 变量名=变量值
4.4 查看yum软件的版本信息
yum info 软件名称
5.tomcat在启动时,如果环境变量(window path 和 LD_LIBRARY_PATH unix\linux)含有tomcat本地库,将使用APR/native连接器。 如果环境变量不存在将使用 非阻塞的java NIO连接器。 APR/native连接器 和 非阻塞的java NIO连接器 配置参数是不一样的。建议: 在生产环境中配置一个固定的连接器,不使用自动配置。
6. 注意环境变量设置的先后顺序很重要,在/etc/profile.d文件夹下的文件也一样,千万别让应该先声明变量的文件名排在后边,否则需要的变量无法声明会引起很多问题。 7 编译安装tomcat自带的启动工具jsvc (但暂时不知道有什么用) 7.1 安装编译jsvc需要的gcc和autoconfyum install -y gcc autoconf
7.2 到$CATALINA_HOME/bin下解压commons-daemon-native.tar.gz文件并编译生成jsvc
cd $CATALINA_HOME/bintar xvfz commons-daemon-native.tar.gzcd commons-daemon-1.0.15-native-src/unix./configuremakecp jsvc ../..cd ../..
7.3 可以通过以下命令启动tomcat服务并测试
CATALINA_BASE=$CATALINA_HOMEcd $CATALINA_HOME./bin/jsvc \ -classpath $CATALINA_HOME/bin/bootstrap.jar:$CATALINA_HOME/bin/tomcat-juli.jar \ -outfile $CATALINA_BASE/logs/catalina.out \ -errfile $CATALINA_BASE/logs/catalina.err \ -Dcatalina.home=$CATALINA_HOME \ -Dcatalina.base=$CATALINA_BASE \ -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \ -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \ org.apache.catalina.startup.Bootstrap