【Ubuntu 22.04】部署Nginx + Tomcat * 2 实现负载均衡、高可用
一、前置条件
-
已准备ubuntu22.04 LTS版本作为服务器001~002节点,并配置为本地域名
tomcat-001
,tomcat-002
,可使用SSH对其进行远程管理。
二、安装Nginx
-
sudo -i
切换到管理员模式 -
在两台Ubuntu上运行以下命令安装Nginx:
apt update apt install nginx
-
配置Nginx作为反向代理:
3.1
vi /etc/nginx/nginx.conf
打开配置文件,新增内容如下:
` ##
# Tomcat Settings
##
upstream tomcat_backend {
server 192.168.1.61:8080;
server 192.168.1.62:8080;
}server { listen 80; server_name tomcat-servers; location / { proxy_pass http://tomcat_backend; 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和高可用(使用Keepalived)
-
在两台Ubuntu上运行以下命令安装Keepalived:
apt install keepalived
-
配置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 # 定义要跟踪的脚本 } }
-
创建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配置
-
在 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
-
将下载的压缩文件解压缩到你希望安装 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/
-
修改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配置文件中的端口和域名匹配。==
-
配置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 # 添加开机自启
五:防火墙配置
-
使用ufw管理服务器,使用以下命令安装并激活ufw防火墙:
apt install ufw ufw enable # 激活ufw ufw status # 可以查看防火墙状态 # 放通所需端口 ufw allow ssh ufw allow 80 ufw allow 8080
ufw status
查看防火墙当前状态:
六:启动负载均衡和高可用
- 为两台服务器启动各服务
systemctl start nginx # 启动Nginx systemctl start keepalived # 启动keepalived # tomcat-001、tomcat-002启动tomcat systemctl start tomcat
七:验证服务是否正常
-
192.168.1.60:8080
使用window在外部访问Nginx: -
尝试禁用tomcat-002(tomcat-001开启,tomcat-002关闭)
2.1
ufw deny 8080
禁止外部访问8080端口2.2 再次验证外部是否能正常访问Nginx
2.3 可以发现,其中一台节点掉线了,仍然可以正常访问Nginx页面。
-
尝试禁用tomcat-001(tomcat-001、tomcat-002均关闭)
3.1
ufw deny 8080
禁止外部访问8080端口3.2 再次验证外部是否能正常访问Nginx
== 3.3 可以发现当两台tomcat都关闭后,Nginx页面将无法正常显示。 ==
-
尝试开启tomcat-002(tomcat-001关闭,tomcat-002开启)
4.1
ufw allow 8080
重新放通tomcat-002的8080端口4.2 再次尝试从外部访问Nginx页面
4.3 可以发现当其中一台tomcat节点被启动后,Nginx页面都可以正常显示。