Keepalived+Nginx+Tomcat 实现高可用Web集群的示例代码

Keepalived+Nginx+Tomcat 实现高可用Web集群的示例代码

简介

本文将介绍如何通过Keepalived+Nginx+Tomcat实现高可用Web集群,并提供示例代码。

准备工作

  • 3台服务器,主服务器A和两个备份服务器B和C,可任意选择物理机或虚拟机。
  • 安装CentOS 7.x操作系统。
  • 在每台服务器上安装Nginx和Tomcat,并且确保在Tomcat中正确部署Web应用程序。

Keepalived安装

在A、B和C三台服务器上均需安装Keepalived。以下是安装过程的简略步骤:

  1. 在每台服务器上安装必备软件包:

shell
yum install gcc kernel-devel kernel-headers make libnl-devel -y

  1. 下载并解压Keepalived软件包:

shell
wget http://www.keepalived.org/software/keepalived-2.0.19.tar.gz
tar zxvf keepalived-2.0.19.tar.gz
cd keepalived-2.0.19

  1. 编译和安装Keepalived:

shell
./configure --prefix=/usr/local/keepalived
make && make install

  1. 配置Keepalived:

在A、B和C三台服务器上都需要配置Keepalived,下面以服务器A为例:

  • 在A服务器上创建/etc/keepalived/keepalived.conf文件,写入以下内容:

    ```conf
    global_defs {
    router_id LVS_DEVEL
    }

    vrrp_script chk_nginx {
    script "/usr/bin/killall -0 nginx"
    interval 2
    weight 2
    }

    vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 200
    advert_int 1

     authentication {
         auth_type PASS
         auth_pass 1111
     }
    
     virtual_ipaddress {
         192.168.1.70
     }
    
     track_script {
         chk_nginx
     }
    

    }
    ```

    其中,vrrp_instance为Virtual Router Redundancy Protocol(虚拟路由器冗余协议)实例名称,virtual_router_id为虚拟路由器标识符,priority为本机优先级,virtual_ipaddress为虚拟IP地址,chk_nginx为检查nginx的脚本名称。

  • 启动Keepalived服务:

    shell
    /usr/local/keepalived/sbin/keepalived -f /etc/keepalived/keepalived.conf

  • 检查Keepalived的状态:

    shell
    ps -ef | grep keepalived

以上是服务器A的示例配置,服务器B和C的配置与A大致相同,只需修改vrrp_instance的state为BACKUP、priority为100即可。

Nginx配置

在每台服务器上均需安装Nginx并配置负载均衡。以下是配置过程的简略步骤:

  1. 安装Nginx:

shell
yum install nginx -y

  1. 修改Nginx配置文件/etc/nginx/nginx.conf,增加以下内容:
upstream tomcat {
    server 192.168.1.31:8080;  # 各个服务器IP地址以及Tomcat端口号
    server 192.168.1.32:8080;
    server 192.168.1.33:8080;
}

server {
    listen 80;

    location / {
        proxy_pass http://tomcat;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 记录客户端真实IP地址
        client_max_body_size 10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 90;
        proxy_send_timeout 90;
        proxy_read_timeout 90;
        proxy_buffers 32 4k;
    }
}
  1. 启动Nginx服务:
systemctl start nginx
  1. 检查Nginx的状态:
systemctl status nginx

Tomcat配置

在每台服务器上均需安装Tomcat并部署Web应用程序。以下是部署过程的简略步骤:

  1. 安装Tomcat:

shell
yum install tomcat -y

  1. 修改/etc/systemd/system/tomcat.service文件,指定Tomcat的路径和端口号:
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk/jre
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/usr/share/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'

ExecStart=/usr/share/tomcat/bin/startup.sh
ExecStop=/usr/share/tomcat/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target
  1. 启动Tomcat服务:

shell
systemctl start tomcat

示例1:

现在我们来模拟服务器A宕机的情况。在A服务器上停止Keepalived服务,此时B服务器将会接管A服务器的虚拟IP地址。

systemctl stop keepalived

接下来,我们在客户端发起请求,查看负载均衡是否正常:

curl http://192.168.1.70

若可以正常收到响应,则说明B或C服务器已经接管了A的虚拟IP地址,并且Tomcat应用也已经顺利转移。

示例2:

现在我们来尝试关闭Tomcat进程,观察负载均衡的表现。以服务器A为例,首先查找Tomcat进程的PID:

ps aux | grep tomcat

将返回如下结果:

tomcat     1734  1.2 24.9 3015168 254588 ?      Sl   08:20   0:55 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.302.b08-1.el7_9.x86_64/jre/bin/java -Djava.util.logging.config.file=/opt/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -classpath /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/opt/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.io.tmpdir=/opt/tomcat/temp org.apache.catalina.startup.Bootstrap start
root       1305  0.0  0.0 112680   972 pts/0    S+   08:36   0:00 grep --color=auto tomcat

将Tomcat的进程ID(PID)记下来,并且杀掉该进程:

kill -9 1734

一段时间后,Tomcat进程会自动重新启动,接下来在客户端发起请求,查看负载均衡是否正常:

curl http://192.168.1.70

若可以正常收到响应,则说明Tomcat进程刚才已经自动重启,Web集群仍然正常工作。

结论

通过以上步骤,我们已经成功地使用Keepalived+Nginx+Tomcat实现了高可用Web集群。这种架构能够保证在出现硬件故障或软件故障时,仍可以实现高可用性,保证了Web应用的稳定性和可靠性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Keepalived+Nginx+Tomcat 实现高可用Web集群的示例代码 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Centos7 安装部署Kubernetes(k8s)集群实现过程

    Centos7 安装部署Kubernetes(k8s)集群实现过程 Kubernetes(k8s) 是一个强大的容器编排工具,可以用于构建和管理现代化的云原生应用。 在本篇文章中,我们将讲述如何在Centos7上部署Kubernetes(k8s)集群的实现过程。 环境准备 在部署Kubernetes(k8s)集群之前,需要进行以下准备工作: 在所有节点上安装…

    人工智能概览 2023年5月25日
    00
  • 深入理解Java事务的原理与应用

    关于深入理解Java事务的原理与应用的攻略,我将从以下几个方面进行阐述: 1. 什么是事务? 事务是数据库管理中的概念,用于表示一系列的数据库操作,这些操作被视为整体,或者是原子操作。事务必须是满足ACID(原子性、一致性、隔离性以及持久性)的。 2. 事务的隔离级别 数据库中的事务隔离级别是指多个并发的事务之间的隔离程度,包括以下隔离级别: READ UN…

    人工智能概览 2023年5月25日
    00
  • Python中if语句的使用方法及实例代码

    针对“Python中if语句的使用方法及实例代码”的完整攻略,我将按照以下几个方面进行讲解: if语句的概述:if语句是Python中最基本的流程控制语句,用于根据条件的真假执行不同的代码段。 if语句的语法:Python中if语句的语法格式如下: if 条件语句: 执行语句1 else: 执行语句2 其中,条件语句可以使用关系运算符、逻辑运算符或位运算符等…

    人工智能概论 2023年5月24日
    00
  • SpringBoot 3.0 新特性内置声明式HTTP客户端实例详解

    SpringBoot 3.0 新特性内置声明式HTTP客户端实例详解 在 Spring Boot 3.0 中,新增了一个内置的声明式 HTTP 客户端模块,使得在 Spring Boot 项目中进行 HTTP 请求变得更加简单和方便。 什么是声明式HTTP客户端 声明式 HTTP 客户端是一种基于接口编程的 HTTP 客户端,通过定义接口来实现对 HTTP …

    人工智能概览 2023年5月25日
    00
  • 详解Redis Stream做消息队列

    详解Redis Stream做消息队列的完整攻略 Redis Stream 是 Redis 5 版本新增的数据类型,它具有一定的消息队列功能,能够很好地满足一些实时数据流的需求。 本文将为大家介绍 Redis Stream 进行消息队列的实现方法。 一、Redis Stream 概述 Redis Stream 是 Redis 5 版本以上新增的数据类型,它是…

    人工智能概览 2023年5月25日
    00
  • Nginx日志按日期切割详解(按天切割)

    这里是对“Nginx日志按日期切割详解(按天切割)”的完整攻略。 1. 为什么需要按日期切割日志 在网站运行中,生成的日志越来越多,过多的日志文件会占用大量的硬盘空间,同时对服务器的性能也会产生影响。因此需要对日志进行切割,以减小对磁盘空间的占用,同时提高日志的查询效率。而按日期切割日志,可以让我们更好地按时间段查找、归档和处理。 2. 日志切割的方式 我们…

    人工智能概览 2023年5月25日
    00
  • 易语言的找字、找图实例

    我很乐意为您讲解易语言的找字、找图实例攻略。 找字与找图是游戏外挂、自动化操作中常用的技术,其原理都是通过对屏幕进行截图,并在截图中寻找某个指定区域的像素点,来实现自动化操作。易语言是一种编程语言,通过编写易语言程序,我们可以实现找字、找图的自动化操作。下面我将为您详细讲解易语言的找字、找图实例的完整攻略。 一、找字实例 找字前的准备工作 在进行找字操作之前…

    人工智能概论 2023年5月25日
    00
  • Windows安装nginx1.10.1反向代理访问IIS网站

    下面是“Windows安装nginx1.10.1反向代理访问IIS网站”的完整攻略及示例说明: 安装nginx1.10.1 从nginx官方网站(http://nginx.org/en/download.html)下载Windows版本的nginx1.10.1; 解压下载的文件到任意一个路径,例如C:\nginx; 进入解压后的目录,双击运行nginx.ex…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部