Proxmox集群之pve-cluster

常见的虚拟化软件或者云计算软件,例如vmware vSphere、Openstack、Clousstack、ovirt,都支持多节点分布式的部署方式,其中节点类型大致包括计算节点,存储节点,控制节点等等等等。比如vmware vSphere,除了esxi计算节点以外,会有一个中心控制节点vCenter,并且在vCenter上保存了整个虚拟化平台的配置信息。再比如Openstack、Clousstack、ovirt,除了计算节点以外,还会有控制节点,所有节点信息都集中保存在mysql数据库中,控制节点通过数据库实现对整个平台的管理。

Proxmox虽然也支持多节点的分布式部署方式,但Proxmox并没有中心节点的概念,而是采用了基于Corosync的对称集群部署方式(参见《Proxmox集群之Corosync》)。在Proxmox集群中,每一个节点都集成了完全一样的计算、存储、控制功能,每个节点都可以独立完成集群的管理功能。Proxmox集群的信息会在每个节点上保存一份,集群中的节点通过pve-cluster实现集群管理信息的同步,从而保持集群的一致性和完整性。

一、pve-cluster对称集群架构的优势

1、完全避免了单点故障。对于Proxmox来说,集群中任何节点都是对等的,功能和作用完全一样,只要还有集群中超过一半节点能提供服务,整个集群就可以正常运行!简单说,如果你有5台服务器,宕机2台时集群仍然OK,如果有7台,那么允许宕3台而保证集群正常运行。依次类推,按照4.x版集群最大规模32台服务器,最多允许15台服务器宕机。这样就有效避免了单点故障风险。

2、高效利用服务器。Proxmox集群中所有服务器都可用于运行虚拟机,而无需再部署专门的控制节点,这就提高了服务器的利用率。毕竟,用户部署虚拟化首要的目的就是运行虚拟机,而不是去跑一堆的管理节点。特别对于中小用户来说,本来就只打算部署三五台服务器,拿出两台服务器做双机控制节点热备,甚至是三台服务器做个控制节点集群,只为了避免单点故障......打算留几台服务器做计算呢?

3、减轻运维工作难度。Proxmox集群里所有节点的功能和作用都是完全一致的,用户无需区别对待,简化了运维工作。用户只要保证Proxmox集群多播通信正常,pve-cluster就能自动确保所有服务器的状态信息协调一致,无须用户额外配置和维护,整个Proxmox集群的高可用性自然就在那里,用户也无需像Openstack管理员那样专门去维护一个mysql数据库之类的东西。

二、pve-cluster原理概要

pve-cluster主要任务就是管理Proxmox的集群信息数据库。Proxmox采用了轻量级的sqlite3数据库保存集群信息,数据库文件在/var/lib/pve-cluster/config.db。

根据Proxmox wiki的信息(参见http://pve.proxmox.com/wiki/Proxmox_Cluster_file_system_(pmxcfs)),pve-cluster还提供了文件系统接口,将该数据库的信息以fuse文件系统的方式挂载在/etc/pve目录下。用户使用常见的linux文件管理命令来读写该文件系统,就可以实现对集群信息的访问和管理。

为了提高访问速度,pve-cluster服务创建文件系统完全基于内存。在Proxmox服务器上运行df -h即可看到,这个文件系统基于/dev/fuse设备,挂载在/etc/pve目录下。文件系统并不大,只有30M容量,但却足以保存Proxmox集群信息,并轻松实现数千虚拟机的管理。

/etc/pve目录下主要集群信息文件如下

集群信息        corosync.conf

存储信息        storage.cfg

用户信息        user.cfg

调度备份        vzdump.cron

KVM虚拟机    ./nodes/nodename/qemu-server

LXC容器         ./nodes/nodename/lxc

在集群上任何一台服务器上,对/etc/pve目录下的文件进行任何操作,pve-cluster都会自动通知集群内其他服务器同步操作,确保集群服务器的状态一致。例如用户创建目录,创建文件,修改文件内容,所有操作,pve-cluster都会自动同步到其他服务器上。

一般情况下,用户无须直接操作/etc/pve目录,可以通过webgui管理界面发出各种指令,Proxmox的核心服务pvedaemon会代替用户对/etc/pve目录操作,完成各种任务,而pve-cluster将会完成服务器间/etc/pve目录的同步工作,确保集群状态时刻保持一致。

退一万步,万一真的很糗,集群内超过一半服务器宕机,又该怎么办呢?可以执行pvecm expected n(n是集群内仍然在线的服务器数量),降低Quorum要求,确保剩余服务器可以组成一个小的集群,pve-cluster将确保这个小集群内服务器状态一致,管理员就可以继续对剩余服务器进行紧急操作咯。

猜你喜欢

转载自blog.csdn.net/csgd2000/article/details/81697757