简介:一份面向智慧城市与公交信息化的完整方案书,内含1个doc文档,共858KB,适合交通管理部门、公交企业、智慧城市项目人员及相关专业学习者参考。方案以某市公交数据中心云平台为实例,系统介绍了云计算与大数据技术在公交数据存储、处理和分析中的应用,并给出总体架构设计思路,覆盖数据采集、转换、分发、管理调度与运行监控等关键环节。文档重点阐述了数据集成与共享方案:采用ETL完成数据抽取、转换和加载,通过开放接口与API实现跨系统数据交换;同时结合智能交通、人工智能(机器学习、深度学习)等方向,说明如何支撑公交调度、信号控制与运营决策。内容包含需求分析、建设原则、总体建设方案、数据中心集成平台、统计分析与报表、项目预算,以及技术风险、安全风险和数据质量风险控制等章节,结构完整。目前已有96人学习,可作为撰写公交云平台建设方案、开展架构规划和技术选型时的参考模板。
1. 公交数据中心云平台:为什么方案书要从一张数据流向图开始
公交企业做数据中心云平台,最常见的动因不是IT部门想要新架构,而是那批在机房吃灰的老服务器真的撑不住了:车载GPS/北斗终端每辆车每秒上报一条定位,1000台车一天就是8000多万条记录;4G/5G回传的车载视频一路3Mbps码率,存储和带宽按年翻倍;早晚高峰的刷卡流水、充电桩状态、调度指令全部挤在同一时段。传统「一系统一服务器」的部署方式,CPU利用率常年不到15%,故障时业务互相牵制,扩容要停机,换一台服务器要把业务停半天。云平台要做的就是把计算、存储、网络资源池化,让调度、监控、客流分析跑在同一个底座上,按需分配、故障自动迁移。这篇落地笔记面向公交企业信息化负责人、系统集成商和运维工程师,从需求估算、硬件规划讲到OpenStack部署和五个高频踩坑点,内容全部来自实际交付过公交行业数据中心的经验。
2. 先算账再画架构:公交云平台的需求分析与资源估算
2.1 公交企业到底有哪些数据要上云:一张清单看清数据源
公交数据中心和互联网公司的数据中心最大的区别是数据源特别「杂」。互联网业务大多是结构化请求,公交是结构化数据、半结构化日志和视频流混在一起。规划云平台之前,先列数据清单,这条建议写进方案书第一页也不为过:
- 车辆定位数据:GPS/北斗终端按1秒或3秒频率上报,1000辆车一天约8640万条记录,早高峰并发上报2000~3000条/秒,属典型时序数据,适合走消息队列加时序数据库。
- IC卡与移动支付流水:单日刷卡记录约200万~500万笔,早晚高峰集中,字段小而数量大,对数据库写入吞吐有要求。
- 车载视频监控:每车4~8路,每路2~4Mbps码率,按30天留存算,500辆车的视频存储就要PB级(500×8路×3Mbps×86400秒×30天≈3.1PB),这是整个数据中心最大的存储开销。
- 调度与运营数据:发车计划、实时调度指令、客流统计、准点率报表,结构化为主,实时性要求高,早晚高峰读写并发明显。
- 充电桩数据:电压、电流、SOC、充电时长,接入量随电动公交比例逐年上升,属物联网时序数据。
数据清单列完,你会得出一个反直觉的结论:公交云平台的主要矛盾不是算力,而是存储和带宽。CPU资源紧张通常来自老旧单体应用装了几十台虚机闲置吃内存,真正吃算力的客流视频分析反而不多。方案书里的架构设计顺序应该是先定存储策略,再反推网络和计算配置,而不是先买一堆服务器回来再想装什么系统。
2.2 资源估算的保守公式:CPU、内存、磁盘怎么算
做方案书时最容易翻车的环节就是资源估算。集成商喜欢按「峰值×冗余系数」层层加码,最后报出一个让领导皱眉的预算;公交企业自己估又容易漏掉视频存储这个大头。我一般会分三步算,每一步都有可复核的依据。
第一步算计算资源。统计现有业务虚机总数,按每台虚机平均2 vCPU/4GB内存估算,乘以1.3的冗余系数,得出总量。KVM平台超卖比可以做到1:3甚至1:5,但公交调度系统在早晚高峰有明确并发峰值(调度指令下发、车辆位置刷新),关键业务不建议超卖超过1:3。视频分析、转码这类CPU密集任务不进超卖池,单独用专用计算节点。第二步算内存。物理节点内存的70%~75%可分配给云主机,其余留给宿主机、页缓存和虚拟化开销。以每节点256GB内存、可用180GB为例,按单机平均4GB内存配额算,能承载约45台虚机。第三步算存储,这是公交场景的绝对大头。视频按码率、路数、留存天数相乘;结构化数据按业务库容量的2倍冗余估算;备份和离线归档另计。视频存储建议单独规划,不要和业务系统混在同一个存储池里,否则一次视频写入风暴会拖垮调度数据库的响应。
估算完别忘了加20%的余量。公交行业项目从立项到上线经常跨年,车辆数、视频路数、留存天数都可能调整,余量留在这里比上线后扩容省钱得多——硬件扩容要采购周期,余量是给业务发展留的缓冲,不是浪费。
2.3 架构分层:从接入层到数据层的六层参考模型
公交云平台的逻辑架构可以分成六层,方案书里每一层要画清楚组件和边界,这样采购、建设、运维三个阶段才有依据:
| 层级 | 核心组件 | 职责 |
|---|---|---|
| 接入层 | 车载网关、4G/5G专网、API网关 | 车辆、场站、充电桩的数据接入与协议转换 |
| 网络层 | VXLAN Overlay、BGP EVPN | 租户隔离、跨机房业务互通与路由 |
| 计算层 | KVM、OpenStack Nova | 云主机生命周期管理、弹性伸缩 |
| 存储层 | Ceph RBD/对象、集中式存储 | 块存储、视频对象存储与冷热分层 |
| 平台层 | OpenStack Horizon/Nova/Neutron/Cinder | 统一资源池、配额、监控、计费 |
| 应用层 | 调度系统、客流分析、视频平台、充电管理 | 公交业务系统的承载与数据消费 |
架构分层有两个容易忽略的细节。一是网络层的租户隔离。公交集团下面通常有分公司、子公司,分公司之间财务和运营数据不能互相访问,VXLAN加安全组是必要的,不能图省事全放在一个大二层里。二是平台层的监控。公交数据中心一般没有专职云平台运维团队,Horizon自带功能不够用,选型时把Prometheus+Grafana的监控方案写进方案书,否则上线后虚拟机磁盘满了没人知道,业务挂了才被发现。
3. 硬件选型与网络规划:把预算花在刀刃上
3.1 服务器选型:控制节点和计算节点分开配
公交数据中心的规模一般是几十到几百台物理机,这个量级OpenStack控制节点单独部署三台是标准做法。控制节点跑的是数据库、消息队列、认证服务和API,对CPU要求不高但对内存和磁盘IO敏感,建议2路CPU、128GB内存起步,系统盘用两块480GB SSD做RAID1。三台控制节点组成集群,避免单点故障。控制节点上跑着MariaDB、RabbitMQ、Keystone这些基础组件,它们对内存延迟敏感,内存频率和通道配置不能省。
计算节点是承载业务虚机的主力,选型时重点关注内存插槽数量和PCIe通道数。常见配置是2路CPU、256GB内存、两块系统盘加两块960GB SSD做本地镜像缓存。如果后续要做GPU直通跑视频分析,预留双宽GPU的供电和散热余量,别等到装卡的时候才发现电源功率不够。计算节点的CPU主频比核心数更重要——公交调度业务单线程逻辑多,高主频CPU带来的体验提升比多几个核心明显得多。
存储节点独立规划,不和计算节点混用。每节点12块8TB或16TB HDD加2块NVMe SSD做分层缓存,网络用双万兆网卡绑定。预算有限时优先保证存储节点的网卡和缓存盘配置,计算节点差一点业务还能跑,存储节点是整个云平台的命门,它出问题所有虚机都跟着遭殃。写进方案书的配置表参考如下:
| 节点类型 | CPU | 内存 | 存储 | 数量(起步) | 定位 |
|---|---|---|---|---|---|
| 控制节点 | 2× Gold 5218 | 128GB | 2×480GB SSD(RAID1) | 3 | OpenStack控制面 |
| 计算节点 | 2× Gold 5218 | 256GB | 2×480GB SSD + 2×960GB SSD | 4~6 | 业务虚机 |
| 存储节点 | 2× Silver 4214 | 128GB | 12×8TB HDD + 2×1.6TB NVMe | 3~5 | Ceph OSD |
| 网络节点 | 2× Silver 4214 | 64GB | 2×480GB SSD | 2 | 路由/NAT/负载均衡 |
选型时注意一个参数:控制节点和计算节点混装会导致nova-compute、neutron-agent这些服务争抢CPU和内存,尤其在大规模创建虚机的时候,控制面抖动会波及业务。预算再紧张也要把控制节点独立出来,这个原则在公交这种7×24小时业务场景下不能妥协。
3.2 存储设计:Ceph还是集中式存储,公交场景怎么选
公交数据中心的存储选型基本在Ceph和集中式存储之间二选一。Ceph的优势是三副本冗余、横向扩容、支持块/对象/文件三种接口,一套存储同时供云硬盘和视频对象存储用,硬件成本低;劣势是延迟比集中式略高、运维门槛高、小文件性能一般。集中式存储(比如双控SAN)延迟低、管理简单,但授权和硬件价格高,扩容受控制器上限约束,扩展性有限。
我的选型建议是:小型公交企业,100辆车以下、业务简单,买一台双控集中式存储配合VMware或Hyper-V更省心;300辆车以上、有视频留存和扩容预期的,用Ceph。Ceph配置有三个要点:副本数默认3,磁盘利用率只有33%;OSD数量建议不小于12,否则数据分布不均;PG数量按公式估算后取2的幂次,具体算法见第5章。
存储池要按业务分池。业务数据库用RBD块存储,副本数可以设2(配合故障域确认);视频数据用对象存储接口,单独建pool,走EC纠删码模式(2+1或4+2)而不是三副本,能省出一半容量。冷热分层方面,Ceph的cache-tiering在新版本中不建议用了,直接用两个pool,定时任务把热数据从HDD池提升到NVMe池,或者把超过30天的视频对象迁移到归档池。这个策略要写进方案书的运维章节,否则上线三个月后视频池容量告急,没人知道该动哪里。
3.3 网络拓扑与BGP分区:数据中心内部路由怎么规划
公交数据中心网络一般分核心层、汇聚层、接入层三层。核心交换机之间跑BGP,underlay用BGP+ECMP实现等价多路径,overlay用VXLAN+BGP EVPN做租户隔离。很多从传统网络转过来的工程师习惯用OSPF或静态路由,但在大型数据中心里BGP的优势是策略控制粒度细——按业务分区、按租户发布路由,配合BGP community属性做路由过滤。比如调度系统所在VLAN可以和其他租户互通,而财务系统所在VLAN默认隔离,这些策略在BGP下一条route-map就能完成,OSPF做起来要复杂得多。
SRv6 policy是数据中心网络的演进方向。现在规划时给核心交换机留出支持SRv6的硬件能力(芯片转发、隧道封装),后续从BGP EVPN平滑演进到SRv6 policy,不用换设备。选型时注意交换机的转发芯片是否支持SRv6的SID处理,这个参数直接决定未来能不能升级。
节点接入网络的参数设计:计算节点双万兆网卡bond,bond模式选mode4(LACP),交换机端口配置聚合组;存储节点流量建议独立VLAN,避免与业务流量争抢带宽;管理网络的MTU保持1500,业务overlay网络可以开9000巨型帧,但前提是核心交换机到接入交换机整条链路都支持并统一配置,否则开了巨型帧反而会翻车。这个「统一配置」经常被遗漏——只改接入交换机没改核心,流量走到核心被分片,性能直接腰斩。
4. 云平台软件选型与部署:OpenStack最小可用集群搭建
4.1 选型对比:OpenStack、KVM+Ansible、商用超融合
落地云平台时软件选型是第一道坎。写进方案书的选项大致有三类:第一类是OpenStack,开源、生态全、社区资料多,服务组件可裁剪,适合公交这种需要长期自运维的政企数据中心;第二类是纯KVM加Ansible脚本自管,起步快、资源占用小,但缺少统一控制面,虚机迁移、快照、租户隔离都要手工处理,只适合20台物理机以内的小环境;第三类是商用超融合,开箱即用、有厂商兜底,但授权按CPU或容量收费,长期成本高,扩容绑厂商。
公交行业我一般推荐OpenStack,原因有三个:一是公交数据中心通常需要同时提供计算、存储、网络三类资源,OpenStack正好覆盖;二是Kolla-Ansible容器化部署后升级维护比手工部署简单得多;三是社区资料多,招聘运维工程师时有OpenStack经验的人相对好找。用Kolla-Ansible部署的前提是熟悉Docker和Ansible,如果没有这个基础,先用Packstack单节点快速验证,再切到Kolla-Ansible练手。Packstack适合PoC验证,生产环境不要用。
下面是部署的最小可执行路径,假设物理机已经装好Ubuntu 22.04,配置好静态IP和主机名,三台控制节点、四台计算节点、三台存储节点的角色划分明确。
4.2 控制节点部署:Kolla-Ansible的安装与配置
# 1. 在所有节点上安装基础依赖 apt update && apt install -y python3-pip python3-venv git # 2. 在部署机(可以是控制节点之一)安装 kolla-ansible python3 -m venv /opt/kolla-venv source /opt/kolla-venv/bin/activate pip install -U pip pip install "kolla-ansible>=16,<18" # 3. 生成 multinode 清单文件 mkdir -p /etc/kolla cp -r /opt/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/ cp /opt/kolla-venv/share/kolla-ansible/ansible/inventory/multinode /etc/kolla/ # 4. 生成随机密码文件 kolla-genpwd这段命令完成部署控制面的初始化,核心是第二步创建独立的Python虚拟环境,避免kolla-ansible依赖的包版本和系统包冲突。第4步生成密码文件,存在/etc/kolla/passwords.yml里,所有服务(数据库、消息队列、keystone、nova等)的密码都在里面。生产环境首次生成后必须备份并设置权限chmod 600,丢失这个文件意味着所有服务的密码都无法找回,只能重置,这是第一个「后悔药」节点。
接着配置globals.yml里最关键的参数。kolla_base_distro用ubuntu(CentOS的容器镜像维护节奏慢,社区活跃度也低);network_interface指定管理网卡;neutron_external_interface指定外部网卡(用于浮动IP);openstack_release指定版本。部署命令如下:
# 5. 编辑 /etc/kolla/globals.yml # 关键项: # kolla_base_distro: "ubuntu" # network_interface: "ens192" # neutron_external_interface: "ens224" # openstack_release: "2023.1" # 6. 部署前预检查 kolla-ansible -i /etc/kolla/multinode bootstrap-servers kolla-ansible -i /etc/kolla/multinode precheck # 7. 正式部署(首次执行约30~60分钟) kolla-ansible -i /etc/kolla/multinode deploy # 8. 生成 openrc 环境变量文件 kolla-ansible post-deploy部署完成后通过kolla-ansible post-deploy生成/etc/kolla/admin-openrc.sh,source这个文件就能使用OpenStack命令行。precheck阶段如果某节点Docker网络或磁盘空间不满足要求会直接报错,一定要等precheck全绿再deploy,否则中途失败排错非常痛苦——Docker容器启动失败、镜像拉取超时、服务依赖不满足,问题千奇百怪,而且日志分散在各容器的stdout里,排查比部署本身还耗时。
4.3 计算与存储节点接入:全局网络与云主机类型配置
控制节点部署成功后,需要创建网络、云主机类型和外部网络,云平台才算真正可用。下面是最小配置序列:
source /etc/kolla/admin-openrc.sh # 1. 创建云主机类型(flavor) openstack flavor create m1.small --vcpus 2 --ram 4096 --disk 40 openstack flavor create m1.medium --vcpus 4 --ram 8192 --disk 80 # 2. 创建内部网络与子网 openstack network create bus_net openstack subnet create bus_sub \ --network bus_net \ --subnet-range 192.168.100.0/24 \ --dns-nameserver 223.5.5.5 # 3. 创建外部网络(provider network) openstack network create external_net \ --project admin \ --external \ --provider-network-type flat \ --provider-physical-network physnet1 openstack subnet create external_sub \ --network external_net \ --subnet-range 203.0.113.0/24 \ --no-dhcp # 4. 创建路由并打通内外网 openstack router create bus_router openstack router add subnet bus_router bus_sub openstack router set bus_router --external-gateway external_net # 5. 上传镜像(以 CentOS 云镜像为例) openstack image create --disk-format qcow2 \ --container-format bare --public \ --file ./CentOS-Stream-9-x86_64-GenericCloud.qcow2 centos9参数说明:flavor的disk是40GB指系统盘大小,创建虚机时可以覆盖;子网的dns-nameserver建议填内网DNS或公共DNS,公交企业内网有活动目录的话填域控地址;external网络的--no-dhcp是因为浮动IP网段一般不分配DHCP,否则会跟物理网关冲突。最关键的是第3步的--provider-physical-network physnet1,这个名称要和neutron配置里的bridge_mappings对应,物理网卡接在哪个网桥上就填哪个名字,映射关系不一致虚机起不来网络。
用Ceph作为云硬盘后端时,cinder.conf里配置enabled_backends = ceph,然后创建云硬盘类型:
openstack volume type create --public rbd openstack volume type set rbd \ --property volume_backend_name=ceph这段配置告诉cinder把rbd类型的卷创建请求分发到Ceph后端。公交业务中的调度数据库、刷卡数据库建议挂载独立的Ceph块设备而不是用虚机本地盘,迁移和备份都灵活。视频存储则不走云硬盘,直接通过S3接口写到Ceph对象池,避免云硬盘数量配额限制,同时降低管理复杂度。
5. 云平台落地避坑:公交场景最常见的五个翻车点
5.1 现象:虚机磁盘IO慢到调度系统超时——原因:Ceph PG数量设错
第一条踩坑记录是Ceph集群创建时最容易犯的错误:PG数量拍脑袋定。帮公交客户搭集群时,初始规划60个OSD,工程同事嫌麻烦直接把pg_num设成128,结果数据分布严重不均,70%的数据挤在20个OSD上,虚机磁盘IO延迟从30ms飙到300ms,调度系统频繁超时,数据库运维天天来投诉。
原因分析:Ceph的PG数决定数据分布粒度,公式是PG数 = (OSD数 × 100) / 副本数,结果向上取最近的2的幂。60个OSD三副本,算出来是2000,取2048。PG太少导致单个PG覆盖的数据量过大,同时写入热点集中在少数OSD,而128这个数连每个OSD平均2个PG都不到,数据均衡完全无从谈起。
解决:调整Ceph的pg_num和pgp_num参数后触发了大规模数据重分布,好在是业务低峰期操作,配合osd_max_backfills限速,跑了一晚上总算均衡。后来在方案书里就把它做成固定参数表:10个OSD配256,30个OSD配1024,60个OSD配2048,并标注「扩容OSD数量后必须同步调整PG数,不能只加盘不改参数」。
5.2 现象:视频存储占满后业务全挂——原因:未做存储分层与配额
第二条翻车是典型的「存储一锅端」。某公交项目把视频池和业务池建在同一个Ceph集群里,没有按pool设置配额,视频数据按7天留存持续增长,结果RBD池被写满,调度数据库所在虚机的云硬盘直接进入只读状态,全城车辆调度短暂中断。
原因:Ceph的pool默认不限制容量,块设备和对象存储共用OSD资源时,视频写入会挤占业务卷的IOPS和容量。更深的层面是运维侧没有设置告警阈值,容量到85%时没有通知。
解决:给每个pool设置max_bytes配额,比如视频池总量限制在集群容量的60%,业务池限制在30%,同时配置Prometheus的Ceph exporter监控每个pool的使用率,超过80%就告警。视频这类容忍延迟的数据单独走EC池,和业务RBD池物理隔离——如果预算允许,直接把视频存储放到独立的存储节点组上,连IOPS互扰都免了。视频和业务分离是公交云平台设计的铁律,一次踩坑换来的教训。
5.3 现象:虚机网络时通时不通——原因:vSwitch没开多队列
第三条是虚拟网络性能问题。创建了8 vCPU的虚机跑客流统计服务,发现流量稍微一上来,网络延迟就从2ms跳到200ms,从虚机里看CPU软中断占用100%,但物理宿主机几乎空闲。
原因:OpenStack默认的virtio-net驱动只配了单队列,所有网卡中断都打在vCPU0上,跨NUMA访问还会加剧延迟;8个vCPU只有一个在处理网络包,其余都在围观。
解决:在nova配置里开启[libvirt]/virt_type=kvm并给虚机规格设置hw_vif_multiqueue_enabled=true,或者通过flavor的extra spec开启:
openstack flavor set m1.medium --property hw_vif_multiqueue_enabled=true这样virtio-net会为每个vCPU创建一个队列,中断分散到多个核上。另一个相关联的参数是hw:numa_nodes,高频业务建议把NUMA拓扑透传给虚机,避免跨NUMA访存。这两个参数组合起来,公交调度大屏的刷新卡顿问题基本能消除。这个坑在KVM环境特别隐蔽,因为物理机CPU看起来没瓶颈,问题全在虚机内部的中断处理上。
5.4 现象:备份永远失败——原因:备份窗口与业务高峰重叠
第四条是备份策略问题。项目上线后每周日凌晨2点做全量备份,但周一早上总发现备份任务失败,重试也失败,虚机快照一直显示error状态。一开始怀疑是Ceph集群问题,查日志发现是备份时RBD快照和底层qemu写入发生了锁冲突。
原因:公交的刷卡清算任务在周日凌晨还在跑批处理,业务IO尚未进入低峰,备份触发的快照操作与业务写IO争抢同一批OSD,Ceph的写锁等待超时,快照创建失败。
解决:把备份窗口从凌晨2点挪到凌晨5点,并在cinder.conf里调整备份速率backup_ceph_pool和backup_use_temp_snapshot参数,减少对在线卷的锁占用。另外给备份pool单独划分OSD组或者限制备份进程的IO策略——这个问题的本质是「备份也是业务」,规划时同样要参与IO模型估算。备份任务失败率高的项目,十有八九是备份窗口和业务高峰重叠,改时间比改参数更有效。
5.5 现象:扩容后性能不升反降——原因:没有遵循NUMA拓扑
第五条是最隐蔽的:给计算节点加内存后,云主机性能反而下降,数据库压测从8000 QPS掉到5000 QPS。排查了一圈发现是内存插法不对。
原因:计算节点是2路CPU,原来48GB内存全插在CPU0的通道上,新加的内存放在了CPU1的通道,导致虚机从CPU0访问内存时一部分走了跨NUMA路径,延迟翻倍。物理上内存分布不均,不是OpenStack能感知的,它只会按默认NUMA拓扑调度虚机。
解决:把内存按均衡模式插入两组CPU通道,BIOS里开启NUMA并配置为interleaved或按节点绑定。在nova的flavor里用hw:numa_nodes=2让虚机显式感知物理拓扑,数据库类虚机还要把hw:cpu_pinning配置成dedicated,避免调度器把vCPU乱放。这是纯物理层面的「玄学」问题,但踩过一次就长记性了:硬件上架前先做内存组和CPU组的一一映射,写进机房上架表。云平台不是纯软件问题,物理硬件的插法直接决定性能上限。
6. 从虚拟化到智能云平台:公交云的下一跳怎么走
云平台跑通之后,下一步是往智能云平台方向走。公交企业积累的车辆轨迹、视频、刷卡数据是典型的AI训练素材,但普通计算节点跑不了深度学习任务,需要在云平台里做两件事:一是给GPU服务器配置PCIe直通或vGPU切片,让客流统计、违规检测、拥堵预测这类任务按需申请算力;二是在OpenStack之上引入容器层,把调度、票务这类无状态应用容器化,GPU资源通过vGPU调度仍然由nova管理,不至于推倒重建。
验证云平台是否健康有一个实用做法:选两台物理机做一个非核心业务的冷迁移演练,把运行中的虚机用openstack server migrate触发热迁移,观察迁移时间和业务中断窗口。公交业务没有互联网公司那种级别的弹性压力,热迁移能力够用就行,真正要多练的是故障演练——拔掉一个存储节点的电源,看Ceph是否在osd down后自动恢复数据。这类演习做过一次,心里就有底了。
还有最后一个建议:把安全组策略落在网络层。公交数据中心里的调度指令有实时性要求,但安全组规则不能因此全放通,VXLAN租户隔离配合安全组白名单是底线,等保测评的时候也能用上。我自己带项目时养成的习惯是每个云平台都建一份「容量台账」,记录每台物理机的内存插法、PCIe槽位、Ceph pool配额和PG数,扩容前先查台账再下单买硬件。这套做法救我过两次,一次是扩容存储节点时发现PG数要同步调整,一次是加内存时避免重蹈NUMA覆辙。希望帮到你。
本文还有配套的精品资源,点击获取