当前位置: 首页 > news >正文

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

6. 存储池配置与CephFS创建

      • 6.1 CRUSH规则管理
      • 6.2 纠删码配置
      • 6.3 为SSD和HDD创建专用CRUSH规则
      • 6.4 创建CephFS存储池
      • 6.5 验证存储池配置
      • 记录OSD盘符 所有节点都执行
    • 7. 客户端挂载CephFS
      • 7.1 Ubuntu客户端配置
      • 7.2 使用内核驱动挂载
      • 7.3 设置开机自动挂载

说明:配置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%的存储空间
  • 整个系统仍然保持了高可用性,任何两个节点故障都不会导致数据丢失

相关文章:

  • Java 中的反射详解
  • 发行基础:本地化BUG导致审核失败
  • 【AlphaFold2】深入浅出,Feature Embedding|学习笔记
  • ev_loop_fork函数
  • 【部署】win10的wsl环境下调试dify的api后端服务
  • 初学者入门指南:什么是网络拓扑结构?
  • Java后端开发day46--多线程(二)
  • 互联网大厂Java求职面试实战:Spring Boot微服务与数据库优化详解
  • rust-candle学习笔记12-实现因果注意力
  • 数据结构精解:优先队列、哈希表与树结构
  • 【Redis】string
  • Exploring Temporal Event Cues for Dense Video Captioning in Cyclic Co-Learning
  • 【C++指南】STL容器的安全革命:如何封装Vector杜绝越界访问与迭代器失效?
  • [论文阅读]BadPrompt: Backdoor Attacks on Continuous Prompts
  • 提高工作效率的新选择[特殊字符]——Element Plus UI库
  • HNUST湖南科技大学-软件测试期中复习考点(保命版)
  • window环境下,如何通过USB接口控制打印机
  • Spring MVC 视图解析器 (ViewResolver) 如何配置? Spring Boot 是如何自动配置常见视图解析器的?
  • idea如何快速生成测试类
  • 【DLF】基于语言的多模态情感分析
  • 体验中国传统文化、采购非遗文创,波兰游客走进上海市群艺馆
  • 黑灰产工作室为境外诈骗集团养号引流,冒充美女与男性裸聊后敲诈勒索
  • 中铁房地产24.7亿元竞得上海松江新城宅地,溢价率20.42%
  • 马上评丨规范隐藏式车门把手,重申安全高于酷炫
  • 新村回响:一周城市生活
  • 远离军事前线的另一面暗斗:除了“断水”,印度还试图牵制对巴国际援助