第五章、CEPH的Pool和RBD镜像创建和管理5.1、关于CEPH存储池和镜像的理解5.1.1、什么是CEPH存储池在CEPH中被操作的物理磁盘叫做OSD盘CEPH可以通过OSD服务将多台服务器的物理磁盘添加到CEPH集群中的OSD盘使之分散的磁盘汇聚成一大总容量空间一个足够大的OSD容量空间可以从中创建若干个存储池pools。从OSD盘创建的存储叫做存储池。5.1.2、什么是CEPH镜像正如上文所述从OSD中创建的存储空间叫做ceph存储池。那么从存储池中创建的存储空间叫做镜像镜像是最终提供给对象使用的存储空间。在生产环境中关于存储池的创建有以下几中创建方案一是从OSD中为每一个需求存储的对象个体创建一个对应的存储池然后将该存储池的全部容量划分一个镜像供给客户端使用二是将OSD所有的空间仅创建一个超大的存储池然后从该存储池中创建若干个镜像不同的镜像供给不同的客户端使用。5.2、CEPH存储池创建5.2.1、归置组PG_NUM、PGP_NUM1、归置组PG_NUM设置规律原则 pg num全称是placement groups number归置组。它是ceph的逻辑存储单元。在数据存储到cesh时先打散成一系列对象再结合基于对象名的哈希操作、复制级别、PG数量产生目标PG号。根据复制级别的不同每个PG在不同的OSD上进行复制和分发。可以把PG想象成存储了多个对象的逻辑容器这个容器映射到多个具体的OSD。PG存在的意义是提高ceph存储系统的性能和扩展性。如果没有PG就难以管理和跟踪数以亿计的对象它们分布在数百个OSD上。对ceph来说管理PG比直接管理每个对象要简单得多。每个PG需要消耗一定的系统资源包括CPU、内存等。集群的PG数量应该被精确计算得出。通常来说增加PG的数量可以减少OSD的负载但是这个增加应该有计划进行。一个推荐配置是每OSD对应50-100个PG。如果数据规模增大在集群扩容的同时PG数量也需要调整。CRUSH会管理PG的重新分配。 pgp num全称是placement groups placement number(归置组的组合pgp 相当于是 pg 对应 osd 的 一种排列组合关系)。在更改pool的PG数量时需同时更改PGP的数量。PGP是为了管理placement而存在的专门的PG它和PG的数量应该保持一致。如果你增加pool的pg_num就需要同时增加pgp_num保持它们大小一致这样集群才能正常rebalancing。下面介绍如何修改pg_num和pgp_num。CEPH存储池的创建使用以下语法如上图所示在创建存储池poo的时候需要指定pg-num、pgp-num的大小。关于这个两个数值的大小官方有以下建议 少于5个 OSD 设置 pg_num 为1285~10个 OSD设置 pg_num 为51210~50个 OSD设置 pg_num 为4096 超过50个OSD可以应用 Ceph PGs per Pool Calculator 来进行计算CEPH系统中pg-num、pgp-num的默认值8默认值8不适用于大多数系统。因此可以通过如下方法设置pg-num、pgp-num的默认值的大小osd pooldefaultpg num100//设置pg_num默认值大小为100osd pooldefaultpgp num100//设置pgp_num默认值大小为1002、如何确定归置组数量比如一个配置了 200 个 OSD 且副本数为 3 的集群你可以这样估算归置组数量(200 * 100)----------- 6667. Nearest power of 2: 819233、获取修改归置组pg_num pgp_num对于一个已经建成的pool可以通过以下方法来获取查询存储池的归置组pg_num和pgp_num数量。要获取一个存储池的归置组数量执行命令ceph osd pool get rbd pg_num //查询rbd池的pg_num设置数量 ceph osd pool get rbd pgp_num //查询rbd池的pgp_num设置数量要设置某存储池的归置组数量你必须在创建它时就指定好详情见创建存储池。一存储池的归置组数量设置好之后还可以增加但不可以减少下列命令可增加归置组数量ceph osd poolsetrbd pg_num1024//设置rbd池的pg_num设置数量为1024你增加归置组数量后、还必须增加用于归置的归置组 pgp_num 数量这样才会开始重均衡。 pgp_num 数值才是 CRUSH 算法采用的用于归置的归置组数量。虽然 pg_num 的增加引起了归置组的分割但是只有当用于归置的归置组即 pgp_num 增加以后数据才会被迁移到新归置组里。 pgp_num 的数值应等于 pg_num 。可用下列命令增加用于归置的归置组数量ceph osd poolsetrbd pgp_num1024//设置rbd池的pgp_num设置数量为10245.2.2、创建存储池pools例如如下所示创建名为storage_1存储池由于8个osd盘因此设置pg_num大小为512ceph osd pool create storage-1512//创建存储池storage-1 rbd pool init storage-1 //初始化存储池 ceph osd lspools //列出创建pools cephdf//列出osd的class类和所有存在的pools5.2.3、删除存储池pools如果要删除osd存储池请事先做好该存储池下面的rbd镜像盘里面的数据备份。并且在删除osd存储池之前确保该存储池下面的rbd镜像已经本删除清空。ceph osd pool delete pool-1 pool-1 --yes-i-really-really-mean-it //删除名为pool-1的osd存储池5.3、CEPH镜像创建1、创建rbd镜像创建客户端使用的块镜像在创建之前一定要确保已经创建了存储池poolsrbd list-ppool-1 //从pool-1池中列出块镜像rbd create rbd1--size10G-ppool_1 //从pool-1池中创建一个名为rbd1的10G镜像rbd info rbd1-ppool-1 //列出pool-1池中名为rbd1镜像块的详细信息2、删除rbd镜像删除rbd镜像之前确保客户端盘符数据已经被备份。rbd remove rbd/g03-esxi //删除名为rbd的池中删除g03-esxi镜像