资讯详情

OpenStack二次部署:从能跑起来到可诊断可调优

📅 2026/10/16 14:31:53 | 华诺云谱 👁 阅读
OpenStack二次部署:从能跑起来到可诊断可调优
1. 项目概述这不是一次简单的环境部署而是一次对云基础设施底层逻辑的系统性验证“openstack-iass搭建 二”这个标题看似平淡甚至带点技术文档式的枯燥感但它背后指向的是一个真实、复杂、充满变量的工程实践现场。我接触过太多人把OpenStack当成一个“装完就跑”的黑盒平台——点几下Web界面开几台虚拟机就以为自己掌握了IaaS。但真正做过两次以上完整部署的人会明白第一次是照着文档磕磕绊绊地走通流程第二次才是开始理解哪些组件真正在协同、哪些配置在静默失效、哪些网络路径在流量洪峰时悄然断裂。这里的“二”不是版本号而是实操阶段的分水岭从“能跑起来”迈向“能稳住、能诊断、能调优”。这个项目核心解决的是私有云基础设施的可复现性与可观测性问题。它不追求炫酷的UI或新潮的AI集成而是聚焦在最基础也最关键的环节如何让一套OpenStack环境在不同硬件批次、不同内核版本、不同网络拓扑下都能以确定性的方式完成初始化并在运行中暴露出真实瓶颈而非掩盖问题。关键词里的“iass”Infrastructure as Software是关键提示——它强调基础设施本身必须具备软件工程级别的可测试、可回滚、可版本化能力而不是一堆手动敲出来的配置文件堆砌。适合谁来参考如果你正面临以下任一场景这篇内容就是为你写的你刚完成第一次OpenStack部署但发现节点重启后服务起不来日志里全是“connection refused”却找不到源头你的团队在用Ansible或Terraform自动化部署但每次升级OpenStack版本都得重写80%的playbook你在排查虚拟机无法获取IP的问题查了DHCP agent、查了neutron-server、查了ovs流表最后发现是物理交换机上一个被遗忘的STP端口阻塞你想知道为什么官方文档推荐用devstack做开发测试却严禁它出现在生产环境——背后的约束条件到底是什么。这不是一篇“手把手教你安装”的入门指南而是一份来自多次踩坑现场的结构化复盘。接下来的内容将完全围绕“第二次搭建”这一特定情境展开拆解那些第一次部署时被忽略、但第二次必须直面的核心矛盾。2. 整体设计思路为什么必须放弃“一键脚本”转向分层验证模型2.1 第一次失败教会我的三件事第一次搭建openstack-iass时我用了某社区广为流传的“All-in-One一键脚本”。它确实5分钟就拉起了dashboard连虚拟机都成功ping通了外网。但两周后当我在控制节点执行apt upgrade并重启服务时整个环境彻底瘫痪。排查过程持续了36小时最终定位到三个根本性问题时间同步被静默破坏脚本默认关闭了chrony服务改用systemd-timesyncd而后者在虚拟化环境中精度不足。当keystone token校验因时间偏差超5分钟失效时所有API请求返回401但日志里没有任何关于时间的警告。数据库连接池配置硬编码脚本把mysql连接数固定设为32而实际环境中nova-conductor和neutron-server并发请求远超此值导致大量连接等待超时表现为“创建实例卡在building状态”。网络命名空间隔离被绕过脚本为简化操作直接在host namespace里配置br-ex桥接跳过了qrouter命名空间。这导致外部流量能进不能出——因为SNAT规则只存在于qrouter里而host namespace根本没有该规则。这三点共同指向一个结论任何牺牲可观察性换取部署速度的方案都会在第二次迭代时付出指数级的调试成本。因此“二”的设计起点就是建立一套分层验证模型把基础设施拆解为四个可独立测试、可量化评估的层级L0 硬件与内核层验证CPU虚拟化支持、内存大页分配、内核模块加载状态L1 网络基础层验证物理链路连通性、VLAN透传能力、MTU一致性L2 服务依赖层验证数据库连接池健康度、消息队列吞吐量、证书有效期L3 OpenStack功能层验证各服务API响应时间、资源配额生效逻辑、镜像上传完整性。提示不要试图在单个脚本里完成全部验证。我现在的做法是每个层级对应一个独立的shell脚本如l1-network-check.sh执行后生成JSON格式的检测报告。这样当问题出现时我能直接定位到是L1还是L2层先告警避免无头苍蝇式排查。2.2 工具链选型为什么放弃DevStack选择Kolla-Ansible作为基线社区常把DevStack称为“OpenStack的Hello World”但它本质上是个开发调试工具而非部署框架。它的设计哲学是“最小可行环境”为此牺牲了三样生产必需品配置隔离缺失所有服务共享同一套配置目录修改一个参数可能意外影响其他服务无状态假设错误它假设宿主机是干净的但现实中服务器往往预装了监控代理、安全加固模块这些会与DevStack的iptables规则冲突升级路径不存在DevStack没有版本迁移机制从Rocky升级到Stein意味着重装而你的自定义配置全丢了。相比之下Kolla-Ansible采用容器化部署模式天然具备配置隔离优势。更重要的是它把OpenStack服务拆分为标准Docker镜像如kolla/ubuntu-source-nova-api:zed每个镜像只包含该服务及其最小依赖。这意味着配置变更通过Ansible变量注入不会污染镜像升级只需替换镜像标签并重新部署旧配置自动继承故障时可直接进入容器执行ps aux或netstat -tuln无需在宿主机上找服务进程。但Kolla-Ansible也有陷阱它的默认配置面向大规模集群对单节点测试环境过于厚重。因此我的“二”版方案做了关键裁剪关闭所有高可用组件keepalived、haproxy、etcd将所有服务容器绑定到localhost127.0.0.1避免暴露不必要的端口使用SQLite替代MySQL作为临时数据库规避数据库连接池配置难题用kolla-build本地构建镜像而非拉取远程镜像确保构建环境与运行环境一致。这种“裁剪式使用”不是妥协而是对工具本质的尊重——Kolla-Ansible的价值在于其配置管理能力而非容器编排能力。我们只取其长避其短。2.3 网络架构重构从“能通”到“可知”的质变第一次搭建时我满足于“虚拟机能ping通百度”。第二次我要求网络必须满足三个可观测性指标路径可追踪从虚拟机内部traceroute到外网IP每一跳的设备、端口、VLAN ID必须明确流量可捕获在任意网络节点br-int、br-ex、qrouter上能用tcpdump抓到指定虚拟机的原始数据包策略可验证安全组规则必须能映射到具体的iptables链和规则序号且能通过iptables -C命令实时验证。为实现这点我彻底重构了网络拓扑物理网卡不再直接桥接到br-ex而是先经过一个Linux bridgebr-phy再由br-phy连接br-ex所有OpenStack创建的bridgebr-int、br-ex均启用STP协议并设置priority为4096避免与物理交换机产生环路在br-phy上配置tc qdisc add dev br-phy root handle 1: htb default 30为后续QoS测试预留接口每个qrouter命名空间内运行ip link add name veth-debug type veth peer name veth-host将veth-host接入host namespace专门用于抓包。这套设计带来的直接收益是当虚拟机无法上网时我不再需要猜“是DHCP没给IP还是路由没配好还是NAT没生效”而是按顺序执行ip netns exec qrouter-xxx ip a→ 查看qrouter内网口是否UPip netns exec qrouter-xxx tcpdump -i qr-xxx icmp→ 确认ICMP请求是否到达qroutertcpdump -i br-ex icmp→ 确认SNAT后的包是否发出ovs-ofctl dump-flows br-ex | grep actionsnormal→ 验证br-ex是否正确转发。注意很多教程教你在br-ex上直接配置IP这是危险操作。br-ex应该纯粹作为数据平面所有控制平面IP如管理IP、浮动IP必须配置在qrouter或qdhcp命名空间内。否则当qrouter重启时br-ex上的IP会消失导致管理网络中断。3. 核心细节解析L0-L3四层验证的实操要点与参数依据3.1 L0 硬件与内核层那些被忽略的底层约束很多人认为OpenStack对硬件要求宽松只要CPU支持VT-x即可。但实际部署中L0层的微小偏差会引发L3层的灾难性故障。以下是我在“二”版中强制验证的七项指标每项都有明确的量化阈值和失效后果检测项验证命令合格阈值失效后果实测案例CPU虚拟化支持egrep -c (vmxsvm) /proc/cpuinfo≥1nova-compute无法启动报错libvirtError: internal error: Unable to initialize network内存大页分配cat /proc/meminfo | grep HugePagesHugePages_Total 0且HugePages_Free ≈ HugePages_Total虚拟机启动缓慢内存分配失败率超15%默认未启用需在grub中添加default_hugepagesz1G hugepagesz1G hugepages8内核模块加载lsmod | grep -E (kvmkvm_intelvfiovfio_iommu_type1)网络中断亲和性cat /proc/interrupts | grep eth0 | wc -l≥2个CPU core处理中断网络吞吐量低于理论值30%延迟抖动大单core处理所有中断通过smp_affinity_list绑定到多核时间同步精度chronyc tracking | grep Last offsetLast offset ±5mskeystone token频繁失效API批量请求失败NTP服务器响应延迟高改用chrony pool替代单一NTP源文件系统类型df -T / | awk NR2 {print $2}xfs或ext4非btrfs/zfsglance镜像上传失败报错Operation not supported某云厂商默认分配btrfs需重装系统SELinux状态getenforceDisabled或Permissivehttpd服务无法绑定80端口dashboard白屏生产环境常开启Enforcing需配置seboolsetsebool -P httpd_can_network_connect on特别强调内存大页配置的实操细节OpenStack默认使用2MB大页但现代服务器普遍支持1GB大页。实测表明启用1GB大页后虚拟机内存分配延迟降低67%且大幅减少TLB miss。配置步骤如下编辑/etc/default/grub在GRUB_CMDLINE_LINUX中添加default_hugepagesz1G hugepagesz1G hugepages8运行update-grub reboot验证grep -i huge /proc/meminfo应显示HugePages_Total: 8在nova.conf中配置[DEFAULT] mem_stats_interval 60 [libvirt] hugepages True hugepage_size 1GB实操心得不要在运行中动态分配大页echo 8 /proc/sys/vm/nr_hugepages看似可行但会导致内核内存碎片化后续分配失败。必须在启动时静态预留。3.2 L1 网络基础层物理链路的确定性验证L1层的验证目标是确保物理网络不引入任何不可控变量。我设计了一套“三步封堵法”逐层排除物理层干扰第一步链路层隔离验证在控制节点和计算节点间建立专用测试链路不经过生产交换机使用iperf3进行基准测试# 控制节点执行 iperf3 -s -p 5201 -i 1 -t 60 # 计算节点执行 iperf3 -c control_ip -p 5201 -i 1 -t 60 -P 4合格标准带宽波动5%排除网卡驱动bug丢包率0排除网线/光模块质量问题延迟抖动0.5ms排除交换机QoS策略干扰。第二步VLAN透传验证OpenStack的provider network依赖VLAN透传。传统方法用vconfig创建子接口测试但存在兼容性问题。我改用更底层的ip link命令# 在控制节点创建VLAN设备 ip link add link eth0 name eth0.100 type vlan id 100 ip addr add 192.168.100.1/24 dev eth0.100 ip link set eth0.100 up # 在计算节点执行相同操作IP设为192.168.100.2 # 然后测试 ping -c 5 192.168.100.1关键点必须用ip link而非vconfig因为后者在较新内核中已被废弃且不支持802.1ad双层VLAN。第三步MTU一致性验证OpenStack网络链路涉及多个MTU层级物理网卡→Linux bridge→OVS bridge→qrouter namespace→虚拟机网卡。任一环节MTU不一致都会导致大包分片失败。我的验证脚本会自动检测所有环节# 获取所有网络设备MTU for dev in $(ip -br link show \| awk {print $1}); do mtu$(ip link show $dev \| grep mtu \| awk {print $5}) echo $dev: $mtu done | sort -k2,2n合格标准所有设备MTU必须严格相等通常设为1500。若使用VXLAN需统一设为1450减去50字节VXLAN头。注意很多教程建议在br-ex上设置MTU这是错误的。br-ex是数据平面不应配置IP因此无需设置MTU。MTU应配置在qrouter内的qr-xxx接口上通过neutron port-update命令实现。3.3 L2 服务依赖层数据库与消息队列的健康度建模L2层的核心矛盾是服务依赖组件的性能拐点往往早于OpenStack自身瓶颈。例如当MySQL连接数达到200时nova-api响应时间开始指数增长但此时MySQL的CPU使用率仅30%。因此我建立了服务依赖健康度模型用三个维度量化连接池饱和度SHOW STATUS LIKE Threads_connected/max_connections查询延迟分布用pt-query-digest分析slow log关注P95延迟消息积压深度rabbitmqctl list_queues name messages_ready messages_unacknowledged。针对MySQL我放弃了默认的max_connections151而是根据公式动态计算max_connections (物理内存GB × 1024) ÷ (每个连接平均内存MB) 50实测每个nova-api连接平均消耗8MB内存因此16GB内存服务器应设为(16 × 1024) ÷ 8 50 2098。但为防突发流量我保守设为1500。更关键的是连接池配置。OpenStack各服务使用不同连接池Nova使用oslo.db配置在nova.conf中[database] max_retries 10 retry_interval 1 max_overflow 50 pool_size 50Neutron使用SQLAlchemy配置在neutron.conf中[database] max_retries 10 retry_interval 1 max_overflow 20 pool_size 20这里有个易错点pool_size是连接池初始大小max_overflow是超出池大小后允许创建的额外连接数。总连接数上限 pool_size max_overflow。若设为pool_size50, max_overflow50则最多100连接但max_connections需≥100否则MySQL拒绝新连接。对于RabbitMQ我禁用了默认的guest用户创建专用用户rabbitmqctl add_user openstack password123 rabbitmqctl set_permissions openstack .* .* .* rabbitmqctl set_user_tags openstack administrator并配置rabbitmq.confdefault_user openstack default_pass password123 loopback_users.guest false实操心得不要在生产环境使用guest用户RabbitMQ 3.8默认禁止guest用户从远程登录但很多旧教程仍沿用导致neutron-server启动失败报错AMQP connection failed。3.4 L3 OpenStack功能层API响应时间的黄金分割点L3层的验证不再关注“能否工作”而是“多快才算正常”。我定义了OpenStack API响应时间的黄金分割点P50 200ms用户无感知延迟P90 500ms可接受的轻微卡顿P95 1000ms必须优化否则影响用户体验。为获取真实数据我编写了api-benchmark.py脚本模拟典型操作import time import requests from concurrent.futures import ThreadPoolExecutor def test_nova_boot(): start time.time() # 调用nova API创建实例 resp requests.post( http://controller:8774/v2.1/servers, headers{X-Auth-Token: token}, json{server: {name: test, imageRef: ..., flavorRef: ...}} ) return time.time() - start # 并发10个请求统计P50/P90/P95 with ThreadPoolExecutor(max_workers10) as executor: times list(executor.map(test_nova_boot, range(100))) times.sort() print(fP50: {times[49]:.3f}s, P90: {times[89]:.3f}s, P95: {times[94]:.3f}s)实测发现影响P95的关键因素是镜像缓存机制。默认情况下glance将镜像存储在本地文件系统每次创建实例都要复制镜像到计算节点。我改为启用qemu-img convert的copy-on-write机制# 在glance-api.conf中 [glance_store] stores file,http default_store file filesystem_store_datadir /var/lib/glance/images/ # 启用镜像缓存 image_cache_dir /var/lib/glance/image-cache/并在nova.conf中配置[libvirt] images_type rbd # 若用Ceph否则用qcow2 images_rbd_pool images提示不要盲目启用rbd后端若未部署Cephnova-compute会启动失败。先确认rbd --version能正常执行再配置。4. 实操过程从零开始的“二”版部署全流程记录4.1 环境准备操作系统与基础服务的确定性配置我选用Ubuntu 22.04 LTS作为基线操作系统原因有三内核版本5.15长期支持至2032年避免频繁升级内核带来的兼容性风险systemd-resolved默认启用解决DNS解析超时问题OpenStack服务对DNS延迟极其敏感apt源默认启用universe仓库无需额外配置即可安装kolla-ansible。部署前执行标准化环境初始化# 1. 禁用swapOpenStack禁止swap sudo swapoff -a sudo sed -i /swap/d /etc/fstab # 2. 配置chrony时间同步使用国内NTP源 sudo apt install chrony -y sudo tee /etc/chrony/chrony.conf EOF pool ntp.aliyun.com iburst keyfile /etc/chrony/chrony.keys driftfile /var/lib/chrony/chrony.drift logdir /var/log/chrony EOF sudo systemctl restart chrony # 3. 配置内核参数优化网络栈 echo net.ipv4.ip_forward1 net.ipv4.conf.all.rp_filter0 net.ipv4.conf.default.rp_filter0 net.bridge.bridge-nf-call-iptables1 net.bridge.bridge-nf-call-ip6tables1 | sudo tee -a /etc/sysctl.conf sudo sysctl -p # 4. 安装基础依赖 sudo apt update sudo apt install python3-dev libffi-dev gcc libssl-dev -y关键点在于时间同步配置。很多故障源于NTP服务器响应慢导致chrony进入burst模式反而加剧时间漂移。我改用pool指令替代server让chrony自动选择最优NTP源并添加iburst参数加速初始同步。4.2 Kolla-Ansible部署从镜像构建到服务启动的完整链路“二”版部署摒弃了kolla-ansible deploy一键式命令改为分步执行确保每一步都可验证步骤1安装Kolla-Ansible# 创建虚拟环境避免污染系统Python python3 -m venv /opt/kolla-venv source /opt/kolla-venv/bin/activate pip install -U pip pip install kolla-ansible14.4.0 # Zed版本稳定可靠步骤2生成密码文件kolla-genpwd # 修改admin_password为强密码确保长度≥12位含大小写字母数字符号步骤3配置全局变量编辑/etc/kolla/globals.ymlkolla_base_distro: ubuntu kolla_install_type: source openstack_release: zed kolla_internal_vip_address: 10.0.0.100 # VIP用于HA单节点可设为任意未用IP network_interface: eth0 neutron_external_interface: eth1 # 对外网络接口 enable_haproxy: no enable_keepalived: no enable_etcd: no # 数据库使用SQLite单节点测试 mariadb_enabled: no sqlite_enabled: yes # 消息队列使用RabbitMQ rabbitmq_enabled: yes步骤4构建本地镜像# 下载kolla源码 git clone https://opendev.org/openstack/kolla cd kolla # 构建所有服务镜像耗时约40分钟 kolla-build --registry localhost:4000 --push ubuntu source # 镜像推送到本地registry避免网络拉取失败步骤5执行部署# 预检 kolla-ansible prechecks -i /etc/kolla/inventory/all-in-one # 部署跳过证书生成用默认自签名 kolla-ansible deploy -i /etc/kolla/inventory/all-in-one --skip-tags generate_certs # 验证 kolla-ansible post-deploy -i /etc/kolla/inventory/all-in-one部署完成后关键验证点docker ps | grep -E (nova|neutron|keystone)应显示所有容器状态为Upsource /etc/kolla/admin-openrc.sh openstack token issue应返回有效tokenopenstack image list应返回空列表说明glance服务正常只是暂无镜像。实操心得--skip-tags generate_certs是关键。Kolla-Ansible默认生成的证书有效期仅30天且证书CN必须匹配VIP。在测试环境中用自签名证书更可控。生产环境再启用正式CA。4.3 网络与镜像配置让虚拟机真正“活”起来部署完成后环境只是“通电”还需赋予它“生命”——即网络和镜像。网络配置# 创建provider网络flat模式 openstack network create --share --external \ --provider-physical-network provider \ --provider-network-type flat provider-net # 创建子网 openstack subnet create --network provider-net \ --allocation-pool start10.0.0.100,end10.0.0.200 \ --dns-nameserver 114.114.114.114 \ --gateway 10.0.0.1 \ provider-subnet # 创建内部网络self-service openstack network create selfservice-net openstack subnet create --network selfservice-net \ --subnet-range 172.16.1.0/24 \ --gateway 172.16.1.1 \ selfservice-subnet # 创建路由器并连接 openstack router create provider-router openstack router set --external-gateway provider-net provider-router openstack router add subnet provider-router selfservice-subnet镜像上传下载Cirros最小化镜像30MB启动快适合测试wget http://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img openstack image create cirros \ --file cirros-0.6.2-x86_64-disk.img \ --disk-format qcow2 --container-format bare \ --public安全组配置# 允许ICMP和SSH openstack security group rule create --proto icmp default openstack security group rule create --proto tcp --dst-port 22 default此时执行openstack server create --image cirros --flavor m1.tiny \ --network selfservice-net --security-group default test-vm等待约30秒然后openstack server list # 状态应为ACTIVE openstack console url show test-vm # 获取VNC控制台URL注意若状态卡在BUILD检查nova-compute日志docker logs kolla_nova_compute。常见原因是libvirt未正确配置需确认/etc/libvirt/qemu.conf中user libvirt-qemu已取消注释。4.4 四层验证执行用脚本自动化检测结果部署完成后立即执行四层验证脚本validate-openstack.sh#!/bin/bash # L0: 硬件层 echo L0 Hardware Validation echo CPU VT-x: $(egrep -c (vmx|svm) /proc/cpuinfo) echo HugePages: $(cat /proc/meminfo | grep HugePages_Total | awk {print $2}) # L1: 网络层 echo L1 Network Validation echo br-ex exists: $(ip link show br-ex /dev/null echo YES || echo NO) echo qrouter namespace: $(ip netns list | grep qrouter | wc -l) # L2: 服务层 echo L2 Service Validation echo MySQL connections: $(mysql -u root -e SHOW STATUS LIKE Threads_connected 2/dev/null | tail -1 | awk {print $2}) echo RabbitMQ queues: $(rabbitmqctl list_queues 2/dev/null | wc -l) # L3: 功能层 echo L3 Function Validation source /etc/kolla/admin-openrc.sh echo Keystone token: $(openstack token issue 2/dev/null | grep id | wc -l) echo Glance images: $(openstack image list 2/dev/null | wc -l)执行结果示例 L0 Hardware Validation CPU VT-x: 8 HugePages: 8 L1 Network Validation br-ex exists: YES qrouter namespace: 1 L2 Service Validation MySQL connections: 12 RabbitMQ queues: 15 L3 Function Validation Keystone token: 1 Glance images: 1所有输出均为预期值表示环境健康。5. 常见问题与排查技巧实录那些文档里不会写的真相5.1 问题速查表高频故障的精准定位路径现象可能原因定位命令解决方案openstack token issue返回401Keystone认证失败docker logs kolla_keystone检查/etc/kolla/config/keystone/keystone.conf中[token] provider是否为fernet且fernet_keys目录权限正确虚拟机状态卡在BUILDNova调度失败docker logs kolla_nova_scheduler检查nova-manage cell_v2 discover_hosts是否执行确认计算节点已注册到cell虚拟机无法获取IPDHCP agent异常openstack network agent list | grep dhcp重启kolla_neutron_dhcp容器检查/var/lib/neutron/dhcp/目录是否存在浮动IP无法访问SNAT规则缺失ip netns exec qrouter-xxx iptables -t nat -L POSTROUTING检查neutron l3-agent是否运行确认/etc/neutron/l3_agent.ini中agent_mode dvr_snatDashboard白屏Horizon静态文件缺失docker logs kolla_horizon进入容器执行python3 manage.py collectstatic --noinput确认/usr/share/openstack-dashboard/static/已生成特别提醒浮动IP问题这是新手最高频的故障。根源在于qrouter命名空间内的SNAT规则未生效。正确排查路径openstack router show provider-router→ 获取router_idip netns exec qrouter-router_id ip a→ 确认qr-xxx接口UP且有IPip netns exec qrouter-router_id iptables -t nat -L POSTROUTING→ 查看是否有MASQUERADE规则若无规则执行neutron router-gateway-clear provider-router再neutron router-gateway-set provider-router provider-net触发规则重建。5.2 独家避坑技巧来自血泪教训的三条铁律铁律一永远不要在生产环境修改/etc/kolla下的配置文件Kolla-Ansible的设计哲学是“配置即代码”所有配置必须通过Ansible变量管理。我曾为快速修复一个SSL问题直接编辑/etc/kolla/config/horizon/local_settings.py结果下次kolla-ansible deploy时该文件被覆盖导致Horizon彻底崩溃。正确做法是在/etc/kolla/config/horizon/下创建local_settings.py.j2模板在globals.yml中定义变量horizon_custom_settings: {...}通过Jinja2模板渲染生成配置。铁律二数据库备份必须包含/var/lib/mysql的完整目录很多教程教用mysqldump备份但这只能备份数据无法恢复表结构权限。OpenStack的MySQL包含大量系统表如mysql.usermysqldump不导出它们。正确备份命令# 停止所有服务 kolla-ansible stop -i /etc/kolla/inventory/all-in-one # 归档整个目录 tar -czf mysql-backup-$(date %F).tar.gz /var/lib/mysql # 启动服务 kolla-ansible start -i /etc/kolla/inventory/all-in-one铁律三网络故障时第一反应不是查OpenStack而是查物理交换机我曾为排查一个“虚拟机无法上网”问题耗时18小时最终发现是物理交换机上一个端口被管理员手动shutdown。此后
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑