因为现在的web应用使用单一的tomcat服务器,响应能力有限,并且没有高可用,所以想通过单机多实例的方式提供高可用,然后通过多机多实例的方式提高并发。 tomcat集群搭建的关键是通过什么样的组织形式对当前的tomcat服务器进行配置。不同的配置和搭建方式,解决的问题也是不同的。 为了尽可能多的测试tomcat集群的搭建方式,我们将会尝试各种配置。
要完成tomcat集群环境的搭建,需要一些配置软件的安装才能做到,否则只是通过tomcat是无法完成这个任务的。
当前环境为centos7_x64系统。
apache2.4版本之后需要APR的支持,需要先提供环境才能编译,首先下载需要的包: 从官网下载apr和apr-util,还需pcre,完成下载后解压缩,然后开始编译。 需要注意的是,apr-util1.6版本存在bug,需要降一个版本使用,否则会因为对expa的链接没有主动链接造成编译错误。
APR:
./configure --prefix=/usr/local/bin/tomcatCluster/apr
make -j4
make install
APR-UTIL:
yum install expat-devel
./configure --prefix=/usr/local/bin/tomcatCluster/apr-util --with-apr=/usr/local/bin/tomcatCluster/apr
make -j4
make install
pcre:
yum install gcc-c++
./configure --prefix=/usr/local/bin/tomcatCluster/pcre
make -j4
make install
apache:
./configure --prefix=/usr/local/bin/tomcatCluster/apache24 --with-apr=/usr/local/bin/tomcatCluster/apr --with-apr-util=/usr/local/bin/tomcatCluster/apr-util --with-pcre=/usr/local/bin/tomcatCluster/pcre
make -j4
make install
然后输入: apache24/bin/apachectl start 启动httpd服务,然后查看是否可运行; curl localhost 返回结果为:
<html><body><h1>It works!</h1></body></html>
参考: Linux下编译安装Apache 2.4 編譯安裝apache2.4.26出現的問題
从官方下载地址: http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html 获取最新的代码,然后编译安装:
yum install autoconf libtool
cd native
./buildconf.sh
./configure --with-apxs=/usr/local/bin/tomcatCluster/apache24/bin/apxs
make
make install
就会在/usr/local/bin/tomcatCluster/apache24/module/目录下看到mod_jk.so文件了,表示编译安装成功。
从nginx官方网站下载最新的稳定版本: https://nginx.org/en/download.html 因为nginx编译依赖于zlib,openssl和pcre,我们之前已经安装了pcre,系统默认带了zlib,现在只需要编译安装openssl就可以了,从官方: https://www.openssl.org/source/ 下载1.1版本的openssl。
然后执行安装:
# openssl install
./config --prefix=/usr/local/bin/openssl --openssldir=/usr/local/bin/openssl/conf
make -j4
make install
cd nginx
yum install zlib-devel
./configure \
--user=www \
--group=www \
--prefix=/usr/local/bin/tomcatCluster/nginx \
--with-http_ssl_module \
--with-openssl=/home/tools/apache/openssl-1.1.0f \
--with-pcre=/home/tools/apache/pcre-8.41 \
--with-http_stub_status_module \
--with-threads
make -j4
make install
需要注意的是:nginx编译需要依赖pcre和openssl的源代码,而不是安装目录。 安装完毕,使用如下命令检查:
/usr/local/nginx/sbin/nginx -V
回显:
nginx version: nginx/1.12.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
built with OpenSSL 1.1.0f 25 May 2017
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/bin/tomcatCluster/nginx --with-http_ssl_module --with-openssl=/home/tools/apache/openssl-1.1.0f --with-pcre=/home/tools/apache/pcre-8.41 --with-http_stub_status_module --with-threads
表示当前的nginx编译成功。
#添加用户跟用户组
/usr/sbin/groupadd -f www
/usr/sbin/useradd -g www www
#启动
/server/service/nginx/sbin/nginx -c /server/service/nginx/conf/nginx.conf
./nginx -s reload
#查询nginx主进程号
ps -ef | grep nginx
#停止进程
kill -QUIT 主进程号
#快速停止
kill -TERM 主进程号
#强制停止
pkill -9 nginx
从Redis官方网站:https://redis.io/ 获取最新的稳定版本代码 解压缩之后进行编译安装:
make PREFIX=/usr/local/bin/redis install
yum install tcl
make test
如果使用:
make
make install
如果make的时候没有设置参数,执行上述命令,会自动把redis-server,redis-cli,redis-benchmark,redis-check-aof,redis-check-dump复制到/usr/local/bin目录下。我们也可以手动将当前编译的文件拷贝过去,作为运行环境。
然后使用默认配置文件启动redis服务:
./redis-server
也可以自己设置配置来启动:
./redis-server redis.conf
启动redis服务进程后,就可以使用测试客户端程序redis-cli和redis服务交互了。例如:
./redis-cli
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
到此为止,Redis就是可用状态了。 更多细节可以参考《Redis实战》 关于Redis在tomcat集群中的使用,可以参考: CentOS7 Nginx+Redis+Tomcat集群实现session保持和共享
同时复制两个tomcat到目录下,修改server.xml文件,具体修改为: 可以通过命令查看: diff -urNa server.xml /usr/local/bin/tomcatCluster/tomcatServer_2/conf/server.xml 返回:
--- server.xml 2017-07-11 09:58:47.389073508 +0800
+++ /usr/local/bin/tomcatCluster/tomcatServer_2/conf/server.xml 2017-07-11 09:58:04.286905547 +0800
@@ -19,7 +19,7 @@
define subcomponents such as "Valves" at this level.
Documentation at /docs/config/server.html
-->
-<Server port="8005" shutdown="SHUTDOWN">
+<Server port="9005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
@@ -68,7 +68,7 @@
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
- <Connector port="8080" protocol="HTTP/1.1"
+ <Connector port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
@@ -90,7 +90,7 @@
-->
<!-- Define an AJP 1.3 Connector on port 8009 -->
- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
+ <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />
<!-- An Engine represents the entry point (within Catalina) that processes
@@ -102,7 +102,7 @@
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
- <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatServer_1">
+ <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatServer_2">
<!--For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
当前测试的场景为,在一台主机上启动多个tomcat实例,部署相同的应用。
采用apache和tomcat来一起处理,可以达到目的是负载均衡,通过多个tomcat服务器来提高最高访问并发,充分使用当前服务器的性能。
nginx的配置位于conf文件夹下,主要用于