您的位置:首页 > 理论基础 > 计算机网络

CentOS 7.2 mini 安装 tomcat 8.5.20 + httpd 2.4.6 + mod_jk 1.2.12 负载均衡和 session 复制

2017-08-22 00:00 477 查看
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和jdk

yum 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_64
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export 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[/code] 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/tomcat
mv 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.20
CATALINA_BASE=$CATALINA_HOME
PATH=$PATH:$CATALINA_BASE/bin
export 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.20
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/tomcat/apache-tomcat-8.5.20/tomcat.pid
ExecStart=/usr/local/tomcat/apache-tomcat-8.5.20/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/usr/local/tomcat/apache-tomcat-8.5.20/bin/shutdown.sh
PrivateTmp=true
[Install]
WantedBy=multi-user.target

7 开启tomcat的防火墙端口

firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --permanent --zone=public --add-port=8009/tcp
firewall-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 1

yum install -y gcc libtool

1.2 下载并编译安装apr

curl -O http://apache.fayea.com//apr/apr-1.6.2.tar.gz tar -zxvf apr-1.6.2.tar.gz
cd 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 执行编译

./configure
make
make 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.gz tar -zxvf openssl-1.0.2l.tar.gz
cd 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
---------------------------------------------------------------------------------------------------------

make
make 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/openssl
echo "/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.gz
cd 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_HOME
make make 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/lib
LD_RUN_PATH=$LD_RUN_PATH:$CATALINA_HOME/lib
export LD_LIBRARY_PATH LD_RUN_PATH
CATALINA_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,如果显示以下内容,表明正常使用apr

systemctl start tomcat
cat /usr/local/tomcat/apache-tomcat-8.5.20/logs/catalina.日期.log文件

Feb 8, 2015 12:27:41 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.x.y.
Feb 8, 2015 12:27:41 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Feb 8, 2015 12:27:41 PM org.apache.coyote.http11.Http11AprProtocol init
INFO: 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


<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

改为

<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8009" protocol="org.apache.coyote.ajp.AjpAprProtocol" redirectPort="8443" />

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 ntpd
systemctl start ntpd

1.4 验证

ntpq -c peers

2 向tomcat server.xml配置文件中加入集群和session复制配置

vi $CATALINA_HOME/conf/server.xml

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>

3 打开防火墙45564 、 4000两个配置文件的端口

firewall-cmd --permanent --zone=public --add-port=45564/tcp
firewall-cmd --permanent --zone=public --add-port=4000/tcp
firewall-cmd --reload

六 安装 apache httpd 2.4.6,CentOS 7.2 mini 默认yum是这个版本 (在 httpd-3 服务器上)
1 yum 安装 httpd

yum install httpd httpd-devel -y

2 打开防火墙80端口

firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-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.gz tar -zxvf tomcat-connectors-1.2.42-src.tar.gz
cd tomcat-connectors-1.2.42-src/native

编译的时候需要httpd开发包中的apxs文件夹进行编译,这个文件夹是在安装httpd-devel后生成的,位置在/usr/bin/apxs

./configure --with-apxs=/usr/bin/apxs
make make install
libtool --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.so
<IfModule jk_module>
JkWorkersFile conf/workers.properties
JkMountFile   conf/uriworkermap.properties
</IfModule>

2 在httpd的conf文件夹下添加 workers.properties 和 uriworkermap.properties文件

vi /etc/httpd/conf/workers.properties

worker.list=controller
worker.tomcat-1.port=8009             #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat-1.host=192.168.56.41    #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat-1.type=ajp13
worker.tomcat-1.lbfactor=1            #server的加权比重,值越高,分得的请求越多
worker.tomcat-2.port=8009
worker.tomcat-2.host=192.168.56.42
worker.tomcat-2.type=ajp13
worker.tomcat-2.lbfactor=1
worker.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和autoconf

yum install -y gcc autoconf

7.2 到$CATALINA_HOME/bin下解压commons-daemon-native.tar.gz文件并编译生成jsvc

cd $CATALINA_HOME/bin
tar xvfz commons-daemon-native.tar.gz
cd commons-daemon-1.0.15-native-src/unix
./configure
make
cp jsvc ../..
cd ../..

7.3 可以通过以下命令启动tomcat服务并测试

CATALINA_BASE=$CATALINA_HOME
cd $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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息