tomcat高可用和nginx高可用
tomcat高可用和nginx高可用
小白教程,一看就会,一做就成。

1.什么是高可用?
高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果一个系统能够一直提供服务,那么这个可用性则是百分之百,但是天有不测风云。所以我们只能尽可能的去减少服务的故障。
2.解决的问题?
在生产环境上很多时候是以Nginx做反向代理对外提供服务,但是一天Nginx难免遇见故障,如:服务器宕机。当Nginx宕机那么所有对外提供的接口都将导致无法访问。
虽然我们无法保证服务器百分之百可用,但是也得想办法避免这种悲剧,今天我们使用keepalived来实现Nginx的高可用。
3.双机热备方案
这种方案是国内企业中最为普遍的一种高可用方案,双机热备其实就是指一台服务器在提供服务,另一台为某服务的备用状态,当一台服务器不可用另外一台就会顶替上去。
4.keepalived是什么?
Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP (Virtual Router Redundancy Protocol ,虚拟路由器冗余协议)功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:Nginx、Haproxy、MySQL等)的高可用解决方案软件
5.故障转移机制
Keepalived高可用服务之间的故障切换转移,是通过VRRP 来实现的。在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
6.部署环境
以下都是centos7.8的系统
143.1.26.211(Tomcat服务,3个Tomcat应用,7、8、9版本,大于等于10版本后,jdk就要用11的了,8的就不行了)
143.1.26.212(nginx)
143.1.26.213(nginx)
143.1.26.214(是keepalived的虚拟ip,不是真实的服务器)
7.达到什么目的
实现Tomcat服务的高可用(一个服务挂了,跳转到另外的服务,用的是nginx做的代理)与nginx的高可用(这个nginx挂了,自动转移到另外的nginx)
8.部署tomcat
8-1.下载Tomcat包
https://tomcat.apache.org/
我这里下载了7,8,9三个版本





8-2.部署Tomcat(需要先安装jdk,有写部署jdk的文章)
我是在服务器上创建了3个目录,存放3个Tomcat
/data/tomcat7,/data/tomcat8,/data/tomcat9
把对应版本的包放到对应目录里,然后解压(以7版本为例)
cd /data/tomcat7/
tar -zxvf apache-tomcat-7.0.90.tar.gz
修改端口文件(以7版本为例)
vim /data/tomcat7/apache-tomcat-7.0.90/conf/server.xml
修改地方如下(修改后的端口,7的是8001,8081,7001。8的是8002,8082,7002。9的是8003,8083,7003)



启动(以7版本为例)
bash /data/tomcat7/apache-tomcat-7.0.90/bin/startup.sh
关闭(以7版本为例)
bash /data/tomcat7/apache-tomcat-7.0.90/bin/shutdown.sh
查看端口
netstat -ptln

9.部署nginx(nginx-1.16.1为例)
9-1.下载nginx-1.16.1包并上传到服务器,需要包的滴滴我,可以私发
#先安装编译安装的环境与killall工具
yum -y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openssl-devel psmisc
#我创建了/data,放nginx包
mkdir /data
#解压包
tar -zxvf nginx-1.16.1.tar.gz
#配置环境
cd nginx-1.16.1/
./configure --prefix=/usr/local/nginx --with-http_realip_module --with-http_ssl_module
#编译安装
make && make install
#添加启动,关闭,重载nginx的脚本
vim /usr/lib/systemd/system/nginx.service
#内容如下:
[Unit]
Description=nginx
After=network.target[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true[Install]
WantedBy=multi-user.target
#到此结束:
#添加权限
chmod +x /usr/lib/systemd/system/nginx.service
systemctl start nginx.service #启动
systemctl stop nginx.service #关闭
systemctl restart nginx.service #重启(也可以当启动用)
systemctl reload nginx.service #重载配置
/usr/local/nginx/sbin/nginx -t #查看配置文件是否有吴
9-2.修改配置文件
vim /usr/local/nginx/conf/nginx.conf
#内容如下upstream tomcat{server 143.1.26.211:8081 weight=1;server 143.1.26.211:8082 weight=2;server 143.1.26.211:8083 weight=3;
}#weight代表对应的服务的权重,权重越高(值越大),服务被访问的优先级越高

proxy_pass http://tomcat;
#这里的tomcat,是上图upstream tomcat里的,什么都行,只要两处对应就好,下图的root html;和index index.html index.htm;是我注释掉了

9-3.启动
systemctl restart nginx.service
9-4.扩展小知识
如果应用不只是ip和端口,后面加上后缀才能访问到咱的项目,例如加了/defaultroot/login2.jsp
那upstream tomcat这里配置的还是不变的,proxy_pass 这里变了
proxy_pass http://tomcat/defaultroot/login2.jsp;

9-5.访问
http://nginx的ip #这里我没加端口,因为我的nginx端口是默认的80
9-6.另一台nginx服务器也是相同的安装部署与配置,这里忽略了
10.做nginx的高可用,(两台都安装keepalived,212是主,213是从)
10-1.安装keepalived并配置(keepalived的配置只有priority不一样)
yum -y install keepalived
10-2.添加检测脚本,(两台nginx都一样)
#创建一个文件夹
mkdir /usr/local/nginx/src
#添加nginx_check.sh脚本
vim /usr/local/nginx/src/nginx_check.sh
#!/bin/bash
#检测nginx是否启动了
Y=`ps -C nginx --no-header |wc -l`
if [ $Y -eq 0 ];then #如果nginx没有启动就启动nginx systemctl start nginx #重启nginxif [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移killall keepalived fi
fi#给脚本加权限
chmod +x /usr/local/nginx/src/nginx_check.sh

10-3.修改143.1.26.212的keepalived配置文件
#先备份配置文件
cd /etc/keepalived/
cp -a keepalived.conf keepalived.conf_bak
vim /etc/keepalived/keepalived.conf! Configuration File for keepalived#检测脚本
vrrp_script chk_http_port {script "/usr/local/nginx/src/nginx_check.sh" #心跳执行的脚本,检测nginx是否启动interval 2 #(检测脚本执行的间隔,单位是秒)weight 2 #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {state MASTER # 指定keepalived的角色,MASTER为主,BACKUP为备interface ens192 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ip add查看你具体的网卡virtual_router_id 77 # 虚拟路由编号,主从要一致priority 100 # 优先级,数值越大,获取处理请求的优先级越高advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)#授权访问authentication {auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信auth_pass yegoo@123}track_script {chk_http_port #(调用检测脚本)}virtual_ipaddress {143.1.26.214 # 定义虚拟ip(VIP),可多设,每行一个}
}
virtual_ipaddress 里面可以配置vip,在线上通过vip来访问服务。
interface需要根据服务器网卡进行设置通常查看方式ip add
authentication配置授权访问后备机也需要相同配置
10-4.修改143.1.26.213的keepalived配置文件
#先备份配置文件
cd /etc/keepalived/
cp -a keepalived.conf keepalived.conf_bak
vim /etc/keepalived/keepalived.conf! Configuration File for keepalived#检测脚本
vrrp_script chk_http_port {script "/usr/local/nginx/src/nginx_check.sh" #心跳执行的脚本,检测nginx是否启动interval 2 #(检测脚本执行的间隔)weight 2 #权重
}
#vrrp 实例定义部分
vrrp_instance VI_1 {state BACKUP # 指定keepalived的角色,MASTER为主,BACKUP为备interface ens192 # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ip add查看你具体的网卡virtual_router_id 77 # 虚拟路由编号,主从要一致priority 99 # 优先级,数值越大,获取处理请求的优先级越高advert_int 1 # 检查间隔,默认为1s(vrrp组播周期秒数)#授权访问authentication {auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信auth_pass yegoo@123}track_script {chk_http_port #(调用检测脚本)}virtual_ipaddress {143.1.26.214 # 定义虚拟ip(VIP),可多设,每行一个}
}
10-5.做了实验,把26.212整挂,vip会自动跳到26.213
11.完成

相关文章:
tomcat高可用和nginx高可用
tomcat高可用和nginx高可用 小白教程,一看就会,一做就成。 1.什么是高可用? 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务…...
关于ios Universal Links apple-app-site-association文件 Not Found的问题
1. 背景说明 1.1 Universal Links 是什么 Support Universal Links 里面有说到 Universal Links 是什么、注意点、以及如何配置的。简单来说就是 当您支持通用链接时,iOS 用户可以点击指向您网站的链接,并无缝重定向到您安装的应用程序 大白话就是说&am…...
Objectarx MFC 添加ListControl并控制显隐
最主要的是实现一个Button点击将下方的List显示出来,制作成抽屉式菜单工具。 这篇文章是想实现点击工具栏并控制List的显隐。 参照: MFC中实现一个控件的隐藏和显示 【MFC】判断控件是否为隐藏状态 MFC中查找构件使用ID进行控制,这个和WPF&a…...
2023年高教社杯数学建模思路 - 复盘:人力资源安排的最优化模型
文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 描述 …...
SpringMVC 第二天
第 1 章 ModelAttribute 和 SessionAttribute[ 应 用 ] 1.1ModelAttribute 1.1.1 使用说明 作用: 该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数。 出现在方法上,表示当前方法会在控制器的方法执行之前,先执行…...
抖音seo短视频矩阵系统源码开发源代码分享--开源-可二开
适用于抖音短视频seo矩阵系统,抖音矩阵系统源码,短视频seo矩阵系统源码,短视频矩阵源码开发,支持二次开发,开源定制,招商加盟SaaS研发等。 功能开发设计 1. AI视频批量剪辑(文字转语音&#x…...
No message found under code ‘-1‘ for locale ‘zh_CN‘.
导出中的报错:No message found under code -1 for locale zh_CN. 报错原因:页面中展示的数据和后端excel中的数据不一致导致 具体原因:...
QtWidgets和QtQuick融合(QML与C++融合)
先放一个界面效果吧! 说明:该演示程序为一个App管理程序,可以将多个App进行吸入管理。 (动画中的RedRect为一个带有QSplashScreen的独立应用程序) 左侧边栏用的是QQuickView进行.qml文件的加载(即QtQuick…...
基于Vue的3D饼图
先看效果: 再看代码: <template><div class"container"><div style"height: 100%;width: 100%;" id"bingtu3D"></div></div></template> <script> import "echarts-liqu…...
Gateway简述
前言 在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端调用多个微服务接口的地址。另外微服务架构的请求中,90%的都携带认证信息/用户登录信息,都需要做相关的限制管理,API网关由此应允而生。 这样的架构会存…...
Midjourney API 的对接和使用
“ 阅读本文大概需要 4 分钟。 ” 在人工智能绘图领域,想必大家听说过 Midjourney 的大名吧。 Midjourney 以其出色的绘图能力在业界独树一帜。无需过多复杂的操作,只要简单输入绘图指令,这个神奇的工具就能在瞬间为我们呈现出对应的图像。无…...
01 消息引擎系统
本文是Kafka 核心技术与实战学习笔记 kafka的作用 kafka最经常被提到的作用是是削峰填谷,即解决上下游TPS的错配以及瞬时峰值流量,如果没有消息引擎系统的保护,下游系统的崩溃可能会导致全链路的崩溃。还有一个好处是发送方和接收方的松耦合…...
npm 卸载 vuecli后还是存在
运行了npm uninstall vue-cli -g,之后是up to date in,然后vue -V,版本号一直都在,说明没有卸载掉 1、执行全局卸载命令 npm uninstall vue-cli -g 2、删除vue原始文件 查看文件位置,找到文件删掉 where vue 3、再…...
Unity 之利用 localEulerAngle与EulerAngle 控制物体旋转
文章目录 概念讲解localEulerAngle与EulerAngle的区别 概念讲解 欧拉角(Euler Angles)是一种常用于描述物体在三维空间中旋转的方法。它使用三个角度来表示旋转,分别绕物体的三个坐标轴(通常是X、Y和Z轴)进行旋转。这…...
从零学算法 (剑指 Offer 13)
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如&am…...
854之数据结构
一.线性表 1.顺序表 #include <iostream> #include<stdlib.h> using namespace std; #define max 100 typedef struct {int element[max];int last; } List; typedef int position ; void Insert(int x, position p, List &L) {position q;if (L.last > ma…...
Redis从基础到进阶篇(二)----内存模型与内存优化
目录 一、缓存通识 1.1 ⽆处不在的缓存 1.2 多级缓存 (重点) 二、Redis简介 2.1 什么是Redis 2.2 Redis的应用场景 三、Redis数据存储的细节 3.1 Redis数据类型 3.2 内存结构 3.3 内存分配器 3.4 redisObject 3.4.1 type 3.4.2 encoding 3…...
DBO优化SVM的电力负荷预测,附MATLAB代码
今天为大家带来一期基于DBO-SVM的电力负荷预测。 原理详解 文章对支持向量机(SVM)的两个参数进行优化,分别是:惩罚系数c和 gamma。 其中,惩罚系数c表示对误差的宽容度。c越高,说明越不能容忍出现误差,容易过拟合。c越小࿰…...
第一百二十五回 dart中List和Map的常见用法
文章目录 概念介绍使用方法初始化相互转换元素操作 经验分享 我们在上一章回中介绍了Flexible组件相关的内容,本章回中将介绍 dart中的List和Map.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里介绍的List也叫列表,它表示一组相…...
小白到运维工程师自学之路 第七十九集 (基于Jenkins自动打包并部署Tomcat环境)2
紧接上文 4、新建Maven项目 clean package -Dmaven.test.skiptrue 用于构建项目并跳过执行测试 拉到最后选择构建后操作 SSH server webExec command scp 192.168.77.18:/root/.jenkins/workspace/probe/psi-probe-web/target/probe.war /usr/local/tomcat/webapps/ /usr/loca…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
