一、为什么用nginx和tomcat搭建群集?
-
传统模型下,一个项目部署在一台tomcat上,这个时候,假如 tomcat 因为服务器资源不够,突然挂机了,出现单点故障,那么整个项目就无法使用,给客户造成的损失可想而知!!
-
Tomcat 不能单独应用于生产环境下,我们需要一套更可靠的解决方案来完善web站点架构。
-
Nginx 能够支持高达50000个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存、CPU等系统资源消耗非常低。
-
目前很多大型网站都应用 Nginx 服务器作为后端网站程序的反向代理以及负载均衡器,来提升整个站点的负载并发能力。
-
我们可以部署 Nginx + tomcat 服务群集,就可以避免单台服务如果挂机,依然能保证服务正常使用。
-
当我们把项目 war 包部署到三台服务器上时,即使服务器A、服务器B都挂了,依然能够通过服务器C访问项目资源!
二、部署环境
服务类型 | IP地址 | 软件包 |
---|---|---|
Nginx服务器 | 192.168.100.128 | nginx-1.12.2.tar.gz |
Tomcat01服务器 | 192.168.100.131 | jdk-8u91-linux-x64.tar.gz 、apache-tomcat-8.5.16.tar.gz |
Tomcat02服务器 | 192.168.100.132 | jdk-8u91-linux-x64.tar.gz 、apache-tomcat-8.5.16.tar.gz |
客户端 | 192.168.100.10 |
- 部署拓扑图:
三、部署过程
3.1、Tomcat1 部署
//关闭防火墙
systemctl stop firewalld
setenforce 0
//解压jdk环境包
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
//添加JAVA环境变量
vim /etc/profile
在末尾处添加以下代码
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile //加载使环境变量生效
//解压tomcat软件包
tar zxvf apache-tomcat-8.5.16.tar.gz -C /usr/local/
//把文件夹改名,方便使用
cd /usr/local/
mv apache-tomcat-8.5.16 tomcat
//创建软链接,方便服务管理
ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
//在tomcat1中创建web站点
cd /usr/local
mkdir -p /web/webapp1
cd /web/webapp1
vim index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("Welcome TEST01 Web");%>
</body>
</html>
//修改Tomcat的server.xml文件,定义一个虚拟主机,并且将网站文件路径指向已经建立
的/web/webapp1,在host段增加context段
vim /usr/local/tomcat/conf/server.xml
<Host nane="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true" >
//添加以下行
<Context docBase="/web/webapp1" path="" reloadable="false">
</Context>
3.2、Tomcat2 部署
//关闭防火墙
systemctl stop firewalld
setenforce 0
//解压jdk环境包
tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
//添加JAVA环境变量
vim /etc/profile
在末尾处添加以下代码
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile //加载使环境变量生效
//解压tomcat软件包
tar zxvf apache-tomcat-8.5.16.tar.gz -C /usr/local/
//把文件夹改名,方便使用
cd /usr/local/
mv apache-tomcat-8.5.16 tomcat
//创建软链接,方便服务管理
ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
//在tomcat2中创建web站点,此处站点路径要与tomcat1一致。
mkdir -p /web/webapp1
cd /web/webapp1
//网页内容要设置不同的,便于验证部署群集的结果
vim index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("Welcome TEST02 Web");%>
</body>
</html>
//修改Tomcat的server.xml文件,定义一个虚拟主机,并且将网站文件路径指向已经建立
的/web/webapp1,在host段增加context段
vim /usr/local/tomcat/conf/server.xml
<Host nane="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true" >
//添加以下行
<Context docBase="/web/webapp1" path="" reloadable="false">
</Context>
3.3、nginx服务器部署
//关闭防火墙
systemctl stop firewalld
setenforce 0
//安装依赖包
yum -y install gcc gcc-c++ make pcre-devel zlib-devel
//解压安装包到/opt/目录下。
tar zxvf nginx-1.12.2.tar.gz -C /opt/
//创建nginx用户
useradd -M -s /sbin/nologin nginx
//配置编译安装
cd /opt/nginx-1.12.2/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_flv_module
make && make install
//创建软链接,优化服务
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
//修改配置文件
vim /usr/local/nginx/conf/nginx.conf
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#使用upstream函数,配置tomcat服务器地址池
upstream tomcatserver {
server 192.168.220.168:8080 weight=1;
server 192.168.220.136:8080 weight=1;
}
server{
listen 80;
location / {
root html;
index index.html index.htm;
proxy_pass http://tomcatserver;
#反向代理到设置的tomcat服务器地址池里
}
nginx -t
//检测是否成功//
nginx //启动
netstat -natp | grep 80
3.4、验证
在浏览器输入nginx的IP地址,观察是否将请求代理到tomcat服务器,刷新页面可以哦看到tomcat服务器通过nginx调度实现轮流工作。