devstack重启恢复方案

这是一个非常实际且关键的问题!我们来一步步分析 "物理主机关机 → 重启"嵌套虚拟机 + DevStack 的影响,并给出完整的恢复操作指南。


🧩 场景回顾

  • 物理主机(Host) :运行 Linux(如 Ubuntu)
  • 虚拟机(VM) :在 Host 上通过 KVM/QEMU、VirtualBox 或 VMware 创建
  • DevStack:部署在该 VM 内部(单节点 OpenStack 开发环境)

✅ 典型拓扑:
你的笔记本/服务器KVM 虚拟机 (192.168.122.30)DevStack (Keystone/Nova/Neutron...)


🔌 一、关机对各层的影响

组件 关机时状态 开机后状态 是否自动恢复
物理主机 正常关机 需手动开机
虚拟机(VM) 被强制断电(除非优雅关机) 默认不会自动启动 ❌(需配置)
DevStack 服务 进程被 kill 不会自动启动(即使 VM 启动) ❌(需手动或配置 systemd)

⚠️ 关键结论
物理机重启后,VM 和 DevStack 都不会自动恢复运行!你需要手动干预。


🛠️ 二、开机后的完整恢复步骤

✅ 步骤 1:启动虚拟机(VM)

情况 A:你使用 libvirt/KVM(virsh)

python 复制代码
# 查看 VM 状态
virsh list --all

# 启动 VM(假设名字是 devstack-vm)
virsh start devstack-vm

# (可选)设置开机自启(推荐!)
virsh autostart devstack-vm

💡 autostart 会让 VM 在 物理机启动后自动运行(但 DevStack 服务仍需单独处理)。

情况 B:你使用 VirtualBox

bash 复制代码
VBoxManage startvm "devstack-vm" --type headless

情况 C:你使用 VMware Workstation / ESXi

  • 手动点击"开机"
  • 或在 ESXi 中设置"随主机启动"

✅ 步骤 2:登录虚拟机,检查 DevStack 服务状态

perl 复制代码
ssh stack@192.168.122.30  # 或你的 VM IP

检查 systemd 服务(现代 DevStack 默认方式):

perl 复制代码
# 查看所有 DevStack 服务状态
systemctl list-units | grep devstack

# 检查 Keystone 是否运行
systemctl is-active devstack@keystone

❌ 如果返回 inactive,说明服务未启动。


✅ 步骤 3:启动 DevStack 服务

方式 A:如果你使用 systemd 模式(推荐)

只需启动所有 DevStack 服务:

perl 复制代码
# 启动所有 DevStack 服务
sudo systemctl start 'devstack@*'

# 验证
systemctl status devstack@keystone devstack@nova-api

✅ 优势:服务会按依赖顺序启动,日志可通过 journalctl 查看。

方式 B:如果你使用 传统模式(非 systemd)

需要重新运行 DevStack 脚本:

bash 复制代码
cd ~/devstack
./rejoin-stack.sh   # 重新 attach 到已存在的服务(如果支持)
# 或
./stack.sh          # 重新完整部署(较慢,但可靠)

⚠️ 注意:./stack.sh 会重建数据库和网络,可能导致之前创建的虚拟机丢失!


✅ 步骤 4:验证 OpenStack 功能

bash 复制代码
source ~/devstack/openrc admin admin

# 测试认证
openstack token issue

# 查看虚拟机(如果之前有)
openstack server list

# 访问 Dashboard
curl -s http://localhost:8080/dashboard | head -5

🔄 三、如何实现"全自动恢复"?(高级建议)

如果你希望 物理机重启后,VM 和 DevStack 全自动恢复,可以这样做:

1. 让 VM 开机自启

  • KVM/libvirtvirsh autostart devstack-vm
  • VirtualBox:需写 systemd 服务或 cron job
  • VMware:在虚拟机设置中启用"随主机启动"

2. 让 DevStack 服务随 VM 启动

在 VM 内部执行:

bash 复制代码
# 启用所有 DevStack 服务的开机自启
sudo systemctl enable 'devstack@*'

✅ 这样,VM 启动后,systemd 会自动拉起 Keystone、Nova、Neutron 等服务。

3. (可选)添加健康检查脚本

创建一个监控脚本 /usr/local/bin/check-devstack.sh

bash 复制代码
#!/bin/bash
if ! systemctl is-active --quiet devstack@keystone; then
    sudo systemctl start 'devstack@*'
fi

并通过 cron 每分钟检查一次。


⚠️ 四、注意事项与风险

风险 说明 建议
IP 变更 VM 重启后 IP 可能变化(如果 DHCP) 使用静态 IP 或更新 local.conf 中的 HOST_IP
数据库损坏 强制断电可能导致 MariaDB 损坏 尽量优雅关机;定期备份 /opt/stack/data/
网络重置 Neutron 的 Linux Bridge/OVS 可能需重建 DevStack 通常能自动恢复,若不行则 ./stack.sh
资源不足 物理机内存不足导致 VM 无法启动 确保 Host 有足够资源(建议 ≥16GB RAM)

ip变更问题解决

针对ip可能变化,做了以下配置 在 libvirt/KVM 中绑定 MAC → IP(适合 KVM 用户)

步骤 1:获取 VM 的 MAC 地址

perl 复制代码
virsh dumpxml devstack-vm | grep "mac address" # 输出:<mac address='52:54:00:a1:b2:c3'/>

步骤 2:编辑 libvirt 网络配置(通常是 default 网络)

arduino 复制代码
virsh net-edit default

<ip> 段内添加 <host> 条目:

xml 复制代码
<network> <name>default</name> <bridge name='virbr0'/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> <!-- 添加这一行 --> <host mac='52:54:00:a1:b2:c3' ip='192.168.122.30'/> </dhcp> </ip> </network>

步骤 3:重启网络

sql 复制代码
virsh net-destroy default virsh net-start default

📌 五、最佳实践总结

操作 命令/配置
1. VM 开机自启 virsh autostart devstack-vm
2. DevStack 服务自启 sudo systemctl enable 'devstack@*'
3. 启用 journald 持久化 sudo mkdir -p /var/log/journal
4. 使用静态 IP 在 VM 网络配置中固定 IP
5. 关机前优雅停止 在 VM 中执行 ./unstack.sh(可选但推荐)

💡 理想流程

物理机关机 → VM 自动保存状态(或优雅关机)→ 物理机开机 → VM 自动启动 → DevStack 服务自动恢复 → 一切如常!


✅ 最终答案

物理服务器关机再开机后:

  1. 虚拟机不会自动启动 (除非你配置了 autostart

  2. DevStack 服务不会自动运行(即使 VM 启动了)

  3. 你需要手动:

    • 启动虚拟机
    • 在 VM 中启动 DevStack 服务(sudo systemctl start 'devstack@*'
  4. 为避免每次手动操作,建议配置:

    • VM 开机自启
    • DevStack 服务开机自启

这样,重启物理机后,DevStack 环境就能"无缝恢复"了!

相关推荐
哈里谢顿3 小时前
openstack 中的二层网络跟三层网络范围对比
openstack
哈里谢顿4 小时前
devstack中的systemd管理介绍
openstack
哈里谢顿6 小时前
在远程服务器上部署 DevStack 后如何访问 Horizon Dashboard?
openstack
哈里谢顿1 天前
使用devstack部署openstack
openstack
忧思幽释1 天前
Mariadb Galera集群在Openstack中的应用
wpf·openstack·mariadb
阿干tkl1 天前
本地源方式安装开源 OpenStack (V版本)
开源·openstack
孪生质数-2 天前
Ansible基础入门
服务器·自动化·ansible·openstack
阿干tkl7 天前
CentOS Stream 8 通过 Packstack 安装开源OpenStack(V版本)
openstack
28的博客8 天前
CentOS 7 通过 Packstack 安装 OpenStack Train 完整步骤
云计算·openstack·平台即服务