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数量,数据池通常需要更多的PGerasure
:使用纠删码模式,节省存储空间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
:指定文件系统类型为ceph192.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%的存储空间
- 整个系统仍然保持了高可用性,任何两个节点故障都不会导致数据丢失