基于 CentOS7 搭建 5 节点三层高可用 Web 集群(Nginx+Keepalived+Tomcat+MySQL 主从)
本文记录了本人从零规划、搭建一套 5 节点 CentOS7 高可用 Web 业务集群的完整实操全过程采用经典三层架构前端通过 NginxKeepalived 基于 VRRP 协议实现负载均衡与虚拟 IP 故障自动漂移消除网关单点故障中间层部署两台 Tomcat 服务器承载 Web 应用分担访问压力底层使用 MySQL 5.7 搭建一主一从二进制日志复制架构实现数据实时热备份。 整套环境依托 VMware 虚拟机模板批量克隆部署搭建过程中踩坑并解决了网段不匹配、端口不通、数据库同步异常、权限策略报错等大量运维常见问题同时完成主节点宕机故障模拟演练验证集群业务连续性。1.模板机初始化 5 台虚拟机批量克隆与网络规划用户访问VIP192.168.2.100 → Keepalived自动把流量切到主NginxNginx做负载均衡转发给Tomcat应用Tomcat读写MySQL主从数据库。虚拟机名称集群角色分配静态 IP预装软件centos-masterNginx 主节点192.168.2.10Nginx、Keepalivedcentos-backupNginx 备节点192.168.2.11Nginx、Keepalivedcentos-appTomcat 应用服务器192.168.2.12JDK1.8、Tomcat8centos-mysql1MySQL 主库192.168.2.14MySQL5.7centos-mysql2MySQL 从库192.168.2.15MySQL5.7统一对外 VIP192.168.2.100准备先对模板机进行初始化切换root模式全程用root操作关闭防火墙设置开机不自启systemctl stop firewild systemctl disable firewalld关闭SElinux永久关闭安装必备基础依赖包作用• net-tools提供ifconfig查看网卡IP• wget下载安装包• vim编辑器• openssl/pcre后面编译Nginx必备依赖执行备份原yum源的命令把系统默认文件做备份避免后续出现问题无法回滚下载阿里云Centos7源文件若提示wget找不到可用curl版本刷新yum缓存换源必做查看源文件是否替换成功安装epel扩展源后面装keepalivednginx需要用设置主机名模板机临时名字克隆后每台再单独改优化SSH连接可选系统时间同步集群时间须统一注模板机保持DHCP自动获取即可以上执行完成后关机halt克隆卡隆方式要选择 完整克隆依次克隆出五台机器并分别命名以第一台Nginx主节点master为例:修改主机名修改网卡配置为静态IP清空原有的内容只修改IPADDR对应的地址BOOTPROTOstaticONBOOTyesIPADDR192.168.2.10 # 每台替换成表格里的对应IPNETMASK255.255.255.0GATEWAY192.168.2.2DNS18.8.8.8DNS2114.114.114.114重启网卡服务生效验证本机IPifconfig连通性测试在任意一台机器ping其他所有ip能通代表网络环境已经搭建完成2.NginxKeepalived 主备负载均衡部署与漂移测试目的实现负载均衡故障自动切换VIP后端转发到Tomcat——两台机器都安装NginxKeepalived192.168.2.10192.168.2.11yum install -y nginx keepalived # 设置开机自启systemctl enable nginx keepalivedsystemctl start nginx——编辑配置文件两台配置一样vim /etc/nginx/nginx.conf删掉全部原有内容写入如下配置user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;events {worker_connections 1024;}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for;access_log /var/log/nginx/access.log main;sendfile on;keepalive_timeout 65;# 后端Tomcat服务器集群upstream tomcat_pool {server 192.168.2.12:8080;}server {listen 80;server_name _;location / {proxy_pass http://tomcat_pool;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}}检查配置nginx -tsystemctl restart nginx配置Keepalived虚拟IP漂移1.主节点master192.168.2.10vim /etc/keepalived/keepalived.conf完整配置global_defs {router_id NGINX_MASTER}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.2.100/24}}2.备节点backup192.168.2.11vim /etc/keepalived/keepalived.conf完整配置global_defs {router_id NGINX_BACKUP}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.2.100/24}}两台启动Keepalivedsystemctl start keepalived在主节点查看是否生成VIPip addr此时192.168.2.100在主节点上在主节点上执行systemctl stop keepalived然后去backup执行ip addr会发现VIP已经自动切换回来代表双击热备成功3.Tomcat 集群部署 Nginx 反向代理配置登录192.168.2.12 centos-app安装JDK8yum install -y java-1.8.0-openjdk-devel验证是否安装成功java -versionjavac -version下载并解压Tomcat8.5# 下载安装包wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.98/bin/apache-tomcat-8.5.98.tar.gz# 解压到 /usr/local 目录tar -zxvf apache-tomcat-8.5.98.tar.gz -C /usr/local/编写测试页面验证Nginx转发vim /usr/local/tomcat8/webapps/ROOT/index.jsp% page contentTypetext/html;charsetUTF-8 languagejava %htmlbodyh2Server Node: 192.168.2.12 Tomcat/h2pAccess VIP: 192.168.2.100/p/body/htmlEOF启动Tomcat/usr/local/tomcat8/bin/startup.sh避坑为避免系统里不存在这个文件夹路径等可先查找本机真正的网络根目录执行find / -name webapps正常会输出类似/usr/share/tomcat/webapps 这才是真实路径然后再用正确路径创建测试页面:cat /usr/share/tomcat/webapps/ROOT/index.jsp EOF% page contentTypetext/html;charsetUTF-8 languagejava %htmlbodyh2Server Node: 192.168.2.12 Tomcat/h2pAccess VIP: 192.168.2.100/p/body/html验证是否创建成功ls /usr/share/tomcat/webapps/ROOT/ 出现index.jsp即为成功放行端口并重启服务firewall-cmd --add-port8080/tcp --permanentfirewall-cmd --reload浏览器验证避坑1. 只去连VIP 192.168.2.100主备节点没启动KeepalivedVIP不存在必然失败2. 桥接没绑定正确物理网卡虚拟机拿到别的网段IP局域网不通3. 重启后防火墙自动开启之前临时关闭的设置失效高可用故障漂移测试1. 关闭当前承载VIP的主Nginx主机2. 持续刷新网页只会短暂卡顿一下页面立刻恢复访问3. 查看备用机VIP已经自动漂移过来实现故障自动切换4.MySQL 一主一从搭建主机centos-mysql1 192.168.2.14主库 Master从机centos-mysql2 192.168.2.15从库 Slave两台机器执行前置操作# 关闭防火墙systemctl stop firewalldsystemctl disable firewalldsetenforce 0两台机器安装MySQL5.7安装yum源rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm安装服务yum install -y mysql-community-serversystemctl start mysqldsystemctl enable mysqld获取初始临时密码grep temporary password /var/log/mysqld.log登录并修改密码mysql -uroot -pALTER USER rootlocalhost IDENTIFIED BY Root123456;exit;配置Master主库192.168.2.14编辑配置文件vi /etc/my.cnf写入[mysqld]server-id1log-binmysql-binbinlog-formatROWdatadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sock保存退出重启MySQLsystemctl restart mysqld登录MySQL创建账号mysql -uroot -pRoot123456执行CREATE USER repl% IDENTIFIED BY Repl123456;GRANT REPLICATION SLAVE ON *.* TO repl%;FLUSH PRIVILEGES;-- 锁定库防止配置期间数据变动FLUSH TABLES WITH READ LOCK;查看主库状态记录File和Position SHOW MASTER STATUS;配置Slave主库192.168.2.15编辑配置文件vi /etc/my.cnf写入[mysqld]server-id2log-binmysql-bindatadir/var/lib/mysqlsocket/var/lib/mysql/mysql.sock保存退出重启MySQLsystemctl restart mysqld登录MySQL绑定主库mysql -uroot -pRoot123456把下面对应参数换成刚才SHOW MASTER STATUS查询出来的值STOP SLAVE;CHANGE MASTER TOMASTER_HOST192.168.2.14,MASTER_USERrepl,MASTER_PASSWORDRepl123456,MASTER_LOG_FILEmysql-bin.000002,#填查到的file名称MASTER_LOG_POS747;#填查到的Position数字启动同步START SLAVE;检查同步状态SHOW SLAVE STATUS\G必须同时满足两个Yes才算成功• Slave_IO_Running: Yes• Slave_SQL_Running: Yes验证同步效果切回主库MySQL窗口解锁表UNLOCK TABLES;主库新建库插入测试数据CREATE DATABASE test_db;USE test_db;CREATE TABLE t(id INT);INSERT INTO t VALUES(100);若能从从库查询到这条数据代表主从搭建完成项目总结与后续规划本次搭建的三层高可用集群是传统企业机房非常经典的部署方案完美结合了 TCP/IP 网络原理、VRRP 冗余协议、Linux 系统运维、Web 服务与数据库冗余设计等理论知识。通过亲手完成环境规划、配置部署、错误排查、故障验证彻底理解了单点故障带来的业务风险以及负载均衡、主备切换、数据备份的设计意义。访问链路浏览器 → 192.168.2.100Nginx虚拟VIP→ 两台Nginx负载均衡 → Tomcat应用节点 → MySQL主库写入、从库同步备份。现阶段整套集群已经可以稳定运行为了进一步提升项目深度后续计划分步完成升级编写 Shell 批量运维脚本替代重复手动命令提升部署效率接入 PrometheusGrafana 监控体系实现服务器、服务、数据库状态实时监测与异常告警完成 MySQL 读写分离改造搭配 Redis 缓存优化数据库访问压力使用 Docker 完成服务容器化部署进一步可向 K8s 编排方向延伸将整套架构迁移至公有云服务器适配线上生产环境部署逻辑。本文仅作为个人原创项目实训笔记可供参考学习禁止商用二次转载。

相关新闻

DDR控制器寄存器配置实战:从时序计算到稳定性调优

DDR控制器寄存器配置实战:从时序计算到稳定性调优

1. 从寄存器表到实战:DDR控制器配置的深度拆解 干了这么多年嵌入式底层开发,调试内存控制器几乎是每个项目都绕不开的“硬骨头”。手册上那些密密麻麻的寄存器位域描述,看懂了是一回事,能根据手头的内存颗粒和系统需求&#xff0c…

2026/7/22 12:33:19 阅读更多 →
低代码平台在数据可视化场景的应用:AI辅助的图表推荐与配置生成

低代码平台在数据可视化场景的应用:AI辅助的图表推荐与配置生成

低代码平台在数据可视化场景的应用:AI辅助的图表推荐与配置生成 数据可视化的开发瓶颈不在图表库本身,而在于「选择什么图表」和「如何配置图表参数」。ECharts、AntV 等图表库提供了丰富的配置项,但开发者需要花费大量时间在文档和实践之间…

2026/7/22 12:32:19 阅读更多 →
移动端Hybrid应用的性能治理:WebView启动、离线包与JSBridge调优

移动端Hybrid应用的性能治理:WebView启动、离线包与JSBridge调优

移动端Hybrid应用的性能治理:WebView启动、离线包与JSBridge调优 Hybrid 应用在「跨平台效率」和「原生体验」之间长期存在张力。性能治理的核心不是消除 WebView 与 Native 的差距,而是在可接受成本内,将可感知的性能指标压到用户可忽略的水…

2026/7/22 12:32:19 阅读更多 →

最新新闻

嵌入式I2C总线DMA触发机制详解与寄存器配置实战

嵌入式I2C总线DMA触发机制详解与寄存器配置实战

1. I2C DMA触发机制深度解析 在嵌入式系统开发中,I2C总线因其简洁的两线制(SCL和SDA)和主从架构,被广泛应用于连接各类传感器、EEPROM和显示模块。然而,当需要处理大量数据时,传统的轮询或中断方式会大量占…

2026/7/24 8:17:44 阅读更多 →
Metasploit与Wireshark联动安装与实战:从环境搭建到流量分析

Metasploit与Wireshark联动安装与实战:从环境搭建到流量分析

1. 项目概述:为什么需要Metasploit与Wireshark这对“黄金搭档”? 如果你对网络安全、渗透测试或者仅仅是好奇网络流量背后的秘密感兴趣,那么Metasploit和Wireshark这两个名字你一定不陌生。它们就像是网络世界里的“矛”与“盾”,…

2026/7/24 8:17:44 阅读更多 →
YOLOv8目标检测中Focal EIoU损失函数的原理与实践

YOLOv8目标检测中Focal EIoU损失函数的原理与实践

1. 项目背景与核心价值 在目标检测领域,YOLOv8作为当前最先进的实时检测框架之一,其性能表现很大程度上依赖于损失函数的设计。传统IoU系列损失函数(如CIoU、DIoU)虽然已经取得不错效果,但在处理极端长宽比目标或密集小…

2026/7/24 8:17:44 阅读更多 →
大模型实战:六大高价值应用场景与落地指南

大模型实战:六大高价值应用场景与落地指南

1. 大模型实战的价值与挑战大模型技术正在深刻改变各行各业的工作方式。根据实际项目经验,合理应用大模型确实可以在特定场景下减少80%以上的重复性工作。但实现这一目标需要克服三个关键挑战:场景选择:不是所有工作都适合用大模型优化&#…

2026/7/24 8:17:44 阅读更多 →
海外华人网购痛点攻克:独立站跨境包裹合并转运系统实践分享

海外华人网购痛点攻克:独立站跨境包裹合并转运系统实践分享

随着反向海淘行业持续升温,海外华人、留学生、驻外工作人群已成为国内国货消费的核心主力群体。从中式零食、调味食材、国风文创,到适配国内标准的小家电、家居用品,海量高性价比国货通过反向海淘流向全球各地。但相较于成熟的正向跨境电商&a…

2026/7/24 8:17:44 阅读更多 →
深入解析UCD90320 PMBus制造商特定命令:故障管理与系统监控实战

深入解析UCD90320 PMBus制造商特定命令:故障管理与系统监控实战

1. 项目概述:深入UCD90320的PMBus“后花园” 在数字电源管理的世界里,PMBus协议就像一本通用词典,它定义了如何读取电压、电流、温度,以及如何开关电源轨。但当你面对像TI UCD90320这样功能强大的序列发生器与系统健康控制器时&am…

2026/7/24 8:16:44 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻