【实战】Nginx+Keepalived高可用部署,后端Tomcat

目录

一、下载Tomcat安装包

二、安装Tomcat

三、 运行测试Tomcat是否安装成功

四、开放8080端口

五、Tomcat服务脚本

一、环境说明:

三、安装Keepalived

3.1、主机安装配置


实战目的是为了Nginx和后端的Tomcat都可以实现高可用,防止单节点故障的情况发生。

首先我们先部署后端Tomcat服务

1 . TOMCAT

文章链接

Linux下安装Tomcat_apache-tomcat-9.0.64.tar.gz-CSDN博客文章浏览阅读2.7k次,点赞8次,收藏41次。Tomcat官网如下,我们以下载安装9.0.64版本的Tomcat为例。Apache Tomcat® - Apache Tomcat 9 Software Downloads安装Tomcat前要确保Linux已安装了JDK,Linux下安装JDK可以参考之前的文章,连接如下Linux下安装JDK8_luffylv的博客-CSDN博客_linux安装openjdk8在/opt目录下执行如下命令,即可将Tomcat安装包下载到/opt目录下。 将Tomcat安装在/opt/tomcat目录下,执行以下两个_apache-tomcat-9.0.64.tar.gzhttps://blog.csdn.net/m0_47503416/article/details/125225754?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171748631616800184140390%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=171748631616800184140390&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-125225754-null-null.142

重点!:安装Tomcat前要确保Linux已安装了JDK,Linux下安装JDK可以参考之前的文章,连接如下

Linux下安装JDK8_linux 8 openjdk-CSDN博客

一、下载Tomcat安装包

在/opt目录下执行如下命令,即可将Tomcat安装包下载到/opt目录下。

wget --no-check-certificate  https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.64/bin/apache-tomcat-9.0.64.tar.gz

二、安装Tomcat

将Tomcat安装在/opt/tomcat目录下,执行以下两个命令:

mkdir tomcat

tar -zxvf apache-tomcat-9.0.64.tar.gz  -C /opt/tomcat/

三、 运行测试Tomcat是否安装成功

进入到tomcat的bin目录下可以看到,其中startup.sh是Linux下启动Tomcat的脚本文件,shutdown.sh是Linux下关闭的脚本文件

./startup.sh #开启

./shutdown.sh #关闭

通过ps -ef | grep tomcat可以看到Tomcat进程信息。

四、开放8080端口

Tomcat默认是8080端口,我们可以通过在浏览器中输入Tomcat服务器ip地址:8080访问Tomcat界面。

可以通过 ifconfig查看当前服务器的ip地址。

如果无法访问需要开通8080端口

通过如下命令查看该Tomcat服务器8080端口是否开放。

netstat -anlp | grep 8080

然后,我们再查通过以下看下该服务器防火墙状态。

systemctl status firewalld

通过上图可以看到当前防火墙是开启的。

我们再通过以下命令查看8080端口防火墙状态。

firewall-cmd --zone=public --query-port=8080/tcp

也可以通过systemctl stop firewalld命令禁用防火墙,或者通过以下命令开放防火墙的8080端口。

# 开放防火墙8080端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent

# 重新加载防火墙

firewall-cmd --reload

# 查询防火墙8080端口状态

firewall-cmd --zone=public --query-port=8080/tcp

五、Tomcat服务脚本

每次启动关闭Tomcat都要进入到或执行命令到bin目录然后执行启动关闭脚本,十分的麻烦。我们可以通过编写Tomcat服务脚本,可以在任何路径下通过命令service tomcat start启动tomcat、service tomcat stop关闭Tomcat、service tomcat restart重启Tomcat。具体步骤如下:

1、执行vim /etc/init.d/tomcat,并将以下内容添加进脚本文件中,保存退出。

#!/bin/sh

# Tomcat service script for Linux.

export JAVA_HOME=/opt/java/jdk1.8.0_121

export CATALINA_HOME=/opt/tomcat/apache-tomcat-9.0.64

case "$1" in

    start)

        echo "Starting Tomcat server..."

        $CATALINA_HOME/bin/startup.sh

        ;;

    stop)

        echo "Stopping Tomcat server..."

        $CATALINA_HOME/bin/shutdown.sh

        ;;

    restart)

        echo "Restarting Tomcat server..."

        $CATALINA_HOME/bin/shutdown.sh

        sleep 1

        $CATALINA_HOME/bin/startup.sh

        ;;

    *)

        echo "Please use start or stop or restart as first argument"

        ;;

esac

2、修改脚本权限

执行如下命令,修改脚本文件权限

chmod 755 tomcat

完成上面两步后,执行tomcat服务启动命令和tomcat服务停止命令,我们可以看到即使不是在/bin目录下,或者使用startup.sh、shutdown.sh绝对路径,我们依然可以成功启动或停止Tomcat。

2. NGINX

安装nginx环境包

yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

方案一:Nginx的源码简单安装

(1)、进入官网查找需要下载版本的链接地址,然后使用wget命令进行下载

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

(2)、建议大家将下载的资源进行包管理

mkdir -p nginx/core

mv nginx-1.16.1.tar.gz nginx/core

(3)、解压缩

tar -xzf nginx-1.16.1.tar.gz

(4)、进入资源文件中,发现configure

./configure --prefix=/usr/local/nginx \

--sbin-path=/usr/local/nginx/sbin/nginx \

--modules-path=/usr/local/nginx/modules \

--conf-path=/usr/local/nginx/conf/nginx.conf \

--error-log-path=/usr/local/nginx/logs/error.log \

--http-log-path=/usr/local/nginx/logs/access.log \

--pid-path=/usr/local/nginx/logs/nginx.pid \

--lock-path=/usr/local/nginx/logs/nginx.lock

(5)、编译

make

(6)、安装

make install

(7)、运行

cd /usr/local/nginx/sbin

./nginx

(8)、在网页上访问服务器地址,看到Welcome to nginx 则成功啦

配置nginx.conf

    upstream xty.com {

        server 192.169.22.50:8080; # 本地tomcat服务器

        #server 192.169.22.52:8080; # 备用tomcat服务器

    }

配置conf.d 里的项目

server {

    listen       80;

    server_name  xty.com;

    #access_log  /var/log/nginx/host.access.log  main;

        location / {

            proxy_pass http://xty.com;

            proxy_set_header Host $host;

            proxy_set_header X-Real-IP $remote_addr;

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        }

Keepalived

一、环境说明:

操作系统:centos7

主机(master):192.169.22.50

备机(backup):192.169.22.52

VIP:192.169.22.62

2.1、主机配置VIP

2.1.1 复制当前网卡的网址配置文件,名称后增加“:1”;然后编辑该文件,修改name、device和ipaddr三个数据项,如下图所示。

cd /etc/sysconfig/network-scripts/

cp ifcfg-ens33 ifcfg-ens33:1

vi ifcfg-ens33:1

2.1.2 查看效果命令

ip addr

按此流程在备机上添加一次。

三、安装Keepalived

3.1、主机安装配置

3.1.1 安装及编辑配置文件

yum install -y keepalived

vi keepalived.conf

修改主机参数

#检测脚本

vrrp_script chk_http_port {

    script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动

    interval 2                          #(检测脚本执行的间隔,单位是秒)

    weight 2                            #权重

}

#vrrp 实例定义部分

vrrp_instance VI_1 {

    state MASTER            # 指定keepalived的角色,MASTER为主,BACKUP为备

    interface ens33         # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡

    virtual_router_id 66    # 虚拟路由编号,主从要一直

    priority 100            # 优先级,数值越大,获取处理请求的优先级越高

    advert_int 1            # 检查间隔,默认为1s(vrrp组播周期秒数)

    #授权访问

    authentication {

        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信

        auth_pass 1111

    }

    track_script {

        chk_http_port            #(调用检测脚本)

    }

    virtual_ipaddress {

        192.168.16.130            # 定义虚拟ip(VIP),可多设,每行一个

    }

}

修改备机参数

#检测脚本

vrrp_script chk_http_port {

    script "/usr/local/src/check_nginx_pid.sh" #心跳执行的脚本,检测nginx是否启动

    interval 2                          #(检测脚本执行的间隔)

    weight 2                            #权重

}

#vrrp 实例定义部分

vrrp_instance VI_1 {

    state BACKUP                        # 指定keepalived的角色,MASTER为主,BACKUP为备

    interface ens33                      # 当前进行vrrp通讯的网络接口卡(当前centos的网卡) 用ifconfig查看你具体的网卡

    virtual_router_id 66                # 虚拟路由编号,主从要一直

    priority 99                         # 优先级,数值越大,获取处理请求的优先级越高

    advert_int 1                        # 检查间隔,默认为1s(vrrp组播周期秒数)

    #授权访问

    authentication {

        auth_type PASS #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信

        auth_pass 1111

    }

    track_script {

        chk_http_port                   #(调用检测脚本)

    }

    virtual_ipaddress {

        192.168.16.130                   # 定义虚拟ip(VIP),可多设,每行一个

    }

}

添加主备机脚本

#!/bin/bash

#检测nginx是否启动了

A=`ps -C nginx --no-header |wc -l`        

if [ $A -eq 0 ];then    #如果nginx没有启动就启动nginx                        

      systemctl start nginx                #重启nginx

      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移

              killall keepalived                    

      fi

fi

脚本授权

chmod 775 check_nginx_pid.sh

模拟nginx故障:

修改两个服务器默认访问的Nginx的html页面作为区别。

首先访问192.168.16.130,通过vip进行访问,页面显示192.168.16.128;说明当前是主服务器提供的服务。

这个时候192.168.16.128主服务器执行命令:

systemctl stop nginx; #停止nginx

再次访问vip(192.168.16.130)发现这个时候页面显示的还是:192.168.16.128,这是脚本里面自动重启。

设置自启动

systemctl enable keepalived

systemctl enable nginx

以上我们就实现了Tomcat服务或者Nginx服务如果单节点出现异常,不影响业务正常使用。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AWS-S3实现Minio分片上传、断点续传、秒传、分片下载、暂停下载

文章目录 前言一、功能展示上传功能点下载功能点效果展示 二、思路流程上传流程下载流程 三、代码示例四、疑问 前言 Amazon Simple Storage Service(S3),简单存储服务,是一个公开的云存储服务。Web应用程序开发人员可以使用它存…

方便好用的C#.Net万能工具库Masuit.Tools

文章目录 简介开发环境安装使用特色功能示例代码1. 检验字符串是否是Email、手机号、URL、IP地址、身份证号等2.硬件监测(需要管理员权限,仅支持Windows,部分函数仅支持物理机模式)3.html的防XSS处理:4.整理Windows系统的内存:5.任…

IAR全面支持芯驰科技E3系列车规MCU产品E3119/E3118

中国上海,2024年7月11日 — 全球领先的嵌入式系统开发软件解决方案供应商IAR与全场景智能车芯引领者芯驰科技宣布进一步扩大合作,最新版IAR Embedded Workbench for Arm已全面支持芯驰科技的E3119/E3118车规级MCU产品。IAR与芯驰科技有着悠久的合作历史&…

docker私有仓库harbor安装

Harbor默认安装 下载harbor https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz 目前要求docker版本,docker 20.10.10-ce ,和docker-compose 1.18.0 查看 docker-compose版本 docker-compose --ver…

【精品资料】模块化数据中心解决方案(33页PPT)

引言:模块化数据中心解决方案是一种创新的数据中心设计和部署策略,旨在提高数据中心的灵活性、可扩展性和效率。这种方案通过将数据中心的基础设施、计算、存储和网络资源封装到标准化的模块中,实现了快速部署、易于管理和高效运维的目标 方案…

Jetpack Compose学习记录(一)

目录 前言控件实时预览Modifierremember状态提升 前言 学了一段时间的Compose,不得不说声明式UI比原生的开发效率快很多,而且Compose也是Google现在主推的开发模式,可以动态化地更改ui,相比于databinding对数据和布局进行绑定。C…

51单片机4(reg52头文件介绍)

一、头文件作用 #include<reg52.h> #include"reg52.h" 1、在代码中&#xff0c;引用头文件&#xff0c;它的实际意义就是将这个头文件里面的全部内容放到引用的这个文件的位置上&#xff0c;免去我们每次编译&#xff0c;编写同类程序都要将头文件中的语句&…

部署运维之二:虚拟化

摘要&#xff1a; 在21世纪初的曙光中&#xff0c;虚拟化技术悄然萌芽&#xff0c;标志着计算领域的一次革命性飞跃。这一时期&#xff0c;通过引入虚拟化技术&#xff0c;业界实现了在单一物理服务器之上并行运行多个虚拟机的壮举&#xff0c;每个虚拟机均构筑起一个隔离而独…

JVM:SpringBoot TomcatEmbeddedWebappClassLoader

文章目录 一、介绍二、SpringBoot中TomcatEmbeddedWebappClassLoader与LaunchedURLClassLoader的关系 一、介绍 TomcatEmbeddedWebappClassLoader 是 Spring Boot 在其内嵌 Tomcat 容器中使用的一个类加载器&#xff08;ClassLoader&#xff09;。在 Spring Boot 应用中&#…

Vue中插槽的使用

插槽是什么&#xff1f; 插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot></slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&#xff0c;填充的内容会替换子组件的<slot></slot>标…

AG32 的MCU与FPGA的主频可以达到568MHz吗

Customers: AG32/ AGRV2K 这个芯片主频和定时器最高速度是多少&#xff1f;用户期望 CPLD计时器功能0.1ns以下。 AGM RE: CPLD做不到 0.1ns的速率&#xff0c;这个需要10G以上的时钟。 那AGRV2K最高多少MHz呢&#xff1f; 一般200MHZ比较容易实现。 进一步说明&#xff1…

具有 0.5V 超低输入电压的 3A 升压转换器TPS61021

1 特性 输入电压范围&#xff1a;0.5V 至 4.4V 启动时的最小输入电压为 0.9V 可设置的输出电压范围&#xff1a;1.8V 到 4.0V 效率高达 91%&#xff08;VIN 2.4V、VOUT 3.3V 且 IOUT 1.5A 时&#xff09; 2.0MHz 开关频率 IOUT > 1.5A&#xff0c;VOUT 3.3V&#xff08;V…

记录一次微信小程序申诉定位权限过程

1 小程序接到通知&#xff0c;检测到违规&#xff0c;需要及时处理&#xff0c;给一周的缓冲时间&#xff0c;如果到期未处理&#xff0c;会封禁能力&#xff08;2023-11-17&#xff09; 2 到期后&#xff0c;仍未处理&#xff0c;封禁能力&#xff08;2023-11-24&#xff09; …

密钥管理的流程有哪些

密钥管理是指对密钥进行生成、分发、验证、更新、存储、备份、设置有效期以及销毁等一系列操作的行为&#xff0c;它是保障数据安全的重要机制。以下是对密钥管理的详细解析&#xff1a; 一、密钥管理的概念 密钥&#xff0c;即密匙&#xff0c;是各种加密技术的核心组成部分&a…

FPGA入门-自用

写代码&#xff0c;并将引脚对应到板子相应的引脚上 下载程序到板子上 遇到错误了&#xff0c;不按想的来的了&#xff0c;进行仿真 查看网表图查看问题所在 简化了一些步骤&#xff1a;未使用引脚的设置&#xff0c;电压设置&#xff1b; 通过画网表结构图来构成电路 时钟 …

RocketMQ源码学习笔记:Producer发送消息流程

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、Overview2、验证消息3、查找路由4、选择消息发送队列4.1、选择队列的策略4.2、源码阅读4.2.1、轮询规避4.2.2、故障延迟规避4.2.2.1、计算规避时间4.2.2.2、选择队列 4.2.3、ThreadLocal的…

土壤分析仪:解密土壤之奥秘的科技先锋

在农业生产和生态保护的道路上&#xff0c;土壤的质量与状况一直是我们关注的焦点。土壤分析仪&#xff0c;作为现代科技在农业和环保领域的杰出代表&#xff0c;以其高效、精准的分析能力&#xff0c;为我们揭示了土壤的奥秘&#xff0c;为农业生产提供了科学指导&#xff0c;…

一个spring boot项目的启动过程分析

1、web.xml 定义入口类 <context-param><param-name>contextConfigLocation</param-name><param-value>com.baosight.ApplicationBoot</param-value> </context-param> 2、主入口类: ApplicationBoot,SpringBoot项目的mian函数 SpringBo…

阿里云搭建vps服务器的过程

最近突发奇想想要搭建一个阿里云的的vps服务器&#xff0c;下面是搭建的过程&#xff1a; 首先&#xff0c;登录阿里云网站&#xff1a; 搜索&#xff0c;esc控制台&#xff1a; 点击创建实例&#xff1a; 选择地区&#xff1a; 选择实例规格&#xff1a; 选择镜像&#x…

adminPage-vue3依赖FormPage说明文档,表单页快速开发,使用思路及范例(Ⅱ)formConfig基础配置项

adminPage-vue3依赖FormPage说明文档&#xff0c;表单页快速开发&#xff0c;使用思路及范例&#xff08;Ⅱ&#xff09;formConfig配置项 属性: formConfig&#xff08;表单项设置&#xff09;keylabelnoLabeldefaultValuebindchildSlottypeString类型数据&#xff08;除 time…