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/ |
web服务器的公共SSL证书(由群集CA签署) |
nodes/ |
pve-ssl.pem的私钥 |
nodes/ |
web服务器的公共SSL证书(链)(可选覆盖pve-ssl.pem) |
nodes/ |
pveproxy-ssl.key的私有SSL密钥(可选) |
nodes/ |
KVM虚拟机配置数据 |
nodes/ |
用于LXC容器的VM配置数据 |
firewall/cluster.fw | 防火墙配置应用于所有节点 |
firewall/ |
单个节点的防火墙配置 |
firewall/ |
虚拟机和容器的防火墙配置 |
6.4.2、符号链接
local | nodes/ |
---|---|
qemu-server | nodes/ |
lxc | nodes/ |
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/
因此,如果客户机的所属节点发生故障(例如,由于断电、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/
警告
在手动恢复这样的客户端之前,绝对要确保故障源节点确实已关闭电源/隔离。否则,mv命令会违反Proxmox VE的锁定原则,从而可能产生意想不到的后果。
警告
带有本地磁盘(或仅在死节点上可用的其他本地资源)的客户端是不能这样恢复的。要么等待失败的节点重新加入集群,要么从备份中恢复这类客户机。