作者:田逸(vx:formyz)

创建多Ceph Pool的目的

Proxmox VE集群上的虚拟机运行在高速磁盘NVME,而虚拟机附属的数据,则指定到低速、廉价、容量大的磁盘空间。为了高可用性,充分利用资源,需要让除Proxmox VE宿主二外的数据都运行在Ceph分布式存储上。

 

 

解决思路

把高速的NVMe(或者其它固态磁盘SSD)多磁盘做成一个Ceph Pool,大容量多磁盘组成另外一个Ceph Pool。

 

 

测试环境

ü  三台物理服务器,插入一块或NVMe磁盘(容量不等不影响使用和性能),数块SATA 低速硬盘,大致配置图所示。Proxmox VE 超融合集群创建多个Ceph Pool_数据

ü  平台版本为Proxmox VE 7.0,安装好Ceph,版本为16.2.6。

ü  服务器集群已经做好,需要使用的磁盘已经全部初始化。

 Proxmox VE 超融合集群创建多个Ceph Pool_服务器_02



实验步骤

大致可分为:创建不同类型的Ceph OSD,创建Ceph crushrule,创建Ceph Pool,创建虚拟机及给虚拟机分配磁盘空间,功能验证等几个步骤。

 

创建不同类型Ceph OSD

 

1、创建SATA磁盘Ceph OSD,设备类型指定为HDD。登录Proxmox VE Web管理后台,选定物理节点,创建OSD,具体操作如图所示。

Proxmox VE 超融合集群创建多个Ceph Pool_数据_03

重复这个操作,将所有剩余的空闲SATA创建好OSD待用。

2、创建NVMe磁盘Ceph OSD,设备类型指定为NVMe,操作如下图所示。

Proxmox VE 超融合集群创建多个Ceph Pool_命令行_04

重复这个步骤,将所有剩余的NVMe创建好OSD待用。

3、验证所创建的Ceph OSD。Proxmox VE 宿主系统Debian执行命令 ceph osd tree查看,生成的Ceph OSD如下:


root@pve3:~#ceph osd tree

ID  CLASS  WEIGHT   TYPE NAME      STATUS  REWEIGHT  PRI-AFF

-1         9.18233  root default                           

-7         3.68178      host pve1                          

 0   hdd  1.81879          osd.0      up   1.00000  1.00000

 5   nvme  1.86299          osd.5      up   1.00000  1.00000

-3         2.75027      host pve2                          

 1   hdd  1.81879          osd.1      up   1.00000  1.00000

 4   nvme  0.93149          osd.4      up   1.00000  1.00000

-5         2.75027      host pve3                          

 2   hdd  1.81879          osd.2      up   1.00000  1.00000

 3   nvme  0.93149          osd.3      up   1.00000  1.00000


 

创建Ceph OSD CrushRule

 

创建两个Ceph OSD Crush Rule,一个用于标识NVMe,另一个用于标识HDD。创建Crush规则暂时不能在ProxmoxVE Web管理后台进行,需要在其宿主系统Debian命令行下手动执行,所敲的命令行如下:


ceph osd crush rule create-replicated rule-nvme default  host nvme

ceph osd crush rule create-replicated rule-hdd default  host hdd


执行完毕后,再继续执行如下指令进行验证:


root@pve3:~# ceph osd crush rule ls

replicated_rule

rule-nvme

rule-hdd


 

创建Ceph Pool

 

切换到Proxmox VE Web管理后台,选定节点,创建Ceph。这里我要创建两个Ceph Pool,把不同的OSD归类到不同的Pool中。

 

1、创建NVMe磁盘Pool。命名Pool为“NVMe_pool”,选择“Crush Rule”为“nvme-rule”,单击按钮“创建”,如下图所示:Proxmox VE 超融合集群创建多个Ceph Pool_宿主系统_05

2、创建SATA磁盘Pool。命名Pool为“HDD_pool”,选择“Crush Rule”为“hhd-rule”,单击按钮“创建”,如下图所示:

Proxmox VE 超融合集群创建多个Ceph Pool_服务器_06

3、验证Ceph Pool的有效性。在Proxmox VE Web管理后台执行一个“卷迁移”操作,如下图所示。

Proxmox VE 超融合集群创建多个Ceph Pool_centos_07

切换到Proxmox VE宿主系统Debian命令行,执行“ceph osd pool stats”,查看其输入,如下图所示:

Proxmox VE 超融合集群创建多个Ceph Pool_宿主系统_08



功能测试

 

在Proxmox VE集群创建虚拟机,磁盘存储指定“NVMe-pool”,如下图所示:

Proxmox VE 超融合集群创建多个Ceph Pool_服务器_09

创建好虚拟机,并在其上安装操作系统,我测试用了Centos ,安装完系统以后,再给此虚拟机新增磁盘,“存储”指定“HDD-pool”,如下图所示:

Proxmox VE 超融合集群创建多个Ceph Pool_centos_10

进入虚拟机系统Centos,并把分配的磁盘创建文件系统,挂接上,手动创建一些文件或者目录。

 

继续在Proxmox VE Web管理后台,把虚拟机或者容器加入到高可用集群。

 

关闭Proxmox VE集群中刚创建并安装好系统的虚拟机所在的物理服务器,从Proxmox VE Web管理后台查看运行状态,等待节点成离线状态时,看虚拟机是否漂移?

 Proxmox VE 超融合集群创建多个Ceph Pool_服务器_11

经过几分钟的耐心等待,虚拟机及容器漂移到正常运行的物理节点上。

Proxmox VE 超融合集群创建多个Ceph Pool_命令行_12