目标:实现三一研发桌面云在多站点(主/备数据中心或多个办公区)协同开发并通过负载均衡保证高可用与性能。小分段:说明边界(应用层、会话、存储、数据库)、关键指标(RTO、RPO、响应时延)和假设(站点间带宽与延迟)。
列明硬件/网络/软件:1) 每站点至少两台应用服务器、两台存储节点、两台数据库节点;2) 公网/专线或MPLS互联,推荐带宽≥200Mbps,延时<50ms;3) 使用Linux(CentOS/Ubuntu)、Docker/Kubernetes、Nginx/HAProxy、Keepalived、MySQL/MariaDB/Percona;4) 监控(Prometheus/Grafana)、日志(ELK/EFK)。
设计要点:1) 边界层:全站点部署前端负载均衡(DNS+VIP),内部使用L4/L7负载均衡;2) 应用层:容器化部署,使用K8s多集群或单集群多节点;3) 数据层:主从或主主复制+分布式存储(Ceph/Gluster);4) 文件层:使用NFS/对象存储(S3兼容)跨站点同步。
步骤(命令示例):1) 配置基础网络与时间同步:apt/yum install chrony;chronyc sources;2) 安装Docker并启用镜像加速;3) 部署Kubernetes(kubeadm)或Docker Compose;4) 配置应用容器镜像并推送至私有Registry(Harbor)。小分段:示例命令 sudo apt-get install -y docker.io && sudo systemctl enable --now docker。创建并推送镜像:docker build -t registry.local/sany/desktop:v1 . && docker push registry.local/sany/desktop:v1。
步骤:1) 使用集中式Git(GitLab/Gitea),每站点开发者通过私网VPN访问或Mirror;2) 设置主仓库与镜像仓库镜像同步(GitLab Geo或git mirror);3) CI/CD流水线:在GitLab CI配置分阶段(build、test、deploy),并在不同Runner上按站点标签执行:stages: [build,test,deploy];4) 自动化部署示例:用Ansible或ArgoCD推送K8s manifests到对应站点集群。小分段:示例.gitlab-ci.yml中deploy阶段使用kubectl apply -f deploy/ --context=site-A。
步骤:1) 选择方案:L4(LVS + Keepalived)做VIP,或L7(Nginx/HAProxy)做智能路由;2) Keepalived配置示例:vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass xxxxx } virtual_ipaddress { 10.0.0.100 } };3) Nginx upstream配置并启用sticky(基于cookie或ip_hash),示例:upstream backend { ip_hash; server 10.0.1.11:8080; server 10.0.1.12:8080; };4) SSL卸载建议在Edge负载均衡实现并转发HTTP到内网。小分段:测试VIP漂移与流量切换,用tcpdump观察连接与cookie。
步骤:1) MySQL主从/双主:先在主节点开启binlog并设置server-id,创建复制用户,执行CHANGE MASTER TO ...,START SLAVE;2) 推荐使用半同步或GTID以降低分裂风险;3) 文件层用rsync+cron或双向同步工具(lsyncd)或对象存储跨站复制(MinIO Replication);4) 示例rsync cron:*/5 * * * * rsync -avz --delete /data/ user@siteB:/data/。小分段:定期检查复制延迟(SHOW SLAVE STATUS\G)。
步骤:1) 制定切换SOP:确认健康检查、停止写入(maintenance mode)、切换VIP/更新DNS、切换数据库主权;2) 自动化故障切换:使用Keepalived +监控脚本触发VIP漂移;3) 练习演练:每季度进行切换演练并记录RTO/RPO;4) 验证:用压力工具(ab/jmeter)在切换前后比对性能与会话保持。小分段:备份策略每日备份MySQL binlog并保留7天,文件快照每日一次。
答:采用会话粘性策略(cookie或ip_hash)保证同一用户请求定向到同一应用实例,同时将会话状态外置到Redis或数据库(Session共享层),并在负载均衡层配置健康检查与短会话超时。若使用K8s,可用StatefulSet或Shared Session Store。
答:通过配置半同步或GTID复制降低数据丢失风险,监控复制延迟(Seconds_Behind_Master),在Prometheus中采集mysql_slave_status指标并设置告警阈值;必要时限流写入或切换到只读以保护数据一致性。
答:采用蓝绿或金丝雀发布:先在备集群部署新版本并做灰度流量(20%),监控错误与性能,确认无误后扩大流量;回滚则反向切换VIP或调整Ingress路由,并回退镜像标签与数据库变更。同时保留备份与变更记录以便快速恢复。