首页 > 其他分享 >Tomcat高可用集群(实例详解)

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

时间:2024-08-06 08:57:37浏览次数:17  
标签:tomcat Tomcat SSL nginx 实例 usr local 详解

一.环境准备

  • 虚拟机的版本: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网站。

标签:tomcat,Tomcat,SSL,nginx,实例,usr,local,详解
From: https://blog.csdn.net/L08130421/article/details/140927834

相关文章

  • linux运维一天一个shell命令之tcpdump详解
    一、tcpdump的概念tcpdump是一个数据包捕获工具,能够拦截和显示通过网络接口的数据包。它可以实时捕获数据包,也可以将捕获的数据保存到文件中以便后续分析。tcpdump支持基于多种条件(如IP地址、端口号、协议等)来捕获特定的数据包。二、主要功能和特点1.数据包捕获:tcp......
  • 仓颉编程语言入门 -- Array数组详解
    仓颉编程语言入门–Array数组详解一.如何创建Array数组我们可以使用Array类型来构造单一元素类型,有序序列的数据。1.仓颉使用Array来表示Array类型。T表示Array的元素类型,T可以是任意类型,类似于泛型的概念vararr:Array<String>=["你好","仓颉"]va......
  • Mojo中集成Python详解及问题说明
    官方的长期目标是让Mojo成为Python的超集(即让Mojo与现有的Python程序兼容)。Python程序员应该能够立即使用Mojo,并能够访问当今庞大的Python包生态系统。然而,Mojo仍处于早期开发阶段,许多Python功能尚未实现。目前,您无法在Mojo中编写所有可以用Python编写的......
  • Mojo 不安全指针 详解
    该UnsafePointer类型创建对内存中某个位置的间接引用。您可以使用UnsafePointer来动态分配和释放内存,或指向由其他代码分配的内存。您可以使用这些指针编写与低级接口交互的代码,与其他编程语言交互,或构建某些类型的数据结构。但顾名思义,它们本质上是不安全的。例如,当使用不......
  • 多态的可扩展性动物行为实例 day09
    packagecom.shujia.day09;importjava.nio.channels.Pipe;/*多态的好处1、提高了程序的维护性(由继承保证)2、提高了程序的扩展性(由多态保证)*/classAnimal{Stringname;intage;publicAnimal(){}publicAnimal(S......
  • kubernetes-存储卷与持久化详解
    目录背景volume介绍emptyDirHostPathNFSconfigMapSecretPersistentVolume介绍PV回收策略PV访问策略基于nfs或nas创建pv创建hostpath类型的pvPV的状态PersistentVolumeClaim创建pvc与pv进行绑定使用pvc动态存储storageclass创建目录nfs添加授权目录创建yaml背景容器部署过程中一......
  • VulnhubJANGOW靶机详解
    项目地址https://www.vulnhub.com/entry/jangow-101754/部分vmware有配置问题,需要修改网卡信息,重启dhcp服务1.在系统启动时(长按shift键)直到显示以下界面选择第二个,按回车继续选择第二个2.按e进入编辑,进入以下界面删除"recoverynomodeset"并在末尾添加"quiets......
  • linux运维一天一个shell命令之vim详解
    前言:在日常运维工作中,掌握好Vim的使用可以极大地提高工作的效率。Vim作为一个强大的文本编辑器,广泛应用于各种运维场景一、定义Vim是一个非常强大的文本编辑器,在Unix/Linux环境中非常流行。它具有许多高级功能和快捷键,适合编写代码、编辑配置文件等。1、特点:高级......
  • border-image实现与圆角渐变边框实例页面
    <h4>1.父元素圆角</h4><divclass="father"><divclass="border-gradient">圆角渐变边框</div></div><h4>2.clip-path剪裁</h4><divclass="border-gradientclip-path">圆角渐变边框</div&......
  • iOS订阅详解
    1.进入管理后台点击订阅、然后新建一个组2.然后往组里面添加数据、可以编辑组里面订阅服务的等级、1代表最高等级、拖动可以改变相应的等级、无法自己指定等级、系统会根据拖动自动生成等级升级用户切换为更高等级的订阅。用户需先支付更高等级的订阅费用,支付成功后,订......