一、 刪除內建的LVM thin

LVM 有两种,分为 Thin 和 非Thin, 而 pve內建的 local-lvm 的格式是 LVM-Thin ,在使用上有好处也有坏处:

1) 好处:用来建vm or ct 可以有 snapshot(快照)的功能,而且可以超额分配硬碟空间(当然是有代价的)

2) 坏处:这个分割区你无法直接放档案进去,等于这个分割区只能給 vm or ct 专用了

若你不想使用 LVM-Thin 想把它移掉,只当一般的 LVM 使用,LVM 相对于 LVM-thin 的优缺点如下:

1) 优点:你可以直接放档案进去

2) 缺点:vm or ct 沒有快照功能,不能超额分配硬碟空间

按下面的方法转换成一般的LVM 来使用

注意:底下的操作会刪掉你 local-lvm 里的所有资料,请确定你 local-lvm 里沒有要保留的资料

1.先移除 local-lvm

移除指令

# lvremove /dev/pve/data

执行上面这个指令会再次跟你确认。

2.查free PE数字

先查有多少free PE可用

# vgdisplay pve |grep Free

Free PE / Size 14367 / 56.12 GiB

请记住上面的可用空间的数字(标红数字)

3.建新的lvm

把前面查到的数字填在这,意即针剩下的PE全用了

# lvcreate -l 14367 -n data pve

4.格式化、掛载使用

然后你就可以格式化,並掛载來使用了

# mkfs.ext4 /dev/pve/data

# mkdir /mnt/data

# mount /dev/pve/data /mnt/data

二、 quorum机制(Node管理和删除)

Proxmox集群采用了无中心结构,所有节点彼此平等。集群每个服务器各自在本节点的 /etc/pve目录下维护了一个fuse文件系统pmxcfs,并在其中保存了Proxmox集群的全部状态信息。为了确保各个节点维护的集群状态信息及时同步,Proxmox采用了Corosync集群组件管理所有节点,并采用Quorum机制来确保所有集群状态信息的一致性。

Quorum本质上是一种基于少数服从多数的投票机制。即,当集群中各节点就某个状态信息出现不一致意见时,少数服从多数,少数派将根据多数派修改自己的状态信息,最终达到集群中所有服务器状态一致的效果。

为了加深对Quorum机制的理解,可以思考下面的问题场景。

问题场景一:对于一个含有pve01、pve02、pve03三个节点的Proxmox集群,如果pve03节点故障宕机短时间无法修复时,该如何把pve03节点上的虚拟机迁移到pve01节点启动运行呢?

在三个节点均可以正常工作的情况下,可以通过webgui执行迁移操作,把一个节点上的虚拟机迁移到其他节点运行。但是在pve03意外宕机时,再通过webgui去执行迁移操作,会发现系统提示“连接超时”。

ssh登录pve01节点,进入/etc/pve/nodes/pve03/qemu-server目录,使用mv命令把该目录下所有pve虚拟机配置文件移动到/etc/pve/nodes/pve01/qemu-server目录下,然后在webgui里查看,可以发现原来在pve03节点上的虚拟机全部转移到了pve01节点上,然后再逐个启动虚拟机即可。

注意,以上过程我们只是在pve01节点上执行了一个mv命令,并没有操作pve02节点,那么pve02节点上会是什么情况呢?

在执行mv命令前后查看pve02节点上/etc/pve/nodes/pve01/qemu-server和/etc/pve/nodes/pve03/qemu-server目录。可以发现,我们在pve01节点上手工执行的mv操作,Proxmox会自动在pve02节点对应目录下进行同样操作,就好像pve01和pve02对应目录是同一个一样。

这是因为集群一共有3个节点,虽然pve03节点宕机,但剩余的pve01和pve02节点仍然能够达到一个“多数投票”的状态,即3票中的2票,在Quorum机制下,对pve01和pve02仍然能够“代表集群多数,继续行使维护集群状态信息的权力”。所以,在pve01上执行的mv命令时,Proxmox会自动同步到pve02节点,而pve02节点也会配合完成同步操作,确保集群状态信息的完整同步。

问题场景二:pve03节点修复后,重新加入集群时,pve03节点和pve01、pve02节点状态信息不一致,该如何解决?

当pve03节点修复后,重新加入集群前,在pve03节点的/etc/pve/nodes/pve03目录下,原来的虚拟机配置文件都在,也就是说,pve03节点仍然认为这些虚拟机是运行在本节点上,而不是已经被迁移到pve01节点去了。实际上,在断网那一刻,pve03节点上的Proxmox服务会立刻发现自己和集群其他服务器通信中断,自己已经变成了“少数派”,Proxmox集群文件系统服务pve-cluster会立刻把/etc/pve目录设置为只读,你会发现无法对pve03节点的集群文件系统做任何修改。

那么当pve03重新加入集群时,又会发生什么事情呢?pve03在重新加入集群时,作为“少数派”,自然要服从“多数派”pve01和pve02的意见,同步pve01和pve02当前的集群状态信息,洗脱“少数派”的身份,加入“多数派”,确保集群状态一致。

试验验证:

1) 可以新建一个含有三个节点pve01、pve02、pve03的Proxmox集群,在pve01节点/etc/pve目录下执行touch test新建一个名为test的文件,然后分别在pve02和pve03节点上执行ls /etc/pve/test,会发现集群会自动将集群信息变化同步到所有节点。

2) 在pve03的监视器中执行set_link net0 off,关闭pve03节点网卡,模拟断网情况。然后在pve01执行rm /etc/pve/test删除test文件,可以发现pve02节点会同步删除/etc/pve/test,而pve03节点的test文件仍然存在。此时如果在pve03节点执行rm /etc/pve/test,系统会提示“rm: cannot remove test: permission denied”,原因就是此时pve03已经变成少数派,集群文件系统目录被强制只读保护。

3) 在pve03的监视器中执行set_link net0 on,重新开启pve03节点网卡,恢复和集群其他服务器的通信,然后再pve03执行ls /etc/pve/test,系统会提示“ls: cannot access test: No such file or directory”,原因就是pve03从pve01和pve02同步了最新的集群状态,test文件被自动删除了。

问题场景三:如果集群里只有两个节点pve01和pve02,在一个节点故障宕机的情况下,又会发生什么事呢?

在只有两个节点的情况下,任何一个节点断网,都会导致集群的“脑裂”,pve01和pve02各有一票,都是“少数派”,无法形成有效的“多数派”,两台服务器的集群文件系统目录都会自动设置为写保护。

此种情况下,如果要删除已宕机节点,可按下面方法操作:

1) 执行pvecm expected 1,降低Quorum要求,重新激活集群文件系统。(但是在网络通信恢复前,必须要手工确保pve01和pve02两个节点的集群状态一致。否则,谁该听谁的呢?这也是非常不推荐双机Proxmox集群的一个重要原因。)

2) # Pvecm delnode NodeName # 删除集群节点