1.
整体设计与准备
小分段:评估需求与资源;在柬埔寨机房通常准备至少两台应用节点、两台数据库节点(或Galera三节点)、一组监控节点与共享存储/浮动IP。确认网络连通、带宽、路由、是否支持浮动IP或BGP;准备系统账户、SSH密钥、时间同步(chrony/ntp)。
2.
网络与防火墙基础配置
小分段:设置固定IP与子网、配置iptables/nftables或云提供的安全组,只放通必要端口(80/443、3306、VIP相关的VRRP 112、监控端口9100/9090等)。示例:iptables -A INPUT -p tcp --dport 80 -j ACCEPT;启用内核转发 sysctl -w net.ipv4.ip_forward=1 并持久化到 /etc/sysctl.conf。
3.
部署负载均衡(HAProxy/Nginx/LVS)
小分段:选择HAProxy作为软件LB:安装 apt-get install -y haproxy,编辑 /etc/haproxy/haproxy.cfg,示例frontend/backend 配置,启用健康检查:option httpchk GET /health;后端服务器按IP和权重列出。验证:systemctl restart haproxy && ss -ltnp | grep haproxy。
4.
VIP与故障切换(keepalived)
小分段:安装 keepalived,配置 /etc/keepalived/keepalived.conf,示例:
vrrp_instance VI_1 { state MASTER/ BACKUP; interface eth0; virtual_router_id 51; priority 100; authentication { auth_type PASS; auth_pass secret; } virtual_ipaddress { 10.0.0.100 } }
在备节点降低 priority 并设置 track_script 执行haproxy健康检查脚本。启动并测试:ip addr show 确认VIP漂移。
5.
数据库高可用:主从与群集
小分段:对MySQL可用两种方案:主从+VIP或Galera三节点。主从步骤:在主库执行 FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; 导出二进制位置,导入到从库并运行 CHANGE MASTER TO MASTER_HOST='主IP', MASTER_USER='repl', MASTER_PASSWORD='pwd', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=123; START SLAVE; 检查 SHOW SLAVE STATUS\\G。Galera则安装MariaDB+galera,配置wsrep_cluster_address,启动并检查状态。
6.
共享存储与文件同步
小分段:如果需要共享文件(会话/上传),推荐GlusterFS或NFS+rsync。GlusterFS三节点创建卷:gluster peer probe NODE2; gluster volume create gv0 replica 3 transport tcp NODE1:/data/gv0 NODE2:/data/gv0 NODE3:/data/gv0; gluster volume start gv0。NFS用于小规模:编辑 /etc/exports 并 exportfs -ra,客户端 mount -t nfs SERVER:/export /mnt。
7.
备份与恢复策略
小分段:数据库定时物理备份(mysqldump或xtrabackup),并保留多份到异地(建议在柬埔寨机房外也保留一份);日志切割与同步(rsync+cron);测试恢复流程:使用备份文件在测试环境进行恢复并核验一致性。
8.
监控平台部署(Prometheus + Grafana)
小分段:安装Prometheus,配置 scrape_configs 抓取 node_exporter(9100)、haproxy_exporter、mysqld_exporter。示例 prometheus.yml 中 job_name 和 targets 列表。安装 node_exporter:systemctl enable --now node_exporter。Grafana添加Prometheus为数据源,导入dashboards(Node Exporter Full、HAProxy、MySQL)。
9.
报警与自动化响应
小分段:使用Prometheus Alertmanager配置告警规则(实例不可用、CPU过高、磁盘满、主库断连等),配置邮件/Slack/微信告警。结合简单自动化脚本(通过Ansible/ssh)在必要时执行重启服务或切换VIP,所有自动化必须经过严格的限流与人工确认。
10.
健康检查与故障演练
小分段:实现多层健康检查:L4(端口)、L7(/health 返回200)、数据库检查(show slave status 或 mysql ping)。定期演练:断开主节点网络、停止haproxy、模拟磁盘满,验证VIP切换、从库提升与自动报警。记录每次演练的时间线与改进项。
11.
在柬埔寨机房的网络与运维注意点
小分段:注意机房链路冗余、上行出口可能单一,建议使用跨机房多可用区部署或使用支持浮动IP/BGP的服务。与机房运维保持SLA沟通,提前确认公网带宽、反向DNS、IP解封流程;并设置合理的带宽和DDoS防护策略。
12.
问答:如何验证VIP切换是否可靠?
问:如何在生产环境验证VIP在节点故障时能正确切换且不中断服务?
答:先在非高峰期做演练:在MASTER上停用keepalived或断网,观察VIP是否在数秒内漂移到BACKUP(ip addr show),并通过外部主机连续ping VIP、curl 应用健康接口,验证无明显超时;同时确保连接重试逻辑与会话粘性处理(如cookie或会话存储)已就绪。必要时记录重连时间并优化keepalived的advert_int和priority设置。
13.
问答:数据库主崩溃后如何快速恢复写服务?
问:主库故障时如何保证最短时间恢复写能力?
答:提前准备好快速提升流程:使用自动化脚本或手动将某从库提升为主库(STOP SLAVE; RESET SLAVE ALL; 设置应用指向新主),并更新VIP或DNS指向新主。如果使用Galera,确认一节点为Primary并重启集群;事后需重新建立原主作为从库并补齐二进制日志或进行全量同步。
14.
问答:监控误报与报警风控如何处理?
问:如何减少监控误报并保证报警可靠?
答:设置多条件告警(例如同时检测HTTP失败与CPU>90%才报警),使用抑制与分组(Alertmanager)合并相关告警,加入恢复自动化的确认步骤与人工确认环节;定期审核规则、阈值与数据采集频率,保证告警的可操作性与准确性。
来源:高可用架构在柬埔寨独立服务器上的实现方法与监控要点