1.
概述与设计目标
本方案目标是在香港站群(多台香港机房服务器组成的子云)中实现服务的多节点高可用:无单点故障、自动故障切换、最小化RTO。核心组件:DNS/Anycast、L4/L7负载均衡(HAProxy+Keepalived)、数据库复制(MySQL/Galera)、缓存高可用(Redis Sentinel)、文件同步(GlusterFS/rsync)、监控报警(Prometheus+Grafana)。2.
准备工作与环境要求
在每个节点准备CentOS/Ubuntu,统一时间(NTP)、关闭SELinux或合理配置、防火墙策略。建议节点:至少3个应用节点、2个DB节点(或3个Galera)、3个Redis节点、2个负载均衡节点。开通SSH密钥、设置内网互通及私有网段。3.
网络与DNS策略
步骤:1)将域名DNS TTL设置为60秒;2)使用云解析或外部DNS提供商支持健康检查;3)若支持Anycast可部署以降低全局故障;4)配置备用线路(例如香港机房A和B不同ISP)。实际操作举例:在DNS面板中把A记录指向两台公网LB,TTL=60。4.
部署L4/L7负载均衡(HAProxy + Keepalived)
步骤与示例:1)在两台LB上安装HAProxy:apt install haproxy 或 yum install haproxy;2)配置haproxy.cfg,定义后端server列表和健康检查;3)安装keepalived实现VIP漂移,示例keepalived.conf中配置vrrp_instance,priority主/备分别设置100/90;4)测试:停掉主LB的haproxy,VIP应切换到备机。5.
应用层部署与会话管理
为避免Session导致切换问题,采用:1)将session存储到Redis集群或数据库;2)或在HAProxy上使用sticky cookie(如必须)。Redis建议使用3节点主从+Sentinel,Sentinel配置示例:sentinel monitor mymaster 10.0.0.1 6379 2。6.
数据库高可用方案(MySQL/Galera)
推荐:Galera(同步)或MySQL主主异步+自动故障转移。Galera部署步骤:1)安装MariaDB/Galera组件;2)在my.cnf配置wsrep_cluster_address、wsrep_node_address等;3)初始化一台节点启动bootstrap;4)其它节点加入集群。必要时配置ProxySQL用于读写分流。7.
文件与静态资源同步
静态文件可选择对象存储或GlusterFS/rsync方案。rsync简单实现:在主节点写一个cron任务同步到其他节点:crontab -e 添加 */5 * * * * rsync -az --delete /var/www/ node2:/var/www/ 。若需要高可用共享文件推荐GlusterFS或NFS+DRBD。8.
监控、日志与故障演练
部署Prometheus抓取节点指标,Grafana建面板,Alertmanager配置告警到电话/钉钉/邮件。定期做故障演练:切换VIP、断网、杀掉DB主节点,验证应用在预期时间内可恢复并观察RTO/RPO。9.
安全与备份
步骤:1)在边界用云WAF或Nginx限制攻击;2)使用iptables/ufw限制管理端口;3)为数据库设置定期备份并远端保存(mysqldump或xtrabackup),示例脚本每日备份并上传到对象存储;4)证书使用Let's Encrypt自动续期(certbot)。10.
常见故障与排查要点
排查顺序:1)网络连通性(ping/traceroute);2)服务端口与监听(ss -ltnp);3)负载均衡健康检查日志(HAProxy stats);4)数据库复制状态(SHOW SLAVE STATUS/SHOW STATUS LIKE 'wsrep%)。根据日志定位并切换备份节点。11.
问:在香港站群中如何保证跨机房的低延迟与高可用?
答:合理分布节点于不同香港机房与不同带宽提供商,使用Anycast或全局DNS+低TTL,内部采用内网加速并尽量把读请求分散到就近节点,写请求通过同步集群(Galera)或主主复制并用ProxySQL定向。12.
问:Redis Sentinel和Cluster我应该选哪个?
答:若业务依赖简单主从故障切换且数据量可拆分可接受单槽主从,Sentinel适合;若需要水平分片与高可扩展性,选择Redis Cluster。Sentinel部署更简单但Cluster更复杂配置需注意槽迁移。
13.


