Nginx + Tomcat 负载均衡群集 内附源码包
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx + Tomcat 负载均衡群集 内附源码包相关的知识,希望对你有一定的参考价值。
前言:
1·在之前都学习 Linux 的一些服务和搭建,都很熟悉 !这篇文章主要讲nginx、Tomcat与 Nginx + Tomcat 负载均衡群集。
2·在各种网站服务器软件中,除了 Apache HTTP Server 外,还有一款轻量级的 HTTP 服务器软件——Nginx,它是由俄罗斯 Lgor Sysoev(伊戈尔·赛索耶夫)开发。
Nginx 的优点:
1·稳定性
2·系统资源消耗低
3·高并发链接的处理能力 (30000~50000 个并发请求),核心优点!
4·反向代理服务器
5·安装、配置非常简介 (支持 per 语法)
6·启动容易、几乎可以做到 7 * 24 不间断运行
Nginx 适用范围
1·大量提供社交网络
2·新闻资讯
3·电子商务
4·虚拟主机等
5·列如:淘宝、新浪博客、新浪播客、网易新闻 等
Nginx的不为人知的特点
1· nginx代理和后端web服务器间无需长连接;
2·接收用户请求是异步的,即先将用户请求全部接收下来,再一次性发送后后端web服务器,极大的减轻后端web服务器的压力 发送响应报文时,是边接收来自后端web服务器的数据,边发送给客户端的
3·网络依赖型低。NGINX对网络的依赖程度非常低,理论上讲,只要能够ping通就可以实施负载均衡,而且可以有效区分内网和外网流量 支持服务器检测。NGINX能够根据应用服务器处理页面返回的状态码、超时信息等检测服务器是否出现故障,并及时返回错误的请求重新提交到其它节点上
4·nginx是以多进程的方式来工作的,当然nginx也是支持多线程的方式的,只是我们主流的方式还是多进程的方式,也是nginx的默认方式
Tomcat 简介:
1· Tomcat 最初是由 Sun 的软件架构师 詹姆斯·邓肯·戴维森开发的,后来他将其变为开源项目,并献给 Apache 软件基金会 ,詹姆斯希望讲此项目以一个动物的名字命名,所以才命名为 Tomcat (公猫)。
2·Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应html(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
Tomcat 与 Nginx 的区别
1· Tomcat一般是做动态解析才会用得到,支持jsp的解析,需要配置JDK支持
2· Tomcat一般支持并发并不高100个差不多了
3· Nginx 则一般是做静态,本身不具备动态解析功能,需要配置其他插件或通过其他软件协同才具备动态功能,但nginx在静态上的功能非常强大,也可做访问控制,而且可以做成各种协议负载服务器,包括流媒体的也可以做
4·Nginx 在静态方面支持并发轻松达几万
Nginx + Tomcat 反向代理之负载均衡
1·反向代理(Reverse Proxy)方式是指:以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。如下图所示:
2·一个 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的请求问题,不能单独应用于生产环境下,所以我们需要一套更可靠的解决方案来完善 WEB 站点架构
3· Nginx 是一款非常优秀的 http 服务器软件,它能够支持高达50000个并发链接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存、cpu等系统资源消耗非常低。
4· 下面这个案例讲讲解以 Nginx 作为负载均衡器,Tomcat 作为应用服务器的负载集群的设置方法。如下拓扑图:
环境部署准备说明:
主机 | 操作系统 | IP地址 | 主要软件 |
---|---|---|---|
Nginx 服务器 | CenOS 7 | 192.168.100.60 | nginx-1.12.0.tar.gz |
Tomcat 服务器1 | CenOS 7 | 192.168.100.70 | jdk-8u91-linux-x64.tar.gz 和 apache-tomcat-8.5.16.tar.gz |
Tomcat 服务器2 | CenOS 7 | 192.168.100.80 | jdk-8u91-linux-x64.tar.gz 和 apache-tomcat-8.5.16.tar.gz |
window 7 | 无 | 192.168.100.90 | 主要用于实验结果测试 |
源码包附送:
需要源码包的请访问:百度网盘源码包 密码:o0jl
部署开始:
1·安装 Tomcat 服务器
· 安装 Tomcat 服务器之前必须安装JDK。它是 Sun 公司免费提供的 Java 语言的软件开发工具包,只有安装了 JDK 才可以识别 tomcat
执行以下命令解压软件包、且移动、重命名: jdk-8u91-linux-x64.tar.gz。
· tar zxvf jdk-8u91-linux-x64.tar.gz -C /opt/
· cd /opt/
· mv jdk1.8.0_91 /usr/local/java
2·配置 Java 环境:
·在 /etc/profile.d 下建立 java.sh 脚本,内容如下:
· vim /etc/profile.d/java.sh
· #!/bin/bash
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
·将 java.sh 脚本导入到环境变量,使其生效
· source /etc/profile.d/java.sh
运行 java - version 命令查看 Java 白本是否和之前安装的一致
·java -version 得到以下结果
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
到此 Java 环境配置完成
安装配置 Tomcat
1· 解压 apache-tomcat-8.5.16.tar.gz 包
[[email protected] ~]# tar -zxvf apache-tomcat-8.5.16.tar.gz -C /opt/
2· 将解压后生成的文件 apache-tomcat-8.5.16 移动到 /usr/local/下,改名为 tomcat8
[[email protected] ~]# mv /opt/apache-tomcat-8.5.16 /usr/local/tomcat8
3· 启动 Tomcat
· [[email protected] ~]# /usr/local/tomcat8/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat8
Using CATALINA_HOME: /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
4· Tomcat 默认运行在 8080 端口,运行 netstat 查看8080端口监听信息
·[[email protected] bin]# netstat -antp | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 1767/java
5·打开window 7浏览器访问 http://192.168.100.70:8080,如出现以下界面,则表示 Tomcat 配置启动成功。
6·为了之后方便识别,修改它的站点,创建 Web 目录 为它的站点
·[[email protected] bin]# mkdir -pv /web/app1
mkdir: 已创建目录 "/web/app1"
7· 在 /web/app1 中创建默认首页,这里需要注意,格式为: .jsp 结尾
[[email protected] bin]# vim /web/app1/index.jsp
加入以下内容:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("Welcome to test site,http ://www .test1.com");%>
</body>
</html>
8· 修改主配置文件,指定站点目录为我们创建的新目录 /web/app1/index.jsp
[[email protected] conf]# vim /usr/local/tomcat8/conf/server.xml
在Host name 下加入以下内容
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context docBase="/web/app1" path="" reloadable="false">
</Context>
9·重启服务、访问 http://192.168.100.70:8080 再次验证:
10·到此 Tomcat 1 配置完毕,Tomcat 2 配置都是一样的,只是需要修改站点内容,方便识别!
· 关闭防火墙 firewalld 、setenforce 0
· 安装 JDK ,配置 Java 环境 版本保持一致
· 安装配置 Tomcat 保本保持一致
· 创建 /web/app2 目录,修改 Tomcat 配置文件 server.xml ,将网站文件目录更改到 /web/app2 路径下
· 在 /web/app2 目录创建 index.jsp ,为了区别测试页面 index.jsp 稍作调整就好
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("Welcome to test site,http ://www .test2.com");%>
</body>
</html>
Nginx 服务器配置
在 Nginx 服务器 192.168.100.60 下安装 Nginx ,反向代理两个 Tomcat 站点,并实现负载均衡
1·创建管理 Nginx 用户
useradd -M -s /sbin/nologin nginx
2·解压缩软件包 nginx-1.12.0.tar.gz
[[email protected] ~]# tar -zxvf nginx-1.12.0.tar.gz -C /opt/
3·编译环境安装
[[email protected] ~]# yum install gcc gcc-c++ pcre-devel zlib-devel openssl-devel -y
4·开始安装,编译
[[email protected] ~]# cd /opt/nginx-1.12.0/
./configure
--prefix=/usr/local/nginx
--user=nginx
--group=nginx
--with-file-aio
--with-http_stub_status_module
--with-http_gzip_static_module
--with-http_flv_module
--with-http_ssl_module
[[email protected] nginx-1.12.0]# make && make install
5·解释以上模块的含义,按照顺序解释:
· 指定安装路径为 /usr/local/nginx
· 指定运行的用户为 nginx
· 指定运行的组为 nginx
· 启用文件修改支持
· 启用状态统计
· 启用 gzip 静态压缩
· 启用 flv 模块,提供寻求内存使用基于时间的偏移量文件
· 启用 SSL 模块
6·修改主配置文件:nginx.conf ,设定负载均衡的服务器列表
[[email protected] nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
http {
include mime.types;
default_type application/octet-stream;#log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘ # ‘$status $body_bytes_sent "$http_referer" ‘ # ‘"$http_user_agent" "$http_x_forwarded_for"‘; #access_log logs/access.log main; sendfile on; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; 需要加入以下4行,包括符号!
> upstream tomcat_server {
> server 192.168.100.70:8080 weight=1;
> server 192.168.100.80:8080 weight=1;
> }server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm;
> proxy_pass http ://tomcat_server; 需要加入这句话
利用以上方式,把 Nginx 的默认站点通过prox_pass 方法代理到了设定好的 tomcat_server 负载均很服务器组上
6·测试 Nginx 配置文件是否正确:
[[email protected] ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
以上说明 Nginx 配置正确,无语法错误
7· 为了我们方便管理 Nginx 的启动方式,和我们自己的习惯,这里写一个启动脚本!
[[email protected] ~]# vim /etc/init.d/nginx
#!/bin/bashPROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
$PROG
;;
stop)
kill -s QUIT $(cat $PIDF)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PIDF)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
8·赋予 Nginx 启动脚本执行权限、并启动服务
· chmod +x /etc/init.d/nginx
·chkconfig --add nginx
·systemctl start nginx
·systemctl status nginx
9·查看 Nginx 端口号及 PID 进程:
[[email protected] ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13611/nginx: master
测试负载均衡效果:
1·打开 window 7 访问 http:// 192.168.100.60
2·不断刷新浏览器测试,可以看到由于权重相同,页面会在以下两个页面来回切换
3·如下图,第一次访问出现 test 1 ,刷新再次访问,出现 test 2 .说明负载均衡群集搭建成功!
过程中可能遇到的问题排错:
1·配置 Tomcat 时需要首先安装 JDK 软件包
2·配置号 Java 环境后需要执行 source /etc/profile.d/java.sh 使其生效
3·安装 Nginx 前 需要 yum install gcc gcc-c++ pcre-devel zlib-devel openssl-devel -y 否则会报错
4·修改 Nginx 主配置文件时需要注意特殊的符号,不要漏写。使用命令:/usr/local/nginx/sbin/nginx -t 检查配置文件格式
5·检查是否重启服务、关闭防火墙!
总结与归纳:
1·Tomcat 服务器时一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选
2·在安装 Tomcat 之前必须先安装 JDK。server.xml 为 Tomcat 的主配置文件。通过该文件,可以修改启动端口、网站目录、虚拟主机、开启https 等功能
3·可以将两个或两个以上的 Tomcat 服务器放到 Nginx 中组成一个负载均衡群集,然后通过 proxy_pass 这种 Web 带的方式在 localtion 中设置集群站点,通过 weight 值来分别对 Tomcat 服务器进行权重的设置
4·在生成环境中,Tomcat server 的硬件可能会不相同,可以通过修改相应服务器的 weight 值,对配置较高或稍微低一点的服务器进行分配控制
以上是关于Nginx + Tomcat 负载均衡群集 内附源码包的主要内容,如果未能解决你的问题,请参考以下文章
Nginx + Tomcat 实现 负载均衡 和 动静分离群集