PVE虚拟机安装MongoDB 8通用解决方案

闲聊引入

最近想学习mongodb,之前安装overleaf的时候,安装mongodb的容器但无法启动,因为我的N5105不支持AVX,导致虚拟机中无法运行,最后只能使用mongodb 5以下的版本。
后来更换了11600T的U,正常支持了,所以这一次安装一下。安装的教程我会给出来连接,大家照着弄就好了。没什么难的。

问题定位

如何定位是CPU问题

在PVE平台上安装MongoDB 8时,如果遇到启动失败或服务无法运行的问题,通过查看报错日志,多数情况是由于 CPU兼容性问题 所致。
日志如下:

Nov 28 00:13:16 debianSmall systemd[1]: Started mongod.service - MongoDB Database Server.
Nov 28 00:13:16 debianSmall systemd[1]: mongod.service: Main process exited, code=killed, status=4/ILL
Nov 28 00:13:16 debianSmall systemd[1]: mongod.service: Failed with result 'signal'.

一般的报错都是这个样子:
status=4/ILL 这个基本就是CPU类型导致的问题。

检查主机CPU是否支持AVX指令集

MongoDB 8需要依赖AVX指令集等现代CPU特性,首先需要确认主机CPU是否支持这些指令集。

通过命令行查询CPU支持的指令集

在主机上运行以下命令,检查CPU是否支持avxavx2

cat /proc/cpuinfo | grep flags

看是否包含avx,avx2 之类的字样,如果有的话,就代表支持,那么我们以下的方法都可以用,如果没有,只能像我的N5105一样,使用mongodb 5以下版本即可。

通过CPU官方资料查询支持情况

去CPU官网(如Intel或AMD官方网站)查找CPU型号规格,会查到明确的信息是否支持avx等指令集。

无法安装MongoDB 8的原因

从MongoDB 5开始,对CPU指令集的要求提高,引入了对SSE4.2、AVX、AVX2等现代指令集。因此:

  • 如果主机CPU不支持AVX指令集:MongoDB 8及更高版本将无法运行。
  • 解决办法:如果CPU无法满足要求,只能退回到MongoDB 5以下的版本(如MongoDB 4.4),这些版本对CPU指令集没有AVX的要求。

解决方案

CPU支持AVX的两种方案

方法1:将在pve中修改虚拟机CPU类型修改为host

通过命令行去修改

这里面的VMID是你的PVE虚拟机的ID,在管理界面都能看得到。

vi /etc/pve/qemu-server/<VMID>.conf
将CPU类型修改为:cpu: host
qm restart <VMID>
管理界面修改
  • 选择目标虚拟机,进入Hardware > Processor>修改CPU类型
重启虚拟机

方法2:通过自定义CPU模型实现支持

自定义CPU模型可以选择性地暴露必要的指令集,兼顾兼容性和性能。这个方法我找了好久才找到的,网上常见的解决方案都是上面那一种,改host完事,优点是操作简单,性能更好,不足之处是改host迁移虚拟机的时候,可有会遇到问题,虚拟CPU中kvm64是兼容性最好的,所以还是坚持使用虚拟机来解决。

定义新的CPU模型: 编辑/etc/pve/virtual-guest/cpu-models.conf文件,添加如下内容:
cpu-model: x86-64-v2-AES-AVX
    flags +avx;+avx2;+xsave;+aes;+popcnt;+ssse3;+sse4_1;+sse4_2
    phys-bits host
    hidden 0
    hv-vendor-id proxmox
    reported-model kvm64
管理界面修改CPU类型为自定义的x86-64-v2-AES-AVX
  • 选择目标虚拟机,进入Hardware > Processor>修改CPU类型
重启虚拟机

正常启动的mongodb日志

sudo systemctl status mongod
● mongod.service - MongoDB Database Server
     Loaded: loaded (/lib/systemd/system/mongod.service; enabled; preset: enabled)
     Active: active (running) since Thu 2024-11-28 00:49:36 PST; 4h 21min ago
       Docs: https://docs.mongodb.org/manual
   Main PID: 595 (mongod)
     Memory: 238.0M
        CPU: 1min 2.068s
     CGroup: /system.slice/mongod.service
             └─595 /usr/bin/mongod --config /etc/mongod.conf

Nov 28 00:49:36 debianSmall systemd[1]: Started mongod.service - MongoDB Database Server.
Nov 28 00:49:37 debianSmall mongod[595]: {"t":{"$date":"2024-11-28T08:49:37.766Z"},"s":"I",  "c":"CONTROL",  "id":7484500, "ctx":"main","msg":"Environment v>

具体的一些开机启动设置,在参考链接中都有,第2个链接中的安装教程都有详细说明,我这边就不多写了。

总结

针对PVE 8中的虚拟机安装MongoDB 8的通用解决方案:

  • CPU不支持AVX指令集:降级到MongoDB 5以下版本,如MongoDB 4.4。
  • CPU支持AVX指令集:有两种方法可以解决:
    1. 修改虚拟机的CPU类型为host
    2. 通过自定义CPU模型配置,显式启用AVX、AVX2等指令集。

这两种方法都可以解决MongoDB 8在虚拟机中运行的CPU兼容性问题,具体选择取决于虚拟化环境和兼容性需求。

参考链接

  1. CPU with AVX support 这个是找到自定义CPU的pve论坛的帖子
  2. Install MongoDB Community Edition on Debian 这是在debian12中安装mongodb的指南

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇