三台服务器集群部署方案:Halo应用与MySQL主从复制及WAF防护
安装方案,涵盖 1Panel 与宝塔面板的部署、MySQL 主从复制配置、Halo 应用安装以及宝塔云 WAF 的安全防护设置。
一、服务器角色与架构规划
您的三台服务器将构成一个完整的 Web 应用集群环境:
A 服务器:2 核 4G/200Mbps
角色:主数据库服务器 + Halo 应用服务器
软件:1Panel 面板开心版 + MySQL 主库 + Halo 应用
B 服务器:4 核 8G/12Mbps
角色:从数据库服务器 + Halo 应用服务器
软件:宝塔面板开心版 + MySQL 从库 + Halo 应用
C 服务器:8 核 16G/20Mbps
角色:安全防护服务器
软件:宝塔云 WAF + 反向代理 A/B 服务器
二、A服务器部署方案(1Panel + MySQL主库 + Halo)
1. 安装1Panel开心版
准备工作:
确保系统为纯净的 Ubuntu 22.04/CentOS 7+
确保服务器未安装过 Apache/Nginx/MySQL 等环境
执行安装命令:
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh安装完成后记录管理面板的访问地址、用户名和密码
安全设置:
开放 20410 端口(或自定义端口)
修改默认随机生成的密码为强密码
2. MySQL主库配置
编辑 MySQL 配置文件:
[mysqld] server-id = 1 log-bin = mysql-bin binlog-format = ROW binlog-do-db = halo_db # 指定需要复制的数据库重启 MySQL 服务使配置生效
创建复制用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongPassword123!'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;查看主库状态并记录信息:
SHOW MASTER STATUS;记录 File(如 mysql-bin.000001)和 Position(如 120)值
3. 安装Halo应用
通过 1Panel 应用商店安装:
在 1Panel 面板中找到 "应用商店"
搜索并安装 Halo(强大易用的开源建站工具)
配置 Halo 使用本地 MySQL 主库
手动安装方式(可选):
# 创建Halo专用用户 useradd -m -s /bin/bash halo su - halo # 下载最新版Halo wget https://dl.halo.run/release/halo-latest.jar -O halo.jar # 创建systemd服务 sudo bash -c 'cat > /etc/systemd/system/halo.service <<EOF [Unit] Description=Halo Service After=network.target [Service] User=halo WorkingDirectory=/home/halo ExecStart=/usr/bin/java -jar halo.jar Restart=always [Install] WantedBy=multi-user.target EOF' sudo systemctl enable halo sudo systemctl start halo
三、B服务器部署方案(宝塔面板 + MySQL从库 + Halo)
1. 安装宝塔面板开心版
执行安装命令:
wget -O install.sh https://dl.byg.lol/install/install_6.0.sh && bash install.sh安装完成后记录面板地址(如 http://xxx.xxx.xxx.xxx:8888 )和临时密码
登录宝塔面板:
使用任意手机号(如 12345678901)和自定义密码登录
跳过绑定手机步骤
2. MySQL从库配置
编辑 MySQL 配置文件:
[mysqld] server-id = 2 # 必须唯一且不同于主库 relay-log = mysql-relay-bin read_only = 1 # 从库设为只读(可选)重启 MySQL 服务
配置主从复制:
CHANGE MASTER TO MASTER_HOST='A服务器IP', MASTER_USER='repl', MASTER_PASSWORD='StrongPassword123!', MASTER_LOG_FILE='mysql-bin.000001', # 主库的File值 MASTER_LOG_POS=120; # 主库的Position值 START SLAVE;检查复制状态:
SHOW SLAVE STATUS\G确认 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes
3. 安装Halo应用
通过宝塔面板安装:
在宝塔面板 "软件商店" 中安装 Java 环境
创建网站,选择 Java 项目,配置 Halo 运行环境
手动安装方式(与 A 服务器类似):
参考 A 服务器的 Halo 安装步骤
配置 Halo 使用本地 MySQL 从库
四、C服务器部署方案(宝塔云WAF)
1. 安装宝塔云WAF
执行安装命令:
URL= https://download.bt.cn/cloudwaf/scripts/install_cloudwaf.sh && if [ -f /usr/bin/curl ];then curl -sSO "$URL" ;else wget -O install_cloudwaf.sh "$URL";fi;bash install_cloudwaf.sh安装完成后记录访问地址(如 https://IP:8379 )和账号密码
注意事项:
宝塔云 WAF 需要占用 80、443、33060 端口
建议使用单独服务器部署,已安装宝塔面板的机器不支持安装云 WAF
2. 配置防护网站
添加防护网站:
登录宝塔云 WAF 后台
点击 "网站列表"→"添加网站"
防护域名填写 A 和 B 服务器的域名
源站 IP 填写 A 和 B 服务器的 IP 地址
安全策略配置:
CC 防御:设置某 IP 在 60 秒内请求同一访问路径超过 30 次临时拉黑 300 秒
网站漏洞防护:启用 SQL 注入防御、XSS 注入防御、SSRF 防御等
文件路径保护:启用网站后台保护、拦截恶意文件上传等
SSL 证书配置:
为防护域名配置 SSL 证书
启用 HTTPS 强制跳转
3. 反向代理配置
配置反向代理规则:
将 A 和 B 服务器的 Halo 应用通过 C 服务器的 WAF 进行代理
设置负载均衡策略(如轮询)
DNS 解析设置:
将域名解析指向 C 服务器的 IP 地址
确保 A 和 B 服务器只能通过 C 服务器访问
五、系统优化与监控
1. 性能优化
MySQL 优化:
调整 innodb_buffer_pool_size(建议为物理内存的 50-70%)
启用查询缓存
Halo 优化:
配置 Redis 缓存
启用 Gzip 压缩
2. 监控设置
1Panel 监控:
使用 1Panel 内置的监控功能监控 A 服务器资源使用情况
宝塔监控:
在 B 服务器上安装宝塔的云监控插件
设置 CPU、内存阈值报警
WAF 监控:
定期检查宝塔云 WAF 的攻击日志
根据攻击情况调整防护策略
六、备份与灾难恢复
1. 数据备份策略
MySQL 备份:
在 A 服务器设置每日全量备份 +binlog 增量备份
将备份文件同步到远程存储或 C 服务器
Halo 备份:
备份 Halo 的配置文件和数据目录
使用 1Panel/ 宝塔的定时任务功能自动备份
2. 故障转移方案
主从切换:
如果 A 服务器宕机,可将 B 服务器提升为主库:
STOP SLAVE; RESET MASTER;然后修改 Halo 配置指向 B 服务器的数据库
WAF 故障处理:
如果 C 服务器宕机,可临时将 DNS 解析指向 A 或 B 服务器
启用 A/B 服务器的基础防火墙规则
七、安全加固措施
1. 系统安全
基础安全:
禁用 root 远程登录
使用 SSH 密钥认证
配置 fail2ban 防止暴力破解
面板安全:
修改 1Panel 和宝塔的默认端口
启用面板的 IP 白名单功能
2. 应用安全
Halo 安全:
定期更新 Halo 到最新版本
限制后台管理页面的访问 IP
MySQL 安全:
删除默认的 test 数据库和匿名账户
限制 MySQL 只监听内网 IP
3. WAF高级防护
自定义规则:
针对 Halo 的 API 接口设置特定的防护规则
屏蔽常见的恶意 User-Agent
IP 黑名单:
将已知的恶意 IP 加入黑名单
设置自动封禁频繁攻击的 IP
常见问题解决方案
主从复制中断:
检查网络连通性
检查主库的 binlog 是否被清理
重新配置主从复制
WAF 误拦截正常流量:
检查 WAF 日志找到拦截规则
调整防护模式为观察模式
将正常 IP 加入白名单
Halo 应用性能问题:
检查 Java 堆内存设置
启用数据库连接池
考虑增加服务器资源
构成一个高可用、高安全的 Halo 应用集群环境,能够应对一般的访问流量和安全威胁。