Tomcat高可用集群(实例详解)

news2024/9/20 5:35:44

一.环境准备

  • 虚拟机的版本:VMware-workstation-full-15.5.6-16341506.exe
  • 系统镜像版本:CentOS-6.10-x86_64-bin-DVD1.iso,全新安装,桌面版,可上网
  • 系统内存大小:1GB
  • 系统硬盘大小:20GB
  • 连接工具版本:SecureCRTSecureFX_HH_x64_7.0.0.326.zip

二.集群概述

由于单台Tomcat的承载能力是有限的,当我们的业务系统用户量比较大,请求压力比较大时,单台Tomcat是扛不住的,这个时候,就需要搭建Tomcat的集群,而目前比较流程的做法就是通过Nginx来实现Tomcat集群的负载均衡。

三.集群架构

1. 安装第一台Tomcat服务器

解压:

tar -zxvf apache-tomcat-8.5.57.tar.gz

安装:

mv apache-tomcat-8.5.57 /usr/local/tomcat1

创建测试目录和页面:

mkdir -p /usr/local/tomcat1/webapps/edu
echo "<h1>This is 8080 Port</h1>" > /usr/local/tomcat1/webapps/edu/a.html

开放防火墙:

/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
/etc/rc.d/init.d/iptables save

启动:

/usr/local/tomcat1/bin/startup.sh

2.安装第二台Tomcat服务器

解压:

tar -zxvf apache-tomcat-8.5.57.tar.gz

安装:

mv apache-tomcat-8.5.57 /usr/local/tomcat2

修改端口:

3.安装Nginx反向代理服务器

安装依赖:

yum install -y gcc gcc-c++ make libtool wget pcre pcre-devel zlib zlib-devel openssl openssl-devel

Nginx下载:

wget http://nginx.org/download/nginx-1.18.0.tar.gz

Nginx解压:

tar -zxvf nginx-1.18.0.tar.gz

Nginx安装:

cd nginx-1.18.0
./configure
make && make install

注意:安装完成后的路径为:/usr/local/nginx

 Nginx配置:

vi /usr/local/nginx/conf/nginx.conf
#在 server 外边配置,负载均衡服务列表
upstream myserver {
	server 192.168.239.144:8080;
	server 192.168.239.144:8081;
}

#在 location / { 里边配置,路径请求转发规则
	proxy_pass http://myserver;
/usr/local/nginx/sbin/nginx

Nginx命令:

  • 普通启动服务:/usr/local/nginx/sbin/nginx
  • 配置文件启动:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  • 暴力停止服务:/usr/local/nginx/sbin/nginx -s stop
  • 优雅停止服务:/usr/local/nginx/sbin/nginx -s quit
  • 检查配置文件:/usr/local/nginx/sbin/nginx -t
  • 重新加载配置:/usr/local/nginx/sbin/nginx -s reload
  • 查看相关进程:ps -ef | grep nginx

开放防火墙: 

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/etc/rc.d/init.d/iptables save
iptables:将防火墙规则保存到 /etc/sysconfig/iptables:[确定]

访问测试:

打开浏览器访问:ip+/edu/a.html

4.如何解决session共享问题

实例一、ip_hash 策略

通过修改Nginx配置文件,让每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。 例如:

upstream server_pool{
ip_hash;
server ip1:80;
server ip2:80;
}

实例2:session 复制

在每台Tomcat的 conf/server.xml 配置如下:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

在每台Tomcat部署的应用程序中,例如:servlet_demo 的 web.xml 中加入如下配置 :

<distributable/>

注意:上述方案,适用于较小的集群环境(节点数不超过4个),如果集群的节点数比较多的话,通过这种广播的形式来完成Session的复制,会消耗大量的网络带宽,影响服务的性能。

四.Tomcat 安全问题

1.配置安全

  • 删除webapps目录下的所有文件
  • 禁用tomcat管理界面
  • 注释或删除tomcat-users.xml文件内的所有用户权限
  • 更改关闭tomcat指令或禁用
  • 定义错误页面

2.应用安全

在大部分的Web应用中,特别是一些后台应用系统,都会实现自己的安全管理模块(权 限模块),用于控制应用系统的安全访问,基本包含两个部分:认证(登录/单点登录) 和授权(功能权限、数据权限)两个部分。对于当前的业务系统,可以自己做一套适用 于自己业务系统的权限模块,也有很多的应用系统直接使用一些功能完善的安全框架, 将其集成到我们的web应用中,如:SpringSecurity、Apache Shiro等。

3.传输安全

HTTPS的全称是超文本传输安全协议(Hypertext Transfer Protocol Secure),是一种网络安全传输协议。在HTTP的基础上加入SSL/TLS来进行数据加密,保护交换数据不被泄露、窃取。

SSL 和 TLS 是用于网络通信安全的加密协议,它允许客户端和服务器之间通过安全链接 通信。SSL 协议的3个特性:

  • 保密:通过SSL链接传输的数据时加密的。
  • 鉴别:通信双方的身份鉴别,通常是可选的,单至少有一方需要验证。
  • 完整性:传输数据的完整性检查。

从性能角度考虑,加解密是一项计算昂贵的处理,因为尽量不要将整个Web应用采用SSL 链接, 实际部署过程中, 选择有必要进行安全加密的页面(存在敏感信息传输的页面) 采用SSL通信。

HTTPS和HTTP的区别主要为以下四点:

  • HTTPS协议需要到证书颁发机构CA申请SSL证书,然后与域名进行绑定,HTTP不用申请证书。
  • HTTP是超文本传输协议,属于应用层信息传输,HTTPS则是具有SSL加密传安全性传输协议,对数据的传输进行加密,相当于HTTP的升级版。
  • HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是8080,后者是8443。
  • HTTP的连接很简单,是无状态的、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。

HTTPS协议优势:

  • 提高网站排名,有利于SEO。谷歌已经公开声明两个网站在搜索结果方面相同,如果 一个网站启用了SSL,它可能会获得略高于没有SSL网站的等级,而且百度也表明对安装了SSL的网站表示友好。因此,网站上的内容中启用SSL都有明显的SEO优势。
  • 隐私信息加密,防止流量劫持。特别是涉及到隐私信息的网站,互联网大型的数据泄露的事件频发发生,网站进行信息加密势在必行。
  • 浏览器受信任。 自从各大主流浏览器大力支持HTTPS协议之后,访问HTTP的网站都会提示“不安全”的警告信息。

Tomcat支持HTTPS:这里采用单实例版本的Tomcat进行配置测试:

 第一步:查找密钥库生成器,这个工具是java提供的

find / -name keytool
/usr/bin/keytool
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.41.x86_64/jre/bin/keytool
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.181.x86_64/jre/bin/keytool
/etc/alternatives/keytool

第二步:生成密钥库文件

/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.181.x86_64/jre/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore tomcatkey.keystore
输入密钥库口令:  
再次输入新口令: 
您的名字与姓氏是什么?(这里使用的必须是域名)
  [Unknown]:  www.abc.com
您的组织单位名称是什么?
  [Unknown]:  abc
您的组织名称是什么?
  [Unknown]:  abc
您所在的城市或区域名称是什么?
  [Unknown]:  BeiJing
您所在的省/市/自治区名称是什么?
  [Unknown]:  BeiJing
该单位的双字母国家/地区代码是什么?
  [Unknown]:  CN
CN=www.abc.com, OU=abc, O=abc, L=BeiJing, ST=BeiJing, C=CN是否正确?
  [否]:  Y

输入 <tomcat> 的密钥口令
        (如果和密钥库口令相同, 按回车):  

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore tomcatkey.keystore -destkeystore tomcatkey.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

第三步:将密钥库文件 tomcatkey.keystore 复制到tomcat/conf目录下

cp tomcatkey.keystore /usr/local/tomcat/conf/

第四步:配置tomcat/conf/server.xml

先删除:

rm -rf /usr/local/tomcat/conf/server.xml

先添加:

vi /usr/local/tomcat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
	<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
	<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
	<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
	<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
	<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

	<GlobalNamingResources>
		<Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" />
	</GlobalNamingResources>



	<Service name="Catalina">
		<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

		<!-- 主要新增的代码 -->
		<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" schema="https" secure="true" SSLEnabled="true">
			<SSLHostConfig certificateVerification="false">
				<Certificate certificateKeystoreFile="/usr/local/tomcat/conf/tomcatkey.keystore" certificateKeystorePassword="123456" type="RSA" />
			</SSLHostConfig>
		</Connector>

		<Engine name="Catalina" defaultHost="localhost">
			<Realm className="org.apache.catalina.realm.LockOutRealm">
				<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
			</Realm>
			<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
				<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
			</Host>
		</Engine>
	</Service>
</Server>

第五步:关闭服务器,防止启动失败,然后再启动访问

/usr/local/tomcat1/bin/shutdown.sh 
/usr/local/tomcat2/bin/shutdown.sh  
/usr/local/nginx/sbin/nginx -s quit
/usr/local/tomcat/bin/startup.sh

第六步:配置主机域名映射

在/etc/hosts中 ,增加一条记录。

#虚拟机的IP地址       虚拟域名
192.168.1.1        www.abc.com

打开浏览器进行访问:www.abc.com:8443即可访问到tomcat网站。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1986909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《决胜B端 产品经理升级之路》 知识点总结

什么是b端产品&#xff1f; b端产品是指面向企业或组织的经营管理问题&#xff0c;旨在解决企业规模、成本、效率、品质和风控等方面的产品。这些产品主要帮助企业提高运营效率、降低成本、改善品质和控制风险等。b端产品适用于各种行业和企业类型&#xff0c;可以为企业带来深…

WordPress原创插件:disable-gutenberg禁用古腾堡编辑器和小工具

WordPress原创插件&#xff1a;disable-gutenberg禁用古腾堡编辑器和小工具 disable-gutenberg插件下载:https://download.csdn.net/download/huayula/89616495

【zlm】针对单个设备的音频的编码的设置

目录 结论 原理 测试 结论 为了防止zlm音频配置里设置成opus优先&#xff0c;在国标推流时&#xff0c;调用push时&#xff0c;默认加上codecpcma 如下 https://10.60.100.196:10443/index/api/webrtc?applive&streamtest&typepush&codecpcma 原理 测试 …

ASP.Net Core设置接口根路径的方法

使用asp.net core开发微服务项目&#xff0c;需要给每个服务设置不同的根路径&#xff0c;这样既能使用网关转发请求&#xff0c;又方便对单个服务进行测试&#xff0c;保证请求路径的统一。 设置方法需要使用中间件&#xff0c;在Program.cs添加如下代码 app.UsePathBase(&qu…

量化投资基础(四)之AR、MA、ARMA与ARIMA模型

点赞、关注&#xff0c;养成良好习惯 Life is short, U need Python 量化投资基础系列&#xff0c;不断更新中 1 引言 时间序列经典模型主要有: 自回归模型&#xff08;Auto Regressive&#xff0c;AR&#xff09;移动回归模型&#xff08;Moving Average&#xff0c;MA&…

无线领夹麦克风哪个品牌好,哪款领夹式麦克风性价比高

随着自媒体行业的蓬勃发展&#xff0c;内容创作者对高质量音频设备的需求日益增长。无线领夹麦克风&#xff0c;凭借其便携性、高音质与灵活性&#xff0c;正逐渐成为视频制作、直播互动及日常Vlog记录的标配工具。其兴起不仅反映了创作者对专业录音品质的追求&#xff0c;也体…

Web安全学习

1 计算机网络与协议 1.1 网络基础 1.1.1 计算机通信网的组成 计算机网络由通信子网和资源子网组成。 通信子网&#xff1a;负责数据的无差错和有序传递&#xff0c;其处理功能包括差错控制、流量控制、路由选择、网络互连等。 资源子网&#xff1a;是计算机通信的本地系统环境…

全球油价与棕榈油市场波动

一、油价暴跌与经济衰退担忧 周一&#xff08;8月5日&#xff09;欧盘时段&#xff0c;油价暴跌&#xff0c;两大主要基准油价均下跌逾2%&#xff0c;触及八个月低点。油价的急剧下跌主要是由于人们担心全球最大的石油消费国美国可能陷入衰退。全球疲弱的经济数据加剧了人们对燃…

绿色精益生产新潮流:环保也能成为竞争力!

在当今这个快速变化且竞争激烈的市场环境中&#xff0c;企业面临着前所未有的挑战。为了保持竞争力并实现可持续发展&#xff0c;企业必须不断探索和采用更高效、更灵活的生产管理方式。精益生产&#xff0c;作为一种源自日本丰田汽车公司的生产哲学&#xff0c;凭借其消除浪费…

Animate软件基本概念:组和文本

这里继续介绍Animate软件中的基本概念&#xff0c;组和文本两个概念。 FlashASer&#xff1a;AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer&#xff1a;实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 Fl…

Go - 10. * 值类型和指针类型的差异

目录 一.引言 二.接收者类型 三.代码示例 1.指针接收者 2.值接收者 3.运行结果对比 4.代码修改 5.刨根问底 四.总结 一.引言 go 语言中 func (c *Title) 和 func (c Title) 两个方法的传参差一个 * 号&#xff0c;二者的区别是一个是指针类型&#xff0c;一个是值类型…

scratch水仙花数 2024年6月scratch四级 中国电子学会图形化编程 少儿编程等级考试四级真题和答案解析

目录 scratch水仙花数 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、p…

深度学习入门(一):感知机与输入数据

单层感知机与多层感知机 单层感知机&#xff08;Single-Layer Perceptron&#xff09;和多层感知机&#xff08;Multi-Layer Perceptron&#xff0c;简称MLP&#xff09;是神经网络的基本形式&#xff0c;用于执行各种机器学习任务&#xff0c;包括分类和回归。它们都基于早期…

赚他10个亿...

体育竞技 & 商业价值 虽然昨天遭受了全球黑一&#xff0c;但四年一度的奥运会还是要关注的。 不知道最近大家是否有关注巴黎奥运会&#xff0c;印象深刻的项目又是哪个&#xff1f; 截止于发稿前&#xff0c;目前「金牌榜」上&#xff0c;中国以微弱优势位于第一&#xff0…

CDGA/CDGP数据治理证书:含金量高,职场竞争力提升的明智之选

在当今这个数据驱动的时代&#xff0c;数据已成为企业最宝贵的资产之一&#xff0c;而高效、合规的数据治理则是挖掘数据价值、驱动业务增长的关键。随着企业对数据治理重视程度的不断提升&#xff0c;拥有专业数据治理知识和技能的人才变得尤为稀缺。在此背景下&#xff0c;CD…

win10批量修改文件名,记得保存文件

打开需要修改的文件夹新建文本内容如下 DIR . /B>文件列表.csv 并另存为bat文件,注意编码&#xff0c;双击bat文件生成Excel 打开Excel 填写你的文件名至B列&#xff0c;如我需要在文件名前面都加上spi5_公式D1&A1 C列输入"REN "&"""&q…

【C++BFS算法】2059. 转化数字的最小运算数

本文涉及知识点 CBFS算法 LeetCode2059. 转化数字的最小运算数 给你一个下标从 0 开始的整数数组 nums &#xff0c;该数组由 互不相同 的数字组成。另给你两个整数 start 和 goal 。 整数 x 的值最开始设为 start &#xff0c;你打算执行一些运算使 x 转化为 goal 。你可以…

实验8-1-7 数组循环右移

本题要求实现一个对数组进行循环右移的简单函数&#xff1a;一个数组a中存有n&#xff08;>0&#xff09;个整数&#xff0c;将每个整数循环向右移m&#xff08;≥0&#xff09;个位置&#xff0c;即将a中的数据 &#xff08;最后m个数循环移至最前面的m个位置&#xff09;…

CMU15445 (Fall 2023) Project 4 - Concurrency Control 思路分享

文章目录 写在前面Task 1 - Timestamps1.1 Timestamp Allocation1.2 Watermark Task 2 - Storage Format and Sequential Scan2.1 Tuple Reconstruction2.2 Sequential Scan / Tuple Retrieval Task 3 - MVCC Executors3.1 Insert Executor3.2 Commit3.3 Update and Delete Exe…