Proxmox 集群文件系统(“pmxcfs”)是一个数据库驱动的用于存储配置文件的系统,使用 corosync 实时复制给所有集群节点 。 我们用它来存储所有 PVE 相关的配置文件。

尽管文件系统将所有数据存储在磁盘上一个持久性数据库中,但数据的副本驻留在 RAM 中。 这限制了最大大小,目前为 30MB。 这仍然足以存储数千个虚拟机的配置。

该系统具有以下优点:

  • 将所有配置实时无缝复制到所有节点
  • 提供强一致性检查以避免重复的 VM ID
  • 当节点失去仲裁时只读
  • corosync 集群配置自动更新到所有节点
  • 包括分布式锁定机制

POSIX 兼容性

文件系统基于 FUSE,因此行为类似于 POSIX。 但有些功能根本没有实现,因为我们不需要它们:

  • 你可以只生成普通的文件和目录,但不能生成符号链接,…
  • 你不能重命名非空目录(因为这样更容易,以保证 VM ID 是唯一的)。
  • 您无法更改文件权限(权限基于路径)
  • O_EXCL 创建不是原子的(就像旧的 NFS)
  • O_TRUNC 创建不是原子的(FUSE 限制)

文件访问权限

所有文件和目录都归用户 root 所有 并拥有组 www-data。 只有 root 有写权限,但组 www-data 可以读取大多数文件。 以下路径下的文件:

/etc/pve/priv/
/etc/pve/nodes/${NAME}/priv/


只能通过 root 访问。

技术

我们使用 Corosync 集群引擎的集群通信,和 SQlite 数据库文件。 文件系统是在用户空间实现的,使用 FUSE 。

文件系统布局

文件系统挂载在:

/etc/pve 


文件

Proxmox VE 集群文件系统 (pmxcfs) 介绍_符号链接

符号链接

Proxmox VE 集群文件系统 (pmxcfs) 介绍_配置文件_02

用于调试的特殊状态文件 (JSON)

Proxmox VE 集群文件系统 (pmxcfs) 介绍_配置文件_03

启用/禁用调试

您可以通过以下方式启用详细的系统日志消息:

echo "1" >/etc/pve/.debug


并禁用详细的系统日志消息:

echo "0" >/etc/pve/.debug


恢复

如果您的 Proxmox VE 主机有重大问题,例如硬件问题,仅复制 pmxcfs 数据库文件 /var/lib/pve-cluster/config.db 可能会有所帮助并将其移动到新的 Proxmox VE 主机。 在新主机上(没有任何VM运行),您需要停止 pve-cluster 服务并替换 config.db 文件(需要权限 0600 )。 然后, 根据 丢失 Proxmox VE 主机 /etc/hostname 和 /etc/hosts,然后重新启动并检查。 (不要忘记你的 VM/CT 数据)

删除集群配置

推荐的方法是删除节点后重新安装节点到你的集群。 这确保所有 secret 集群/ssh 密钥和任何共享配置数据被破坏。

在某些情况下,您可能更喜欢将节点放回本地模式,而无需重新安装,这在分离一个节点而不重新安装

从故障节点中恢复或移动Guest

对于 nodes/<NAME>/qemu-server/(VMs) 和 nodes/<NAME>/lxc/(containers),Proxmox VE 将包含节点 <NAME> 视为相应Guest的所有者。 这个概念允许使用本地锁而不是昂贵的集群范围的锁来防止并发Guest配置更改。

因此,如果Guest的拥有节点发生故障(例如,由于电源停电,fencing 事件,..),常规迁移是不可能的(即使所有磁盘位于共享存储上)因为这样的本地锁 (死锁)拥有节点是无法获得的。 这对于 HA 管理的Guest来说不是问题,因为 Proxmox VE 的高可用性堆栈包括必要的(集群范围内的)锁定和看门狗功能,以确保正确从受保护的节点自动恢复Guest。

如果非 HA 管理的Guest只有共享磁盘(并且没有其他本地资源仅在故障节点上配置),手动恢复只需从失败的节点中移动Guest配置文件即可。失败节点的目录中的 /etc/pve/ 到一个在线节点的目录(其改变Guest的逻辑所有者或位置)。

例如,将 ID 为 100 的 VM 从 node1 节点恢复到另一个 node2 节点,使用以下命令在集群的任何成员节点上以 root 登录时执行:

mv /etc/pve/nodes/node1/qemu-server/100.conf /etc/pve/nodes/node2/


在手动恢复这样的Guest之前,请务必确保故障源节点确实被关闭/隔离。 否则 mv 命令 违反了 Proxmox VE 锁定原则,这可能会导致意外结果。

具有本地磁盘(或其他本地资源)的Guest在故障节点上可用)不能像这样恢复。 要么等待失败的节点重新加入集群或从备份中恢复这些Guest。