6. 存储池配置与CephFS创建 ceph version 14.2.22

发布于:2025-05-11 ⋅ 阅读:(15) ⋅ 点赞:(0)

说明:配置Ceph存储池和创建CephFS文件系统。创建专用的CRUSH规则,为SSD和HDD设备分别优化数据放置策略,并使用纠删码技术提高存储效率。

6.1 CRUSH规则管理

说明:CRUSH(Controlled Replication Under Scalable Hashing)是Ceph的核心算法,它决定了数据如何在集群中分布。CRUSH规则定义了数据的放置策略,影响数据的可靠性和性能。

# 查看现有CRUSH规则
ceph osd crush rule ls

该命令列出集群中所有已定义的CRUSH规则。默认情况下,Ceph会有一个名为replicated_rule的规则。

# 查看规则详情
ceph osd crush rule dump replicated_rule

此命令显示指定规则(这里是replicated_rule)的详细配置,包括规则ID、名称、类型、最小/最大副本数以及数据放置步骤。

# 删除规则(如需要)
# ceph osd crush rule rm <rule-name>

用于删除不再需要的CRUSH规则。注意:不能删除正在被存储池使用的规则。

6.2 纠删码配置

说明:纠删码(Erasure Coding,EC)是一种数据保护技术,比传统的多副本复制更节省存储空间。它将数据分割成多个数据块(k),并计算额外的校验块(m),只要有k个块可用,就能恢复完整数据。

# 查看现有纠删码配置
ceph osd erasure-code-profile ls

列出所有已定义的纠删码配置文件。默认会有一个名为default的配置。

# 查看默认纠删码配置详情
ceph osd erasure-code-profile get default

显示默认纠删码配置的详细参数。通常默认配置为k=2, m=1,意味着数据分成2块,加1块校验块。

# 创建自定义纠删码配置
ceph osd erasure-code-profile set ec_profile_8_2_host_4096 \
  k=8 \
  m=2 \
  plugin=jerasure \
  technique=reed_sol_van \
  crush-failure-domain=host \
  crush-device-class=hdd \
  crush-root=default \
  stripe_unit=4096 \
  --force

创建名为ec_profile_8_2_host_4096的纠删码配置,各参数说明:

  • k=8:数据分成8块
  • m=2:生成2个校验块
  • plugin=jerasure:使用jerasure编码库
  • technique=reed_sol_van:使用Reed-Solomon编码算法
  • crush-failure-domain=host:确保数据和校验块分布在不同主机上,提高容错性
  • crush-device-class=hdd:只使用HDD设备存储这些数据
  • crush-root=default:在默认CRUSH树中选择设备
  • stripe_unit=4096:条带单元大小为4096字节
  • --force:强制创建,即使有些参数可能不是最优的

这个8+2的配置意味着数据存储效率提高了约20%,同时可以承受任意两个分片的丢失。

# 查看创建的纠删码配置
ceph osd erasure-code-profile get ec_profile_8_2_host_4096

验证新创建的纠删码配置参数是否符合预期。

6.3 为SSD和HDD创建专用CRUSH规则

说明:为了优化性能,通常会根据存储介质类型(SSD/HDD)创建不同的CRUSH规则,以便将不同类型的数据放置在最合适的设备上。

# 创建SSD专用CRUSH规则
ceph osd crush rule create-replicated ssd_rule default host ssd

创建名为ssd_rule的复制规则,参数说明:

  • default:使用默认CRUSH树
  • host:副本将分布在不同的主机上
  • ssd:只选择SSD类型的设备

这个规则将用于元数据池,确保元数据存储在高速的SSD上,提高元数据操作的性能。

# 创建HDD纠删码CRUSH规则
ceph osd crush rule create-erasure hdd_ec_rule ec_profile_8_2_host_4096

创建名为hdd_ec_rule的纠删码规则,使用前面定义的ec_profile_8_2_host_4096纠删码配置。这个规则会将数据分布在HDD设备上,因为纠删码配置中指定了crush-device-class=hdd

这个规则将用于数据池,利用纠删码提高存储效率,同时将数据存储在成本较低的HDD上。

# 验证规则创建
ceph osd crush rule dump ssd_rule
ceph osd crush rule dump hdd_ec_rule

查看创建的规则详情,确保配置正确。在输出中,应该能看到ssd_rule使用default~ssd作为数据源,而hdd_ec_rule使用default~hdd作为数据源。

6.4 创建CephFS存储池

说明:CephFS需要两个存储池:一个用于存储元数据,一个用于存储文件数据。通常元数据池使用SSD以提高性能,数据池使用HDD以降低成本。

# 创建元数据池(使用SSD)
ceph osd pool create cephfs_metadata 512 512 replicated

创建名为cephfs_metadata的复制池,用于存储文件系统元数据。

  • 512 512:分别指定PG(放置组)和PGP(放置组伙伴)的数量
  • replicated:使用复制模式而非纠删码
ceph osd pool set cephfs_metadata size 3

设置元数据池的副本数为3,提高数据安全性。元数据对文件系统至关重要,因此使用更高的冗余度。

ceph osd pool set cephfs_metadata crush_rule ssd_rule

将元数据池绑定到前面创建的ssd_rule,确保元数据存储在SSD上,提高元数据操作性能。

ceph osd pool application enable cephfs_metadata cephfs

将池标记为CephFS应用使用,这是Luminous版本后的要求,用于标识池的用途。

# 验证元数据池配置
ceph osd pool get cephfs_metadata crush_rule

确认元数据池使用了正确的CRUSH规则(应该是ssd_rule)。

# 创建数据池(使用HDD,纠删码)
ceph osd pool create cephfs_data_ec 4096 4096 erasure ec_profile_8_2_host_4096 hdd_ec_rule

创建名为cephfs_data_ec的纠删码池,用于存储文件数据。

  • 4096 4096:指定PG和PGP数量,数据池通常需要更多的PG
  • erasure:使用纠删码模式,节省存储空间
  • ec_profile_8_2_host_4096:使用前面创建的纠删码配置
  • hdd_ec_rule:使用前面创建的HDD专用CRUSH规则
# 允许EC池覆盖写
ceph osd pool set cephfs_data_ec allow_ec_overwrites true

默认情况下,纠删码池不支持部分对象修改(覆盖写),这个设置启用了该功能。这对CephFS是必需的,因为文件系统需要能够修改文件的部分内容。

# 创建CephFS文件系统
ceph fs new cephfs_ec cephfs_metadata cephfs_data_ec --force

创建名为cephfs_ec的文件系统:

  • cephfs_metadata:指定元数据池
  • cephfs_data_ec:指定数据池
  • --force:强制创建,即使有些配置可能不是最优的
# 验证文件系统创建
ceph fs ls

列出所有创建的文件系统,确认cephfs_ec已成功创建。

6.5 验证存储池配置

说明:创建完成后,需要验证配置是否符合预期,确保元数据和数据分别存储在正确的设备类型上。

# 验证元数据池使用SSD
ceph osd pool get cephfs_metadata crush_rule

确认元数据池使用了正确的CRUSH规则(应该返回ssd_rule)。

ceph osd crush rule dump ssd_rule

查看SSD规则的详细配置,确认它使用了default~ssd作为数据源。

# 验证数据池使用HDD
ceph osd pool get cephfs_data_ec crush_rule

确认数据池使用了正确的CRUSH规则(应该返回hdd_ec_rule)。

ceph osd crush rule dump hdd_ec_rule

查看HDD规则的详细配置,确认它使用了default~hdd作为数据源。

# 查看集群状态
ceph -s

检查整个集群状态,包括新创建的文件系统、存储池和PG状态。应该能看到所有PG处于active+clean状态,表示数据分布正常。

记录OSD盘符 所有节点都执行

ceph-volume lvm list > lvm.list

7. 客户端挂载CephFS

说明:创建好CephFS后,需要在客户端上挂载使用。这里以Ubuntu客户端为例,挂载CephFS文件系统。

7.1 Ubuntu客户端配置

# 安装ceph-common包
apt-get install -y ceph-common

安装Ceph客户端工具包,提供挂载CephFS所需的命令和库。

# 创建挂载点
mkdir -p /mnt/cephfs

创建本地挂载点目录,CephFS文件系统将挂载到这个目录。

# 从Ceph管理节点复制密钥
# 在Ceph管理节点上执行
ceph auth get-key client.admin > admin.secret

在Ceph管理节点上导出admin用户的密钥,用于客户端认证。admin用户拥有对文件系统的完全访问权限。在生产环境中,应该为不同的客户端创建权限更受限的用户。

# 将密钥文件复制到客户端
# scp admin.secret ubuntu-client:/etc/ceph/
# scp ceph.conf ubuntu-client:/etc/ceph/

将密钥文件和Ceph配置文件复制到客户端的/etc/ceph/目录。客户端需要这些文件来连接Ceph集群。

# 在客户端上设置密钥文件权限
chmod 600 /etc/ceph/admin.secret

限制密钥文件的权限,只允许文件所有者读写,提高安全性。

7.2 使用内核驱动挂载

说明:挂载CephFS文件系统。

# 挂载CephFS
sudo mount -t ceph 192.168.1.100:6789,192.168.1.101:6789,192.168.1.102:6789,192.168.1.103:6789,192.168.1.104:6789,192.168.1.105:6789,192.168.1.106:6789:/ /mnt/cephfs -o name=admin,secretfile=/etc/ceph/admin.secret

使用Linux内核的Ceph客户端挂载文件系统:

  • -t ceph:指定文件系统类型为ceph
  • 192.168.1.100:6789,...:指定所有MON节点的IP和端口,提供冗余连接
  • /:挂载CephFS的根目录
  • -o name=admin,secretfile=/etc/ceph/admin.secret:指定认证信息,使用admin用户和密钥文件
# 验证挂载
df -h /mnt/cephfs

显示挂载点的磁盘使用情况,确认挂载成功。应该能看到CephFS的总容量和可用空间。

7.3 设置开机自动挂载

说明:为了确保系统重启后CephFS能自动挂载,需要将挂载配置添加到/etc/fstab文件中。

# 编辑/etc/fstab
echo "192.168.1.100:6789,192.168.1.101:6789,192.168.1.102:6789,192.168.1.103:6789,192.168.1.104:6789,192.168.1.105:6789,192.168.1.106:6789:/ /mnt/cephfs ceph name=admin,secretfile=/etc/ceph/admin.secret,_netdev,noatime 0 0" >> /etc/fstab

将挂载配置添加到fstab,实现开机自动挂载:

  • 192.168.1.100:6789,...:/:指定MON节点和CephFS路径
  • /mnt/cephfs:本地挂载点
  • ceph:文件系统类型
  • name=admin,secretfile=/etc/ceph/admin.secret:认证信息
  • _netdev:标记为网络设备,确保网络准备好后再挂载
  • noatime:不更新文件访问时间,提高性能
  • 0 0:不进行备份和fsck检查

这种配置实现了高效的存储分层:

  • 元数据(如目录结构、文件属性)存储在SSD上,提供快速访问
  • 实际文件数据存储在HDD上,以8+2的纠删码方式节省约20%的存储空间
  • 整个系统仍然保持了高可用性,任何两个节点故障都不会导致数据丢失

网站公告

今日签到

点亮在社区的每一天
去签到