Proxmox 集群文件系统(“pmxcfs”)是一个数据库驱动的文件系统,用于存储配置文件,使用corosync实时复制到所有集群节点。我们用它来存储所有 Proxmox VE 相关的配置文件。
尽管文件系统将所有数据存储在磁盘上的持久数据库内,但数据的副本驻留在 RAM 中。这对最大大小施加了限制,目前为 128 MiB。这仍然足以存储数千个虚拟机的配置。
该系统具有以下优点:
-
所有配置实时无缝复制到所有节点
-
提供强一致性检查以避免重复的 VM ID
-
当节点失去仲裁时只读
-
自动更新所有节点的 corosync 集群配置
-
包括分布式锁定机制
目录
Toggle6.1. POSIX 兼容性
文件系统基于 FUSE,因此行为类似于 POSIX。但有些功能根本没有实现,因为我们不需要它们:
-
您可以只生成普通文件和目录,但不能生成符号链接,…
-
您无法重命名非空目录(因为这样可以更轻松地保证 VMID 的唯一性)。
-
您无法更改文件权限(权限基于路径)
-
O_EXCL创建不是原子的(就像旧的 NFS)
-
O_TRUNC创建不是原子的(FUSE 限制)
6.2. 文件访问权限
所有文件和目录均由用户root拥有并具有组 www-data。只有 root 有写权限,但www-data组可以读取大多数文件。以下路径下的文件只能由 root 访问:
/etc/pve/priv/ /etc/pve/nodes/${NAME}/priv/
6.3. 技术
我们使用Corosync Cluster Engine进行集群通信,使用SQlite进行数据库文件。文件系统是使用 FUSE在用户空间中实现的。
6.4. 文件系统布局
文件系统安装在:
/etc/pve
6.4.1. 文件
authkey.pub |
票务系统使用的公钥 |
ceph.conf |
Ceph 配置文件(注意:/etc/ceph/ceph.conf 是指向此的符号链接) |
corosync.conf |
Corosync 集群配置文件(在 Proxmox VE 4.x 之前,该文件称为 cluster.conf) |
数据中心配置文件 |
Proxmox VE 数据中心范围的配置(键盘布局、代理……) |
域.cfg |
Proxmox VE 身份验证域 |
防火墙/集群.fw |
防火墙配置应用于所有节点 |
防火墙/<名称>.fw |
各个节点的防火墙配置 |
防火墙/<VMID>.fw |
虚拟机和容器的防火墙配置 |
ha/crm_命令 |
显示 CRM 当前正在执行的 HA 操作 |
ha/manager_status |
有关集群上 HA 服务的 JSON 格式信息 |
公顷/resources.cfg |
高可用性管理的资源及其当前状态 |
节点/<名称>/config |
特定于节点的配置 |
节点/<名称>/lxc/<VMID>.conf |
LXC 容器的虚拟机配置数据 |
节点/<名称>/openvz/ |
Proxmox VE 4.0 之前的版本,用于容器配置数据(已弃用,即将删除) |
节点/<NAME>/pve-ssl.key |
pve-ssl.pem的私有 SSL 密钥 |
节点/<名称>/pve-ssl.pem |
Web 服务器的公共 SSL 证书(由集群 CA 签名) |
节点/<NAME>/pveproxy-ssl.key |
pveproxy-ssl.pem的私有 SSL 密钥(可选) |
节点/<名称>/pveproxy-ssl.pem |
Web 服务器的公共 SSL 证书(链)(可选覆盖pve-ssl.pem) |
节点/<名称>/qemu-server/<VMID>.conf |
KVM VM 的 VM 配置数据 |
priv/authkey.key |
票务系统使用的私钥 |
私有/授权密钥 |
用于身份验证的集群成员的 SSH 密钥 |
私有/ceph* |
Ceph 身份验证密钥和相关功能 |
私有/已知主机 |
用于验证的集群成员的 SSH 密钥 |
隐私/锁定/* |
锁定各种服务使用的文件以确保集群范围内的安全操作 |
priv/pve-root-ca.key |
集群CA私钥 |
priv/shadow.cfg |
PVE Realm 用户的影子密码文件 |
priv/storage/<存储ID>.pw |
包含明文存储的密码 |
priv/tfa.cfg |
Base64 编码的双因素身份验证配置 |
priv/token.cfg |
所有令牌的 API 令牌秘密 |
pve-root-ca.pem |
集群CA的公共证书 |
pve-www.key |
用于生成CSRF令牌的私钥 |
SDN/* |
软件定义网络 (SDN) 的共享配置文件 |
状态.cfg |
Proxmox VE 外部指标服务器配置 |
存储配置文件 |
Proxmox VE 存储配置 |
用户配置文件 |
Proxmox VE 访问控制配置(用户/组/…) |
虚拟访客/cpu-models.conf |
用于存储自定义 CPU 模型 |
vzdump.cron |
集群范围的 vzdump 备份作业计划 |
6.4.2. 符号链接
集群文件系统中的某些目录使用符号链接,以便指向节点自己的配置文件。因此,下表中指向的文件指的是集群的每个节点上的不同文件。
当地的 |
节点/<LOCAL_HOST_NAME> |
长沙 |
节点/<LOCAL_HOST_NAME>/lxc/ |
开放vz |
节点/<LOCAL_HOST_NAME>/openvz/(已弃用,很快删除) |
qemu服务器 |
节点/<LOCAL_HOST_NAME>/qemu-server/ |
6.4.3. 用于调试的特殊状态文件 (JSON)
。版本 |
文件版本(用于检测文件修改) |
.会员 |
有关集群成员的信息 |
.vmlist |
所有虚拟机列表 |
.clusterlog |
集群日志(最后 50 条) |
.rrd |
RRD 数据(最新条目) |
6.4.4. 启用/禁用调试
您可以使用以下命令启用详细系统日志消息:
回声“1”>/etc/pve/.debug
并使用以下命令禁用详细的系统日志消息:
回声“0”>/etc/pve/.debug
6.5. 恢复
如果您的 Proxmox VE 主机出现重大问题,例如硬件问题,复制 pmxcfs 数据库文件 /var/lib/pve-cluster/config.db并将其移动到新的 Proxmox VE 主机可能会有所帮助。在新主机上(没有运行任何东西),您需要停止 pve-cluster服务并替换config.db文件(需要权限 0600)。接下来,根据丢失的 Proxmox VE 主机调整/etc/hostname和/etc/hosts ,然后重新启动并检查(不要忘记您的 VM/CT 数据)。
6.5.1. 删除集群配置
推荐的方法是在从集群中删除节点后重新安装该节点。这可确保所有秘密集群/ssh 密钥和任何共享配置数据都被销毁。
在某些情况下,您可能更愿意将节点放回到本地模式而不重新安装,这在 无需重新安装的情况下分离节点中进行了描述
6.5.2. 从故障节点恢复/移动来宾
对于nodes/<NAME>/qemu-server/(虚拟机)和 nodes/<NAME>/lxc/ (容器)中的来宾配置文件,Proxmox VE 将包含节点<NAME>视为相应来宾的所有者。此概念允许使用本地锁而不是昂贵的集群范围锁来防止并发来宾配置更改。
因此,如果来宾的所属节点发生故障(例如,由于断电、隔离事件等),则无法进行常规迁移(即使所有磁盘都位于共享存储上),因为这样无法获得(离线)所属节点上的本地锁。对于 HA 管理的来宾来说,这不是问题,因为 Proxmox VE 的高可用性堆栈包括必要的(集群范围)锁定和看门狗功能,以确保来宾从受保护的节点正确且自动恢复。
如果非 HA 管理的来宾只有共享磁盘(并且没有其他仅在故障节点上可用的本地资源),则只需将来宾配置文件从 /etc/pve 中的故障节点目录中移动即可进行手动恢复/到在线节点的目录(这会更改来宾的逻辑所有者或位置)。
例如,将 ID 为100的虚拟机从离线节点 1恢复到另一个节点节点 2可以通过在集群的任意成员节点上以 root 身份运行以下命令来实现:
mv /etc/pve/nodes/node1/qemu-server/100.conf /etc/pve/nodes/node2/qemu-server/
在像这样手动恢复来宾之前,请绝对确保发生故障的源节点确实已关闭/隔离。否则mv命令会违反 Proxmox VE 的锁定原则,这可能会产生意想不到的后果。 |
具有本地磁盘(或仅在离线节点上可用的其他本地资源)的来宾无法像这样恢复。要么等待故障节点重新加入集群,要么从备份中恢复此类来宾。 |