【Ubuntu 22.04】部署Nginx + Tomcat * 2 实现负载均衡、高可用

发布时间 2023-06-25 17:01:40作者: 狗子未遂胆儿肥。

一、前置条件

  1. 已准备ubuntu22.04 LTS版本作为服务器001~002节点,并配置为本地域名tomcat-001,tomcat-002,可使用SSH对其进行远程管理。

    image

二、安装Nginx

  1. sudo -i 切换到管理员模式

  2. 在两台Ubuntu上运行以下命令安装Nginx:

    apt update
    apt install nginx
    
  3. 配置Nginx作为反向代理:

    3.1 vi /etc/nginx/nginx.conf打开配置文件,新增内容如下:

三、配置虚拟IP和高可用(使用Keepalived)

  1. 在两台Ubuntu上运行以下命令安装Keepalived:

    apt install keepalived
    
  2. 配置Keepalived

    2.1 vi /etc/keepalived/keepalived.conf打开配置文件,新增如下内容:

    # 定义一个检查Nginx是否运行的脚本
    vrrp_script check_nginx {
        script "/etc/keepalived/check_nginx.sh"
        interval 2
        weight -5
    }
    
    # 定义虚拟IP的配置
    vrrp_instance VI_1 {
        state MASTER # MASTER:主服务器 BACKUP:备服务器,这里tomcat-001 为主服务器,tomcat-002 为备服务器
        interface ens33 # 网络接口,ens33是本机网卡名称
        virtual_router_id 51  # 虚拟路由器ID
        priority 100  # 服务器的优先级,较高的值表示较高的优先级 tomcat-001:100 tomcat-002:90
        advert_int 1 # 指定发送VRRP通告的间隔,单位是秒
        authentication {
           # 设置认证类型和密码
            auth_type PASS
            auth_pass 123456
        }
        virtual_ipaddress {
            192.168.1.60 # 指定了虚拟IP地址,就是后续通过这个IP访问Nginx的内容
        }
        track_script {
            check_nginx # 定义要跟踪的脚本
        }
    }
    
  3. 创建Nginx健康检查脚本:

    3.1 vi /etc/keepalived/check_nginx.sh创建一个文件,并添加以下内容:

    #!/bin/bash
    
    NGINX_PROCESS=$(ps aux | grep nginx | grep -v grep | wc -l)
    
    if [ $NGINX_PROCESS -eq 0 ]; then
        exit 1
    else
        exit 0
    fi
    

    3.2 授权脚本执行权限:

    sudo chmod +x /etc/keepalived/check_nginx.sh
    

四、Tomcat配置

  1. 在 Tomcat 官方网站(https://tomcat.apache.org/)上下载适用于 Linux 的二进制发行版(tar.gz 格式)。

    # 我选择了tomcat-9.0.76,使用wget下载到linux
    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.76/bin/apache-tomcat-9.0.76.tar.gz
    
  2. 将下载的压缩文件解压缩到你希望安装 Tomcat 的目录。可以使用以下命令解压缩和移动:

    tar -xf apache-tomcat-9.0.76.tar.gz
    # 把目录移动到/opt下
    # tomcat-001节点
    mv apache-tomcat-9.0.76/* /opt/tomcat-001/
    # tomcat-002节点
    mv apache-tomcat-9.0.76/* /opt/tomcat-002/
    
  3. 修改Tomcat配置:

    3.1 修改端口和添加proxyPort、porxyName属性如下:

      <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443"
                   maxParameterCount="1000"
                   proxyPort="80"
                   proxyName="tomcat-servers"
                   />
    
     ==注意:这里的port、proxyPort 和 proxyName 参数应与Nginx配置文件中的端口和域名匹配。==
    
  4. 配置Tomcat开机自动启动

    4.1 创建一个新的 tomcat.service 文件,用于定义 Tomcat 的系统服务。运行以下命令:

    vi /etc/systemd/system/tomcat.service
    

    4.2 在打开的文件中,添加以下内容:

    [Unit]
    Description=Tomcat 9
    After=network.target
    
    [Service]
    Type=forking
    User=root
    Group=root
    Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
    Environment=CATALINA_HOME=/opt/tomcat
    Environment=CATALINA_BASE=/opt/tomcat
    ExecStart=/opt/tomcat/bin/startup.sh
    ExecStop=/opt/tomcat/bin/shutdown.sh
    SuccessExitStatus=143
    RestartSec=5
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    4.3 启用和启动Tomcat服务

    systemctl enable tomcat # 添加开机自启
    

五:防火墙配置

  1. 使用ufw管理服务器,使用以下命令安装并激活ufw防火墙:

    apt install ufw
    ufw enable # 激活ufw
    ufw status # 可以查看防火墙状态
    
    # 放通所需端口
    ufw allow ssh 
    ufw allow 80
    ufw allow 8080
    

    ufw status查看防火墙当前状态:

    image

六:启动负载均衡和高可用

  1. 为两台服务器启动各服务
    systemctl start nginx # 启动Nginx
    systemctl start keepalived # 启动keepalived
    # tomcat-001、tomcat-002启动tomcat
    systemctl start tomcat
    

七:验证服务是否正常

  1. 192.168.1.60:8080使用window在外部访问Nginx:

    image

  2. 尝试禁用tomcat-002(tomcat-001开启,tomcat-002关闭)

    2.1 ufw deny 8080禁止外部访问8080端口

    image

    2.2 再次验证外部是否能正常访问Nginx

    image

    2.3 可以发现,其中一台节点掉线了,仍然可以正常访问Nginx页面。

  3. 尝试禁用tomcat-001(tomcat-001、tomcat-002均关闭)

    3.1 ufw deny 8080禁止外部访问8080端口

    image

    3.2 再次验证外部是否能正常访问Nginx

    image

== 3.3 可以发现当两台tomcat都关闭后,Nginx页面将无法正常显示。 ==

  1. 尝试开启tomcat-002(tomcat-001关闭,tomcat-002开启)

    4.1 ufw allow 8080重新放通tomcat-002的8080端口

    image

    4.2 再次尝试从外部访问Nginx页面

    image

    4.3 可以发现当其中一台tomcat节点被启动后,Nginx页面都可以正常显示。