1Panel多可用区主备搭建与自动故障切换实践
背景与需求
在IDC服务器运维中,单可用区部署存在物理机故障、网络中断等单点风险。利用1Panel开源面板,可在不同可用区的服务器上搭建主备架构,并通过健康检查与DNS切换实现故障自动转移,提升业务连续性。本文介绍一种基于1Panel + Keepalived + 云DNS API的通用实现思路,不依赖特定云厂商。
整体架构
- 主节点(可用区A):运行业务服务,1Panel管理容器或应用,Keepalived负责VIP漂移。
- 备节点(可用区B):与主节点数据同步(如数据库主从),Keepalived处于待命状态。
- 健康检查:通过脚本检测主节点服务端口、进程或HTTP状态。
- 自动切换:当主节点故障时,备节点接管VIP,并调用云DNS API将域名解析切换到备节点公网IP。
配置步骤
1. 准备服务器与1Panel环境
- 在两个可用区各准备一台Linux服务器,分别安装1Panel。
- 在1Panel中创建相同的应用编排(如Nginx + PHP/Java应用),并同步配置文件与代码。
- 确保数据库或缓存层配置为主从同步,并记录各节点内网IP与公网IP。
2. 安装并配置Keepalived
在两台服务器上安装keepalived,主节点配置优先级较高(如100),备节点优先级较低(如50)。使用脚本监控业务端口(例如80/443),一旦不可用则降低优先级或终止keepalived进程,触发VIP切换。
# 主节点示例(节选)
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
unicast_src_ip 主节点内网IP
unicast_peer {
备节点内网IP
}
virtual_ipaddress {
内网VIP/24
}
track_script {
chk_http
}
}备节点配置中state设为BACKUP,priority设为50,其余保持一致。注意:若跨可用区组播不通,务必使用单播(unicast_peer)。
3. 实现DNS自动切换
备节点接管VIP后,需要将对外访问的域名解析到新公网IP。可使用云厂商提供的DNS API,或自建DNS服务。推荐在1Panel中编写定时任务或使用脚本实现:
- 当Keepalived状态切换为MASTER后,触发脚本调用云DNS API,将A记录值修改为当前服务器公网IP。
- 将API调用逻辑写入/etc/keepalived/master.sh和backup.sh,并在配置中引用
notify_master与notify_backup。
4. 数据同步与回切策略
若业务使用MySQL,可在1Panel中配置容器间的主从复制。故障切换后,原主节点恢复时建议先作为新主节点的从库,手动校验数据一致后再调整角色回切,避免脑裂或数据冲突。
验证与注意事项
- 模拟主节点宕机(强制断电或停止服务),观察备节点是否在约2~5秒内接管VIP,并验证域名解析是否更新。
- 建议设置最小TTL(如60秒)以加快DNS生效,但需权衡解析压力。
- Keepalived本身存在脑裂风险,可增加仲裁脚本或使用两台以上节点配合检测。
- 跨可用区网络延迟与带宽需纳入监控,避免数据同步滞后导致切换后数据丢失。
- 所有脚本与密钥需妥善保管,建议存于1Panel的“计划任务”或加密环境变量中。
总结
通过1Panel统一管理应用程序,结合Keepalived的VIP漂移与DNS API实现公网入口切换,可以低成本构建跨可用区主备架构。该方案不依赖特定云厂商的LB产品,适合已使用1Panel的用户快速落地。生产环境仍需结合自身业务进行容灾演练,并定期备份数据。