三台服务器集群部署方案: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开心版

  1. 准备工作

    • 确保系统为纯净的 Ubuntu 22.04/CentOS 7+

    • 确保服务器未安装过 Apache/Nginx/MySQL 等环境

  2. 执行安装命令

    curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

    安装完成后记录管理面板的访问地址、用户名和密码

  3. 安全设置

    • 开放 20410 端口(或自定义端口)

    • 修改默认随机生成的密码为强密码

2. MySQL主库配置

  1. 编辑 MySQL 配置文件

    [mysqld]
    server-id = 1
    log-bin = mysql-bin
    binlog-format = ROW
    binlog-do-db = halo_db  # 指定需要复制的数据库

    重启 MySQL 服务使配置生效

  2. 创建复制用户

    CREATE USER 'repl'@'%' IDENTIFIED BY 'StrongPassword123!';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    FLUSH PRIVILEGES;
  3. 查看主库状态并记录信息

    SHOW MASTER STATUS;

    记录 File(如 mysql-bin.000001)和 Position(如 120)值

3. 安装Halo应用

  1. 通过 1Panel 应用商店安装

    • 在 1Panel 面板中找到 "应用商店"

    • 搜索并安装 Halo(强大易用的开源建站工具)

    • 配置 Halo 使用本地 MySQL 主库

  2. 手动安装方式(可选)

    # 创建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. 安装宝塔面板开心版

  1. 执行安装命令

    wget -O install.sh https://dl.byg.lol/install/install_6.0.sh && bash install.sh

    安装完成后记录面板地址(如 http://xxx.xxx.xxx.xxx:8888 )和临时密码

  2. 登录宝塔面板

    • 使用任意手机号(如 12345678901)和自定义密码登录

    • 跳过绑定手机步骤

2. MySQL从库配置

  1. 编辑 MySQL 配置文件

    [mysqld]
    server-id = 2  # 必须唯一且不同于主库
    relay-log = mysql-relay-bin
    read_only = 1  # 从库设为只读(可选)

    重启 MySQL 服务

  2. 配置主从复制

    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;
  3. 检查复制状态

    SHOW SLAVE STATUS\G

    确认 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes

3. 安装Halo应用

  1. 通过宝塔面板安装

    • 在宝塔面板 "软件商店" 中安装 Java 环境

    • 创建网站,选择 Java 项目,配置 Halo 运行环境

  2. 手动安装方式(与 A 服务器类似)

    • 参考 A 服务器的 Halo 安装步骤

    • 配置 Halo 使用本地 MySQL 从库

四、C服务器部署方案(宝塔云WAF)

1. 安装宝塔云WAF

  1. 执行安装命令

    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 )和账号密码

  2. 注意事项

    • 宝塔云 WAF 需要占用 80、443、33060 端口

    • 建议使用单独服务器部署,已安装宝塔面板的机器不支持安装云 WAF

2. 配置防护网站

  1. 添加防护网站

    • 登录宝塔云 WAF 后台

    • 点击 "网站列表"→"添加网站"

    • 防护域名填写 A 和 B 服务器的域名

    • 源站 IP 填写 A 和 B 服务器的 IP 地址

  2. 安全策略配置

    • CC 防御:设置某 IP 在 60 秒内请求同一访问路径超过 30 次临时拉黑 300 秒

    • 网站漏洞防护:启用 SQL 注入防御、XSS 注入防御、SSRF 防御等

    • 文件路径保护:启用网站后台保护、拦截恶意文件上传等

  3. SSL 证书配置

    • 为防护域名配置 SSL 证书

    • 启用 HTTPS 强制跳转

3. 反向代理配置

  1. 配置反向代理规则

    • 将 A 和 B 服务器的 Halo 应用通过 C 服务器的 WAF 进行代理

    • 设置负载均衡策略(如轮询)

  2. DNS 解析设置

    • 将域名解析指向 C 服务器的 IP 地址

    • 确保 A 和 B 服务器只能通过 C 服务器访问

五、系统优化与监控

1. 性能优化

  1. MySQL 优化

    • 调整 innodb_buffer_pool_size(建议为物理内存的 50-70%)

    • 启用查询缓存

  2. Halo 优化

    • 配置 Redis 缓存

    • 启用 Gzip 压缩

2. 监控设置

  1. 1Panel 监控

    • 使用 1Panel 内置的监控功能监控 A 服务器资源使用情况

  2. 宝塔监控

    • 在 B 服务器上安装宝塔的云监控插件

    • 设置 CPU、内存阈值报警

  3. WAF 监控

    • 定期检查宝塔云 WAF 的攻击日志

    • 根据攻击情况调整防护策略

六、备份与灾难恢复

1. 数据备份策略

  1. MySQL 备份

    • 在 A 服务器设置每日全量备份 +binlog 增量备份

    • 将备份文件同步到远程存储或 C 服务器

  2. Halo 备份

    • 备份 Halo 的配置文件和数据目录

    • 使用 1Panel/ 宝塔的定时任务功能自动备份

2. 故障转移方案

  1. 主从切换

    • 如果 A 服务器宕机,可将 B 服务器提升为主库:

    STOP SLAVE;
    RESET MASTER;

    然后修改 Halo 配置指向 B 服务器的数据库

  2. WAF 故障处理

    • 如果 C 服务器宕机,可临时将 DNS 解析指向 A 或 B 服务器

    • 启用 A/B 服务器的基础防火墙规则

七、安全加固措施

1. 系统安全

  1. 基础安全

    • 禁用 root 远程登录

    • 使用 SSH 密钥认证

    • 配置 fail2ban 防止暴力破解

  2. 面板安全

    • 修改 1Panel 和宝塔的默认端口

    • 启用面板的 IP 白名单功能

2. 应用安全

  1. Halo 安全

    • 定期更新 Halo 到最新版本

    • 限制后台管理页面的访问 IP

  2. MySQL 安全

    • 删除默认的 test 数据库和匿名账户

    • 限制 MySQL 只监听内网 IP

3. WAF高级防护

  1. 自定义规则

    • 针对 Halo 的 API 接口设置特定的防护规则

    • 屏蔽常见的恶意 User-Agent

  2. IP 黑名单

    • 将已知的恶意 IP 加入黑名单

    • 设置自动封禁频繁攻击的 IP

常见问题解决方案

  1. 主从复制中断

    • 检查网络连通性

    • 检查主库的 binlog 是否被清理

    • 重新配置主从复制

  2. WAF 误拦截正常流量

    • 检查 WAF 日志找到拦截规则

    • 调整防护模式为观察模式

    • 将正常 IP 加入白名单

  3. Halo 应用性能问题

    • 检查 Java 堆内存设置

    • 启用数据库连接池

    • 考虑增加服务器资源

构成一个高可用、高安全的 Halo 应用集群环境,能够应对一般的访问流量和安全威胁。


三台服务器集群部署方案:Halo应用与MySQL主从复制及WAF防护
https://uniomo.com/archives/san-tai-fu-wu-qi-ji-qun-bu-shu-fang-an-haloying-yong-yu-mysqlzhu-cong-fu-zhi-ji-waffang-hu
作者
雨落秋垣
发布于
2025年10月09日
许可协议