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

虽然文件系统将所有数据存储在磁盘上的持久数据库中,但数据的副本驻留在RAM中。这对最大大小施加了限制,目前是30MB。这仍然足够存储几千台虚拟机的配置。

该系统具有以下优点:

  • 所有配置实时无缝复制到所有节点。
  • 提供强一致性检查,避免虚拟机id重复。
  • 当节点丢失仲裁时,只读。
  • 自动更新corosync集群配置到所有节点。
  • 包括分布式锁定机制

6.1、POSIX兼容

文件系统基于FUSE.行为就像POSIX。但有些功能根本没有实现,因为我们不需要他们:

  • 你可以只生成普通的文件和目录,而不生产符号链接,…
  • 不能重命名分控目录(因为这样更容易保证VMIDs是唯一的)
  • 您不能更改文件权限(权限基于路径)。
  • O_EXCL创建不是原子性的(如旧的NFS)
  • O_TRUNC创建不是原子的(熔断限制)

6.2、文件访问权限

所有的文件和目录都属于root用户,并拥有组www-data。只有根用户有写权限,但是组www-data可以读取大部分文件。以下路径下的文件:

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

只能用root访问

6.3、技术

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

6.4、文件系统布局

文件系统挂载在:

/etc/pve

6.4.1、文件

corosync.conf Corosync集群配置文件(在Proxmox VE 4之前。这个文件叫做cluster.conf)
storage.cfg Proxmox VE存储配置
datacenter.cfg Proxmox VE数据中心宽配置(键盘布局,代理,…)
user.cfg Proxmox VE访问控制配置(用户/组/…)
domains.cfg Proxmox VE认证域
status.cfg Proxmox VE外部度量服务器配置
authkey.pub 售票系统使用的公钥
pve-root-ca.pem 集群CA的公共证书
priv/shadow.cfg 影子口令文件
priv/authkey.key 票务系统使用的私钥
priv/pve-root-ca.key 集群CA的私钥
nodes//pve-ssl.pem web服务器的公共SSL证书(由群集CA签署)
nodes//pve-ssl.key pve-ssl.pem的私钥
nodes//pveproxy-ssl.pem web服务器的公共SSL证书(链)(可选覆盖pve-ssl.pem)
nodes//pveproxy-ssl.key pveproxy-ssl.key的私有SSL密钥(可选)
nodes//qemu-server/.conf KVM虚拟机配置数据
nodes//lxc/.conf 用于LXC容器的VM配置数据
firewall/cluster.fw 防火墙配置应用于所有节点
firewall/.fw 单个节点的防火墙配置
firewall/.fw 虚拟机和容器的防火墙配置

6.4.2、符号链接

local nodes/
qemu-server nodes//qemu-server/
lxc nodes//lxc/

6.4.3、调试专用状态文件(json)

.version 文件版本(用于检测文件修改)
.members 关于集群成员的信息
.vmlist 虚拟机列表
.clusterlog 集群日志(最后50个条目)
.rrd RRD数据(最近的条目)

6.4.4、启用/禁用调试

您可以启用详细的syslog消息:

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

禁用详细的syslog消息

echo "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,然后重启并检查。(不要忘记您的VMICT数据)

6.5.1、移除集群配置

推荐的方法是在将节点从集群中删除后重新安装它。这可以确保销毁所有秘密集群/ssh密钥和任何共享配置数据。

在某些情况下,您可能更喜欢将节点恢复到本地模式而不重新安装,这在单独的一个节点中描述,而不重新安装

6.5.2、从故障节点恢复/移动客户机

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

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

如果non-HA-managed客人只有共享磁盘(并且没有配置仅在故障节点上可用的其他本地资源,即没有本地资源在故障节点上),手动恢复是可能的,只要把客人从失败的节点配置文件的目录/etc/pve/移动到活着节点的目录(改变逻辑所有者或客人的位置)。

例如,在集群的任何成员节点上以root身份登录时,通过以下命令将ID为100的虚拟机从一个死节点node1恢复到另一个node2:

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

  1. 警告
  2. 在手动恢复这样的客户端之前,绝对要确保故障源节点确实已关闭电源/隔离。否则,mv命令会违反Proxmox VE的锁定原则,从而可能产生意想不到的后果。
  3. 警告
  4. 带有本地磁盘(或仅在死节点上可用的其他本地资源)的客户端是不能这样恢复的。要么等待失败的节点重新加入集群,要么从备份中恢复这类客户机。