之前我们已经完成了 Ceph 集群的部署,但是我们如何向 Ceph 中存储数据呢?
-
首先我们需要在 Ceph 中定义一个 Pool 资源池。
-
Pool 是 Ceph 中存储 Object 对象抽象概念。
-
我们可以将其理解为 Ceph 存储上划分的逻辑分区,Pool 由多个 PG 组成;而 PG 通过 CRUSH 算法映射到不同的 OSD 上;同时 Pool 可以设置副本 size 大小,默认副本数量为 3。
一个pool资源池应该包含多少PG数?
OSD总数 | 官方推荐PG数 |
---|---|
小于5个 | 128 |
5-10个 | 512 |
10-50个 | 4096 |
大于50个 | 参考公式(TargetPGsPerOSD,OSDNumber,DataPercent)/PoolReplicatesize |
TargetPGsPerOSD: 每个OSD对应的PG数
OSDNumber:当前OSD总数
DataPercent:当前Pool预计会占用的Ceph集群总空间百分比
PoolReplicatesize:当前pool的副本数
例如:100 * 60 * 50% / 3 = 1000 ---> 取最接近2的次方值1024
ceph操作
1.创建存储池
bash
ceph osd pool create <存储池名> <PG数> [PGP数]
例如:cd /etc/ceph
ceph osd pool create mypool 64
2.查看存储池
bash
ceph osd pool ls
或
ceph osd lspools 查看对应的id号
ceph osd pool get mypool size 查看存储池mypool里的副本数
ceph osd pool get mypool pg_num 查看存储池mypool里的pg数
ceph osd pool get mypool pgp_num 查看存储池mypool里的pgp数
3.设置副本数/PG数/PGP数
bash
ceph osd poll set <存储池名> <副本数>/<PG数>/<PGP数>
例:
修改副本: ceph osd pool set mypool size 2
修改PG数:ceph osd pool set mypool pg_num 128
修改PGP数:ceph osd pool set mypool pgp_num 128
#修改默认副本数为 2
vim ceph.conf
......
osd_pool_default_size = 2
ceph-deploy --overwrite-conf config push node01 node02 node03
4.删除pool资源池
bash
ceph osd pool rm <存储池名> <存储池名> --yes-i-really-really-mean-it
注:需要先修改ceph配置/etc/ceph/ceph.conf,添加
[mon]
mon allow pool delete = true
推送 ceph.conf 配置文件给所有 mon 节点
ceph-deploy --overwrite-conf config push node01 node02 node03
所有 mon 节点重启 ceph-mon 服务
systemctl restart ceph-mon.target
执行删除 Pool 命令
ceph osd pool rm mypool mypool --yes-i-really-really-mean-it
CephFS操作
服务端操作:
1、在管理节点创建 mds 服务
bash
ceph-doploy mds crcatc <节点> ...... 创建MDS
cd /etc/ceph
ceph-deploy mds create node01 node02 node03
2.查看各个节点的 mds 服务
bash
ssh root@node01 systemctl status ceph-mds@node01
ssh root@node02 systemctl status ceph-mds@node02
ssh root@node03 systemctl status ceph-mds@node03
3.创建元数据存储池
-
启用 ceph 文件系统
-
ceph 文件系统至少需要两个 rados 池,一个用于存储数据,一个用于存储元数据。此时数据池就类似于文件系统的共享目录。
bash
ceph osd pool create <元数据存储池名> <PG数>
例如:ceph osd pool create cephfs_metadata 128
4.创建数据存储池
bash
ceph osd pool create <数据存储池> <PG数>
例如:ceph osd pool create cephfs_data 128
5.创建CephFS
bash
ceph fs new <CephFS名称> <元数据存储池名><数据存储池>
ceph fs new mycephfs cephfs_metadata cephfs_data
#启用ceph,元数据Pool在前,数据Pool在后
ceph fs ls #查看cephfs
6.给挂载用户授权
ceph fs authorize <CephFS名称>client.<用户名><文件系统路径><rw或r>
客户端操作:
bash
mount -t ceph <节点1名称>:6789,<节点2名称>:6789,......:<文件系统路径> <本地挂载点目录> -o name=<用户名>,secret=<密匙>或secretfile=<密匙文件>
ceph-fuse -m <节点1名称>:6789,<节点2名称>:6789,......:<本地挂载点目录> [-o nomepty(如果挂载的是空目录要加这个选项)]
RBD操作:
1.先创建存储池
bash
ceph osd pool create <存储池名> <PG数>
2.转换为RBD模式
bash
ceph osd pool application enable <存储池名> rbd
3.初始化存储池
bash
rbd pool init -p <存储池名>
4.指定存储池创建镜像
bash
rbd create -p <存储名> --image <镜像名> --size <镜像大小>
可简写为:
rbd create <存储池名>/<镜像名> --size <镜像大小>
5.查看存储池下存在哪些镜像
bash
rbd ls -l -p <存储池名>
6.查看镜像详细信息
bash
rbd info<存储池名>/<镜像名>
7.修改镜像大小
bash
rod resize<存储池名>/<镜像名> --size <镜像大小> [--allow-shrink(缩小镜像大小)]
8.删除镜像
bash
#直接删除镜像
rbd rm -p 存储池名 --image 镜像名
rbd remove <存储池名>/<镜像名>
#推荐使用 trash 命令,这个命令删除是将镜像移动至回收站,如果想找回还可以恢复
rbd trash <存储池名>/<镜像名>
rbd ls -l -p 存储池名
rbd trash list -p 存储池名
5fc98fe1f304 镜像名#找出对应的镜像
#还原镜像
rbd trash restore rbd-demo/5fc98fe1f304
rbd ls -l -p rbd-demo