尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

OpenStack运维实战:从日常巡检到故障排查的稳定性保障

OpenStack运维实战:从日常巡检到故障排查的稳定性保障 1. 从“能启动”到“敢上线”OpenStack运维的核心价值是什么很多人一提到OpenStack运维脑子里就是敲命令、看日志、重启服务。这没错但只对了一半。真正在一线扛过生产环境的运维会告诉你OpenStack运维的核心价值是把一堆复杂的开源组件变成一个稳定、可预测、能支撑业务连续性的云平台。这中间最大的鸿沟不是技术本身而是从“单机实验”到“集群生产”的思维转变。你可能会在实验室里用DevStack或PackStack快速搭起一个All-in-One的环境所有服务都跑通了觉得OpenStack不过如此。但一旦放到生产环境面对几十上百台物理机、多个网络平面、不同存储后端、持续的业务虚拟机创建与销毁问题就会指数级涌现。你的角色就从“安装工程师”变成了“云平台医生”和“容量规划师”。所以这篇文章不是教你安装OpenStack的命令列表那是文档的活。我想分享的是一个运维人员从接手一个OpenStack集群开始如何建立一套日常的“巡检、干预、排错、优化”的工作流。你会看到运维的一天其实是围绕着稳定性、资源、效率、安全这四个核心目标展开的。无论是处理一个虚拟机无法创建的工单还是规划下个季度的计算资源扩容底层逻辑都离不开这四点。2. 晨间巡检用数据代替直觉建立系统健康基线一天的工作从系统性巡检开始。有经验的运维不会一上来就登录控制节点乱敲命令而是先看全局仪表盘。这里的关键是建立基线——你得知道“正常”的时候各项指标长什么样。2.1 第一眼Dashboard与核心服务状态首先打开Horizon控制面板如果有快速扫一眼总览页面查看总虚拟机实例数、CPU/内存使用率、存储使用量的变化趋势。突然的飙升或断崖式下跌都可能是问题前兆。计算节点检查所有nova-compute服务状态是否为up。如果有节点状态是down这通常是优先级最高的事件。网络节点检查neutron-server、neutron-l3-agent、neutron-dhcp-agent等服务状态。网络服务挂掉影响面最大。存储状态如果是Ceph后端看Ceph集群健康状态ceph -s如果是LVM或NFS看存储节点的服务状态和挂载点。但Horizon的信息有时滞后或不全面。所以真正的第一手数据来自命令行。我会准备一个每日执行的脚本收集以下关键信息# 1. 核心服务状态在控制节点执行 source /etc/keystone/admin-openrc.sh openstack compute service list openstack network agent list openstack volume service list # 2. 资源使用概况 openstack hypervisor stats show openstack hypervisor list --long # 查看每个计算节点的详细资源 openstack quota show --project your_project_id # 查看关键项目的配额使用情况 # 3. 消息队列和数据库基础健康简易检查 sudo systemctl status rabbitmq-server* | grep Active sudo systemctl status mariadb | grep Active这个脚本的输出我会和昨天的数据进行对比。比如发现消息队列RabbitMQ的积压消息数持续增长可能预示着某个服务处理消息变慢或卡住了。2.2 第二层日志中的“预警信号”日志不是等出事了才看。晨间巡检时我会快速扫描关键服务的错误日志/var/log/service/用grep和tail过滤出过去一小时内出现的ERROR和WARN级别日志。Nova (/var/log/nova/): 重点关注nova-compute.log中是否有持续的ResourceProvider更新失败、BuildAbortException构建中止或与Libvirt通信失败的错误。这往往预示着计算节点与控制节点失联或本地资源有问题。Neutron (/var/log/neutron/): 关注neutron-l3-agent.log和neutron-dhcp-agent.log。常见的预警有Failed to configure dnsmasqDHCP配置失败、路由规则添加失败、或者安全组规则同步错误。Cinder (/var/log/cinder/): 看cinder-volume.log注意卷创建、挂载、扩容失败的信息可能指向存储后端如Ceph Pool空间不足或连接超时。这里有个经验不是所有WARN都需要立刻处理。有些是偶发的、自恢复的。你需要结合频率和上下文判断。如果同一个错误在短时间内重复出现即使级别是WARN也要当成ERROR来调查。2.3 第三层基础设施健康度OpenStack跑在Linux上底层基础设施不稳上层服务再好也白搭。我会抽查1-2个计算节点和网络节点登录上去快速检查系统负载uptime,top(看是否有进程长期占用过高CPU)。内存与交换free -h关注可用内存和Swap使用情况。Swap被频繁使用说明物理内存严重不足。磁盘空间df -h重点看根分区、/var分区日志、/var/lib/nova/instances虚拟机镜像所在分区的使用率。超过80%就需要警惕。网络连通性在计算节点上ping控制节点的管理网IP、存储网络IP。网络分区是导致集群脑裂的元凶。这套“三层巡检法”做完大概花15-30分钟。目的是对集群的整体健康度有一个清晰的、数据化的认知而不是凭感觉。发现问题就进入下一个环节排错与干预。3. 典型工单处理从“虚拟机创建失败”到根因定位晨检后通常会有业务部门提交的工单。最常见的一类就是“申请创建虚拟机失败”。新手可能会直接让用户重试或者重启nova-compute服务。但老手会有一套标准化的排查流程像破案一样层层递进。3.1 第一步收集“案发现场”信息首先向用户或从工单系统获取关键信息项目Project/Tenant名称用于后续命令的--os-project-name参数。失败时间点精确到分钟方便查询日志。虚拟机的规格Flavor名称、vCPU、内存、磁盘大小。使用的镜像Image和网络Network。完整的错误信息Horizon上显示的错误代码或描述最好有截图。3.2 第二步从OpenStack CLI开始追踪拿到信息后用管理员权限开始查source /etc/keystone/admin-openrc.sh # 1. 查看该用户在指定时间附近的操作记录Event列表 openstack event list --project project_name --limit 20 # 2. 找到创建虚拟机的请求ID通常以req-开头 # 假设从event list中看到请求ID是 req-xxxx openstack server list --project project_name --status ERROR # 查看失败状态的虚拟机 # 或者直接根据名称查 openstack server show vm_name # 关注 fault 字段里面有错误详情fault字段是第一个重要线索它可能直接告诉你“No valid host was found”没有可用主机或“Resource XXXXX is unavailable”资源不足。3.3 第三步根据错误线索深入排查场景ANo valid host was found.这是最经典的错误意思是调度器Scheduler找不到满足条件的计算节点。原因很多要按顺序排查资源不足用户申请的Flavor如16vCPU64G内存太大所有计算节点都没这么多空闲资源。用openstack hypervisor list --long验证。调度过滤器Filter不匹配可用域Availability Zone用户指定了AZ但目标AZ里没有nova-compute服务是up状态。主机聚合Host AggregateFlavor设置了额外的元数据如aggregate_instance_extra_specs要求运行在具有特定标签如ssdtrue的主机上但没有主机满足。网络虚拟机要绑定的网络其对应的物理网络physical_network在某些计算节点上没有配置。计算节点服务异常节点状态是up但nova-compute服务内部可能有问题如Libvirt连接失败导致调度器将其标记为不可用。需要登录该节点查nova-compute.log。排查命令示例# 查看调度器在决策时的详细日志需要调整nova-scheduler日志级别为DEBUG生产环境慎用 # 或者通过资源使用来反推 openstack hypervisor show hypervisor_name # 看某个节点的详细容量和使用量 nova-manage cell_v2 discover_hosts --verbose # 如果用了Cells v2确保主机列表已同步场景B虚拟机状态卡在BUILD或ERROR但fault信息模糊。这时需要直接查虚拟机的底层ID然后去对应的计算节点上找日志。用openstack server show vm_id --os-compute-api-version 2.1获取虚拟机的hostId即运行在哪个计算节点上和实例UUID如uuid-xxxx。SSH登录到该计算节点。查看该实例的Libvirt定义文件和日志sudo virsh list --all | grep instance_uuid_part sudo virsh dumpxml instance_name # 查看虚拟机XML定义是否完整 sudo cat /var/log/libvirt/qemu/instance_name.log # 查看QEMU启动日志同时查看该节点上的/var/log/nova/nova-compute.log用实例UUID过滤时间点附近的日志sudo grep instance_uuid /var/log/nova/nova-compute.log | tail -50这里经常发现的问题有镜像下载失败Glance连接超时、网络配置失败Neutron端口绑定错误、磁盘空间不足/var/lib/nova/instances满了、或者安全组规则应用超时。3.4 第四步解决与验证找到根因后解决措施就明确了资源不足引导用户选择更小规格或者申请扩容计算资源。服务异常重启故障服务如sudo systemctl restart nova-compute并持续观察日志。配置问题修正网络映射、主机聚合标签或调度器配置。底层存储/网络问题联系存储或网络团队协同解决。最重要的一步问题解决后不要直接关闭工单。让用户在相同条件下同样的项目、镜像、网络、Flavor重新创建一次虚拟机并确认成功。同时你需要在后台观察整个创建流程的日志确保没有遗留的报错。这才是完整的闭环。4. 日常维护操作扩容、升级与备份除了救火运维还有大量的计划性工作。这些工作更需要谨慎因为一个操作失误可能影响一片业务。4.1 计算节点扩容业务增长需要加机器。流程不是插上电安装nova-compute就完事了。前置检查硬件一致性CPU型号、内存类型、网卡型号最好与现有节点一致避免虚拟机迁移Live Migration因CPU特性不同而失败。网络规划管理网、业务网租户网络、存储网如果分离的IP、VLAN、MTU配置必须与现有环境完全一致。存储对接如果是共享存储如Ceph确保新节点能访问所有必要的存储池Pool和密钥。系统与基础环境安装相同版本和内核的OS。配置相同的Yum/DNF源包括OpenStack仓库、EPEL等。安装基础依赖包qemu-kvm,libvirt,openvswitch等。时间同步NTP/Chrony必须配置且与控制器同步。安装与配置服务通过自动化工具Ansible, Puppet或手动安装nova-compute,neutron-openvswitch-agent等包。从一台正常节点拷贝/etc/nova/nova.conf,/etc/neutron/plugins/ml2/openvswitch_agent.ini等核心配置文件并修改其中的host、my_ip等节点特有信息。特别注意nova.conf中的compute_driver、virt_type、live_migration_系列参数必须与集群一致。加入集群与验证启动服务并设置开机自启。在控制节点执行openstack compute service list等待新节点状态变为up。执行nova-manage cell_v2 discover_hosts如果用了Cells v2。最终验证在新节点上调度创建一个测试虚拟机并测试其网络、存储访问是否正常。4.2 小版本升级如从Yoga到ZedOpenStack每半年一个版本生产环境升级是大事。原则是先非控制节点后控制节点先次要服务后核心服务有回滚方案。准备阶段完整备份备份所有节点的配置文件/etc/service/、数据库mysqldump、消息队列如果可能。对控制节点做快照。阅读Release Notes重点关注不兼容性变更、废弃功能、必须执行的数据迁移操作。制定详细计划列出每个服务的升级顺序、依赖关系、预计停机时间窗口。执行升级以滚动升级为例升级计算节点逐个节点进行。停服务 - 更新包 - 更新配置文件根据新版样例合并变更- 启动服务 - 验证该节点虚拟机运行正常。一个节点完全OK后再下一个。升级网络节点类似计算节点需注意OVS/Neutron Agent的版本兼容性。可能造成网络短暂中断。最后升级控制节点这是风险最高的部分。通常顺序是数据库Schema升级service-manage db sync- 消息队列 - Keystone - Glance - Placement - Nova API - Cinder API - Neutron Server等。必须严格按照官方升级指南操作。验证与回滚升级后全面测试创建虚拟机、挂卷、配置网络、拍快照、迁移等核心流程。监控系统各项指标至少24小时。如果出现严重问题立即启动回滚预案停止新服务恢复旧版本包和配置文件回滚数据库如果提前备份了Schema。4.3 备份策略备份不是为了存数据是为了能恢复。OpenStack的备份分几个层次虚拟机数据这是用户的数据由用户或基于快照/镜像的备份策略负责。平台运维更关注元数据。核心数据库MariaDB/MySQL必须定期全量备份。使用mysqldump或xtrabackup。备份频率根据变更频率来至少每天一次。消息队列RabbitMQ备份其定义队列、交换器但消息本身通常是瞬态的。可以通过策略实现镜像队列保证高可用。配置文件所有节点的/etc/service/和/etc/hypervisor/如Libvirt目录用版本控制系统如Git管理是最佳实践。Glance镜像镜像文件本身在对象存储或文件系统里需要单独备份存储后端。一个简单的日常备份脚本框架#!/bin/bash BACKUP_DIR/backup/openstack/$(date %Y%m%d) mkdir -p $BACKUP_DIR # 1. 备份数据库 mysqldump --single-transaction --all-databases $BACKUP_DIR/openstack_all.sql # 2. 备份关键配置文件 tar -czf $BACKUP_DIR/etc_services.tar.gz /etc/nova /etc/neutron /etc/keystone /etc/glance /etc/cinder /etc/rabbitmq /etc/mysql # 3. (可选) 导出关键资源列表作为恢复参考 source /etc/keystone/admin-openrc.sh openstack server list --all-projects $BACKUP_DIR/instance_list.txt openstack network list $BACKUP_DIR/network_list.txt openstack volume list --all-projects $BACKUP_DIR/volume_list.txt # 4. 清理旧备份保留最近7天 find /backup/openstack -type d -mtime 7 -exec rm -rf {} \;5. 性能调优与深度排错当集群变慢时集群运行一段时间后可能会感觉“变慢了”比如虚拟机创建时间变长、控制面板操作卡顿。这不是玄学可以从几个方面入手。5.1 数据库性能OpenStack的数据库是瓶颈高发区。检查点慢查询在MariaDB中开启慢查询日志分析频繁出现的慢SQL。常见的有未加索引的instance_uuid查询、复杂的联合查询。连接数检查max_connections配置是否够用。用show processlist;查看当前连接数和活跃查询。表碎片定期对核心大表如nova.instances,neutron.ports进行优化OPTIMIZE TABLE但需在业务低峰期进行。5.2 消息队列积压RabbitMQ消息积压会导致所有异步操作如创建虚拟机排队。检查命令sudo rabbitmqctl list_queues name messages messages_ready messages_unacknowledged关注messages_ready数量持续增长的队列。可能是某个Consumer如nova-conductor,cinder-volume处理能力不足或卡住了。需要重启对应的服务并检查该服务的日志。5.3 Nova调度器性能如果创建虚拟机慢但资源充足可能是调度器nova-scheduler决策慢。过滤器配置在/etc/nova/nova.conf的[filter_scheduler]部分enabled_filters列表不要启用过多过滤器尤其是那些需要跨节点查询信息的过滤器如AggregateInstanceExtraSpecsFilter会增加调度时间。调度器工作进程确保有足够多的scheduler工作进程。可以通过ps aux | grep nova-scheduler查看或者在nova.conf中配置workers参数通常设为CPU核心数。5.4 网络性能瓶颈OVS流表膨胀在网络节点或计算节点上运行sudo ovs-ofctl dump-flows br-int | wc -l如果流表数量巨大例如超过几万条会影响网络性能。这通常是由于安全组规则过多或网络拓扑复杂导致。需要考虑清理不用的端口或者调整流表超时时间。Neutron Server响应慢检查Neutron Server的日志和数据库连接。对于大规模部署可以考虑将Neutron Server的api_workers和rpc_workers调大。5.5 使用性能分析工具OSProfiler在开发或测试环境启用OSProfiler可以追踪一个API请求如创建虚拟机在所有OpenStack服务中的调用链和耗时精准定位瓶颈。PySpy / cProfile如果怀疑某个Python服务进程CPU占用高可以使用这些工具对其进行性能剖析。6. 构建运维体系从救火到防火一天的救火工作结束后有追求的运维会思考如何“防火”。这意味着将重复性工作自动化将经验沉淀为监控和告警。6.1 监控告警体系除了基础的Zabbix/Prometheus监控服务器硬件指标OpenStack层面必须监控服务状态所有openstack service list和agent list中服务的up/down状态。资源水位各项目Project的配额使用率CPU、内存、磁盘、浮动IP、安全组规则数。设置阈值告警如80%。任务队列RabbitMQ中各队列长度。nova、cinder、neutron相关的队列持续积压必须告警。API性能Keystone、Nova、Neutron API的请求响应时间、错误率4xx, 5xx。底层存储Ceph集群健康状态、Pool使用率、IOPS/带宽。或者NFS服务器的连接数、磁盘空间。告警通知要分级紧急服务宕机、资源耗尽直接电话/短信重要性能下降、错误率升高发邮件/即时通讯工具一般信息性提示仅记录。6.2 自动化脚本库把日常操作脚本化并纳入版本管理如Git。例如批量操作脚本批量重启某个服务的所有agent、批量清理某个状态如ERROR的虚拟机、批量迁移某个计算节点上的所有实例。信息收集脚本一键收集所有节点的关键日志和配置用于故障排查。健康检查脚本比监控更复杂的定制化检查如检查所有计算节点上的Libvirt域Domain与Nova数据库记录是否一致。6.3 文档与知识库每一次处理完一个不常见的问题就把排查思路、根本原因、解决方案记录下来形成内部Wiki。这不仅是为了自己以后查阅更是为了团队知识传承。文档应该包括故障现象描述。完整的排查命令和输出脱敏后。根本原因分析。解决步骤。预防措施或改进建议。6.4 变更管理与预案任何对生产环境的变更无论是修改配置、升级版本还是扩容都必须有变更申请、操作步骤、回滚方案和验证方案。严禁在业务高峰时段进行未经充分测试的变更。OpenStack运维的一天是技术、流程和经验的结合。它始于对系统全局的清醒认知陷于对具体问题的抽丝剥茧终于对运维体系的持续建设。最终目标是让这个庞大而复杂的平台像水电一样稳定可靠让业务团队感受不到它的存在而这正是运维工作的最大价值。
返回列表