基于 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/10/19 10:26:55 阅读更多 →
低代码平台在数据可视化场景的应用:AI辅助的图表推荐与配置生成

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

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

2026/10/20 7:26:14 阅读更多 →
移动端Hybrid应用的性能治理:WebView启动、离线包与JSBridge调优

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

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

2026/10/18 12:29:58 阅读更多 →

最新新闻

Delphi System.JSON 封装实践:从链式读写到RTTI映射的工程化设计

Delphi System.JSON 封装实践:从链式读写到RTTI映射的工程化设计

1. 为什么要在 System.JSON 外面再做一层封装1.1 原生 API 用起来最别扭的三个地方先说说我的真实感受。我在一个跨平台工具项目里频繁处理接口数据,第一版直接拿System.JSON裸写,写着写着就发现效率极低。原生库的功能其实都在:TJSONObject、…

2026/10/20 10:08:50 阅读更多 →
openTCS源码解析:构建、调度内核与AGV通信适配器

openTCS源码解析:构建、调度内核与AGV通信适配器

简介:openTCS 是一套开源的运输控制系统,用于控制自动导引车等物料搬运设备,这份压缩包面向希望深入学习其源码、进行二次开发的工程师与研究者,内含 openTCS 4.16.1 版本的原始码、示例原始码、官方文档及个人学习笔记。资源包采…

2026/10/20 10:08:50 阅读更多 →
CMake大型工程组织:多模块目录分层与依赖管理实战

CMake大型工程组织:多模块目录分层与依赖管理实战

简介:这份资源面向具备一定C基础、希望掌握大型工程构建管理的开发者,围绕CMakeLists.txt这一核心工具,讲解如何用统一方式组织多目录、多模块的项目结构。内容涵盖项目初始化、子目录管理、目标属性设置、外部依赖查找、CTest测试集成、安装…

2026/10/20 10:08:50 阅读更多 →
Delphi JSON封装:告别System.JSON繁琐API,打造优雅对象映射库

Delphi JSON封装:告别System.JSON繁琐API,打造优雅对象映射库

作为一个常年用 Delphi 写业务系统的老手&#xff0c;我太清楚原生System.JSON用起来有多别扭了。明明只是一个简单的“取字段值”操作&#xff0c;却要写出一长串FindValue、GetValue<string>&#xff0c;还得小心翼翼处理可能存在的Access Violation——JSON 里少个字段…

2026/10/20 10:08:50 阅读更多 →
国产ZXDoc源码包替代商业SDK:基于OXML规范的文档解析与渐进式替换指南

国产ZXDoc源码包替代商业SDK:基于OXML规范的文档解析与渐进式替换指南

简介&#xff1a;面向新能源车研发与汽车电子工具链从业者&#xff0c;这份项目代码包聚焦国产ZXDoc如何打破Vector CANoe垄断&#xff0c;以网页形式呈现技术突围背景与功能亮点。代码包含HTML页面及配套inscode配置、gitignore规则&#xff0c;文件仅3个、压缩后6KB&#xff…

2026/10/20 10:08:50 阅读更多 →
国产ZXDoc突围Vector垄断:文件解析与SDK替换实战解析

国产ZXDoc突围Vector垄断:文件解析与SDK替换实战解析

简介&#xff1a;面向汽车电子与嵌入式研发工程师、新能源车总线测试人员&#xff0c;围绕国产ZXDoc突围Vector垄断主题整理的项目代码资源&#xff0c;可帮助快速了解其在四大车载总线协议支持、DBC智能解析、ECU刷写与XCP标定等方面的技术特性与市场定位。ZIP压缩包体积仅6KB…

2026/10/20 10:07:49 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →