实战Nginx+Tomcat负载均衡集群

简介:

实验环境:RHEL6.5  server1.example.com 172.25.254.1     

                                     server2.example.com 172.25.254.2     

实验内容:

1.tomcat基本配置

    1.1安装tomcat

    1.2配置环境变量并启动tomcat

    1.3设置开机启动

2.配置测试网页

       (1)自己写的JSP测试页进行测试

(2) 网络中的测试页

3.编辑nginx的配置文件

4.测试访问 172.25.254.1/test.jsp

5.tomcat 集群

    5.1Server2端配置:

    5.2 rr论寻

    5.3 ip_hash绑定

安装包:apache-tomcat-7.0.37.tar.gz

前提:已经配置好Nginx与JDK环境



1.tomcat基本配置

    1.1安装tomcat

[root@server1 mnt]# cd /opt/lnmp/

[root@server1 lnmp]# ls

apache-tomcat-7.0.37.tar.gz  java

[root@server1 lnmp]# tar zxf apache-tomcat-7.0.37.tar.gz 

[root@server1 lnmp]# ln -s apache-tomcat-7.0.37  tomcat   ##链接改名

    1.2配置环境变量并启动tomcat

[root@server1 lnmp]# vim /etc/profile

[root@server1 lnmp]# source /etc/profile

[root@server1 lnmp]# startup.sh       ##启动tomcat,tomcat的端口号是8080

Using CATALINA_BASE:   /opt/lnmp/tomcat

Using CATALINA_HOME:   /opt/lnmp/tomcat

Using CATALINA_TMPDIR: /opt/lnmp/tomcat/temp

Using JRE_HOME:        /opt/lnmp/java/

Using CLASSPATH:       /opt/lnmp/tomcat/bin/bootstrap.jar:/opt/lnmp/tomcat/bin/tomcat-juli.jar

[root@server1 bin]# netstat -antple|grep 8080

tcp        0      0 :::8080                     :::*                        LISTEN      0          21195      2913/java  

    1.3设置开机启动

[root@server1 lnmp]# cd tomcat/bin/      ###bin下的部分sh文件是tomcat的功能启动脚本文件

[root@server1 bin]# vim /etc/rc.local      ##因为nginx和tomcat等没有开机启动脚本,/etc/rc.local是开机读取的文件,

source /etc/profile   ##该文件读取的是环境变量中的绝对路径

/opt/lnmp/nginx/sbin/nginx

/opt/lnmp/tomcat/bin/startup.sh


wKiom1fVHNXQbTOEAAGhLDV1l5A906.png



    2.配置测试网页

       (1)自己写的JSP测试页进行测试  

           vim /opt/lnmp/tomcat/webapps/ROOT/steven.jsp

             SERVER-willis - Time is:<%=new java.util.Date()%>

    刷新可看到实时时间


wKioL1fVHd7R1ydMAAA6Pv2sBQk227.png


wKioL1fVHd_jXdVuAAA6gk0FDrY599.png


(2) 网络中的测试页

vim /opt/lnmp/tomcat/webapps/ROOT/test.jsp 

<%@ page contentType="text/html; charset=GBK" %>

<%@ page import="java.util.*" %>

<html><head><title>Cluster App Test</title></head>

<body>

Server Info:

<%

out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>

<%

out.println("<br> ID " + session.getId()+"<br>");

String dataName = request.getParameter("dataName");

if (dataName != null && dataName.length() > 0) {

String dataValue = request.getParameter("dataValue");

session.setAttribute(dataName, dataValue);

}

out.print("<b>Session list</b>");

Enumeration e = session.getAttributeNames();

while (e.hasMoreElements()) {

String name = (String)e.nextElement();

String value = session.getAttribute(name).toString();

out.println( name + " = " + value+"<br>");

System.out.println( name + " = " + value);

}

%>

<form action="test.jsp" method="POST">

name:<input type=text size=20 name="dataName">

<br>

key:<input type=text size=20 name="dataValue">

<br>

<input type=submit>

</form>

</body>

</html>


wKioL1fVHpiyGq9DAABXebORA_o162.png



    3.编辑nginx的配置文件

[root@server1 nginx]# pwd

/opt/lnmp/nginx

[root@server1 nginx]# vim conf/nginx.conf

          location / {

                     root   html;

                     index index.jsp index.php index.html index.htm;

                  }

         location ~  \.jsp$  {

                proxy_pass http://localhost:8080;      

                 }

[root@server1 lnmp]# nginx -t

nginx: the configuration file /opt/lnmp/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /opt/lnmp/nginx/conf/nginx.conf test is successful

[root@server1 lnmp]# nginx -s reload


    4.测试访问 172.25.254.1/test.jsp


wKioL1fVJS_jY0n7AABhlLfT9zc661.png



5.tomcat 集群

再启动一个虚拟机server2  IP为172.25.254.2

    5.1Server2端配置:

把server1端配置好的java-jdk,nginx和tomcat复制到启动的server2中

[root@server2 ~]# mkdir /opt/lnmp

[root@server2 ~]# 

[root@server2 ~]# cd /opt/lnmp

[root@server2 lnmp]# scp -r 172.25.254.1:/opt/lnmp/* .

[root@server2 lnmp]# scp -r 172.25.254.1:/etc/profile /etc/

[root@server2 lnmp]# source /etc/profile       

[root@server2 lnmp]# startup.sh 


测试server2的tomcat

wKiom1fVOfayWULQAABXAZeeBwg496.png



    5.2 rr论寻

[root@server2 lnmp]# vim /opt/lnmp/nginx/conf/nginx.conf

 18 http {

 19     include       mime.types;

 20     default_type  application/octet-stream;

 21         upstream tomcat{

 22                 server 172.25.6.10:8080;

 23                 server 172.25.6.20:8080;

 24         }


 49         location / {

 50             root   html;

 51             index index.jsp index.php index.html index.htm;

 52         }

 53         location ~ \.jsp$ {

 54                 proxy_pass http://tomcat;

 55         }

 56 

测试:访问172.25.254.2:8080 无论是那个ip访问的都是server1一次server2一次

关闭server1的tomcat,只访问server2


    5.3 ip_hash绑定(同一个ip访问的是同一台服务器

(1)vim /opt/lnmp/nginx/conf/nginx.conf

18 http {

 19     include       mime.types;

 20     default_type  application/octet-stream;

 21         upstream tomcat{

 22    ip_hash;

 23                 server 172.25.15.110:8080;

 24                 server 172.25.15.112:8080;

 25         }

    (2)测试   ./shutdown.sh

        关闭一台后访问另外一台


本文转自willis_sun 51CTO博客,原文链接:http://blog.51cto.com/willis/1851737,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
401 21
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
390 14
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
484 11
|
Kubernetes 安全 应用服务中间件
IngressNightmare:Ingress Nginx 再曝5个安全漏洞,可接管你的 K8s 集群
是否还记得 2022 年 K8s Ingress Nginx 披露了的 3 个高危安全漏洞(CVE-2021-25745, CVE-2021-25746, CVE-2021-25748),并在那一年宣布停止接收新功能 PR,专注修复并提升稳定性。
|
负载均衡 算法 应用服务中间件
Nginx长连接负载均衡详细说明以及案例
本文详细介绍了Nginx长连接负载均衡的配置与原理。长连接(Keepalive)允许客户端和服务器保持连接,减少建立和关闭连接的开销。Nginx支持多种负载均衡算法,如轮询、IP哈希等。通过在Nginx配置文件中使用`upstream`模块和`keepalive`指令,可以实现长连接负载均衡,从而提高系统的性能和响应速度。示例配置展示了如何设置后端服务器组、长连接数及HTTP/1.1协议,确保连接复用,降低延迟。
801 5
|
负载均衡 应用服务中间件 nginx
如何使用nginx实现负载均衡?
如何使用nginx实现负载均衡?
|
负载均衡 应用服务中间件 API
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
Nginx配置文件详解Nginx负载均衡Nginx静态配置Nginx反向代理
454 4
|
负载均衡 Java 应用服务中间件
Nginx负载均衡配置
Nginx负载均衡配置
|
负载均衡 算法 Java
java中nginx负载均衡配置
java中nginx负载均衡配置
333 0