002.RHCS-配置Ceph存储集群
程序员文章站
2023-09-03 23:23:10
一 前期准备 提示:相关部署参考《001.Ansible部署RHCS存储集群》。 二 存储池概述 2.1 存储池 Red Hat Ceph存储池池是Red Hat Ceph存储集群用于存储对象的逻辑分区。 池有特定的属性:池类型,它确定池用于确保数据持久性的保护机制。 replication类型在集 ......
一 前期准备
1 [kiosk@foundation0 ~]$ ssh ceph@serverc #登录ceph集群节点 2 [ceph@serverc ~]$ ceph health #确保集群状态正常 3 health_ok
提示:相关部署参考《001.ansible部署rhcs存储集群》。
二 存储池概述
2.1 存储池
red hat ceph存储池池是red hat ceph存储集群用于存储对象的逻辑分区。
池有特定的属性:池类型,它确定池用于确保数据持久性的保护机制。
replication类型在集群中分布每个对象的多个副本。
erasure coding类型将每个对象分割成块,并将它们与其他擦除编码块一起分发,以使用自动纠错机制保护对象。
池中存在一定的数量的pg,它们将它们的对象存储在一组由crush算法确定的osd中。
ceph使用crush规则集来标识哪个放置组应该包含它存储的每个对象。
访问级别用于确定不同用户的访问权限的访问权限。
当ceph在池中存储对象时,它使用crush算法将对象分配给池中的一个pg。根据池的配置和crush算法,pg自动映射到一组osds。这决定了ceph用来存储对象的osds。池类型决定该对象如何在该集合的osds中复制或存储。
存储管理员可以配置crush,以便ceph存储使用特定类型存储设备(如ssd)或位于不同物理位置的设备上的osd来存储对象。
提示:池中放置组的数量对性能有重要影响。如果在池中配置太少的放置组,那么需要在每个pg中存储太多的数据,如果您在一个池中配置了太多的放置组,osds将需要大量的ram和cpu资源。通常,一个池应该配置为每个osd包含100-200个放置组。默认情况下,当您创建一个池时,ceph会检查每个osd的pg数量是否已经超过200,如果是,ceph将不会创建池。如果一个池已经达到了这个限制,ceph health命令还会显示一个警告。这个限制由/etc/ceph/ceph conf配置文件中的mon_max_pg_per_osd参数控制。
三 存储池常见操作
3.1 启用存储池
创建池之后,管理员必须显式地配置能够使用它的ceph应用程序的类型:ceph块设备(也称为rados块设备或rbd)、ceph对象网关(也称为rados网关或rgw)、ceph文件系统(cephfs)。
命令:ceph osd pool application enable pool-name app
解析:
app通常指:
cephfs:用于ceph文件系统;
rbd:用于ceph块设备;
rgw:用于ceph对象网关。
3.2 池相关命令
3.3 池配额
管理员可以设置配额来限制可以存储在池中的最大字节数或最大对象数。
命令:ceph osd pool set-quota pool-name max_objects obj-count max_bytes bytes
提示:当ceph达到池配额时,操作将被无限期阻塞。
3.4 池快照操作
重命名池:ceph osd pool rename current-name new-name
提示:重命名不会影响存储在池中的数据。
管理快照:ceph osd pool mksnap pool-name snap-name #创建快照
管理快照:ceph osd pool rmsnap pool-name snap-name #删除快照
检索快照:rados -p pool-name -s snap-name get object-name file
回滚快照:rados -p pool-name rollback object-name snap-name
注意:ceph不支持对erasure类型池进行快照。
3.5 池的修改操作
设置池参数:ceph osd pool set pool-name parameter value
查看池参数:ceph osd pool get pool-name parameter
查看池所有参数:ceph osd pool get pool-name all
常见参数:size参数控制池的副本数量,并映射到osd_pool default_size配置文件参数(默认为3)。pg_num参数控制池的放置组的数量,并映射到osd_pool_default_pg_num配置文件参数(默认为8)。
3.6 删除池
命令:ceph osd pool delete pool-name pool-name --yes-i-really-really-mean-it
注意:在red hat ceph storage 3中,为了提供更高的保护,ceph将mon allow pool delete confiquration参数设置为false。当配置此参数后,使用--yes-i-really-really-mean-it选项,ceph osd池删除命令不会导致池的删除。您可以将mon允许池删除参数设置为true,并重新启动mon服务以允许池删除。
在配置mon_alow_pool_delete为true后,仍然可以通过在池级别将no delete选项设置为ture来保护池不被删除,命令:ceph osd pool set pool-name nodelete true。
提示:删除池之后,应该删除与该池相关的所有配置,包括专用于池的用户和crush map规则。
3.7 池的命名空间
在池中配置的命名空间是池中对象的逻辑组。限制用户用户对池的访问,使用户只能在该名称空间中存储或检索对象。名称空间的优点是可以使用它们来限制用户对池的一部分的访问,它们允许对池进行逻辑分区,并将应用程序限制在池中特定的名称空间内。因此,几个应用程序可以安全地共享一个池,并且不至于池的数量过多。
提示:名称空间目前只支持直接使用librados的应用程序。
要将对象存储在命名空间中,客户机应用程序必须提供池和名称空间名称。默认情况下,每个池包含一个名称空间,名称为空,称为defaul名称空间。
例如,从池中存储和检索对象的rados命令接受-n name或--namespace=name选项来指定要使用的名称空间。
命令:rados -p mytestpool -n system put srv /etc/services
解析:将/etc/services文件作为srv对象存储在mytestpool池中的system命名空间中。
命令:rados -p mytestpool -n system ls
解析:在所有名称空间中列出池中的所有对象。
提示:若需要以json格式返回结果,可添加--format=ison选项。
四 复制存储池
4.1 创建复制存储池
命令:ceph osd pool create pool-name pg-num [pgp-num] [replicated] [crush-ruleset-name] \ [expected-num-objects]
解析:
pool-name:池名称;
pg-num:池中的pg总数;
pgp-num:池的有效放置组数。通常,这应该等于pg的总数。
duplicate:指定这是一个复制池,如果不包含在命令中,则通常是默认值。
crush-ruleset-name是:用于此池的crush名称。默认值为:osd_pool_default_crush_replicated_ruleset。
提示:一个osd需要管理的pgs越多,它需要的资源就越多。同时配置红帽ceph存储重要的创建池之后,不能减少池中放置组的数量。但是,可以增加放置组的数量。
五 纠删码池
5.1 纠删码池概述
纠删码池使用擦除纠删码而不是复制来保护对象数据。当将一个对象存储在纠删码池中时,该对象被划分为许多数据块,这些数据块存储在单独的osds中。此外,还根据数据块计算了大量的纠删码块,并将其存储在不同的osd中。如果包含块的osd失败,可以使用纠删码块来重构对象的数据。
纠删码池与复制池不同,它不依赖于存储每个对象的多个完整副本。
每个对象的数据被分成k个数据块。
计算了m个编码块大小与数据块大小相同的纠删码块。
对象存储在总共k + m 个osds上。
提示:纠删码池比复制池需要更少的存储空间来获得类似级别的数据保护。可以降低存储集群的成本和大小。然而,计算纠删码块会增加cpu和内存开销,从而降低纠删码池的性能。此外,在red hat ceph storage 3中,需要部分对象写的操作不支持擦除编码池。目前纠删码池的使用限制在执行完整对象写入和追加的应用程序中,比如ceph对象网关。即red hat ceph存储目前只支持通过ceph对象网关访问的纠删码池。
5.2 创建纠删存储池
命令:ceph osd pool create pool-name pg-num [pgp-num] erasure [erasure-code-profile] \[crush-ruleset-name] [expected-num-objects]
解析:
pool-name:池名称;
pg-num:池中的pg总数;
pgp-num:池的有效放置组数。通常,这应该等于pg的总数。
erasure:指定这是一个纠删码池,如果不包含在命令中,则默认是复制池。
erasure-code-profile:指定是要使用的配置文件。可以使用ceph osd erasure-code-profile创建新的配置文件,配置文件定义要使用的k和m值以及erasure插件。
crush-ruleset-name是:用于此池的crush名称。如果没有设置,ceph将使用erasure-code-profile文件中定义。
提示:一个osd需要管理的pgs越多,它需要的资源就越多。同时配置红帽ceph存储重要的创建池之后,不能减少池中放置组的数量。但是,可以增加放置组的数量。
5.3 纠删池配置文件
纠删池配置文件配置纠删池用于存储对象的数据块和纠删块的数量,以及要使用的擦除codinq插件和算法。可以创建新的配置文件来定义一组新的纠删参数。ceph在安装期间创建名为default的配置文件。这个配置文件被配置为将对象分成两个数据块和一个编码块。ceph有一个基于插件的系统来控制擦除编码是如何实现的,并且已经创建了许多不同的插件,它们以不同的方式管理擦除编码。默认配置文件使用jerasure插件,这是最灵活和通用的选项。red hat ceph storage 3还支持本地可修复擦除代码(lrc)插件。
提示:红帽ceph存储只支持jerasure和本地可修复擦除代码(lrc)插件。
查看参数:ceph osd erasure-code-profile get default
设置参数:ceph osd erasure-code-profile set profile-name arguments
命令:ceph osd erasure-code-profile set myprofile k=3 m=2 crush-failure-domain=rack
解析:创建一个概要文件,该概要文件将对象划分为三个数据块(k=3),并用两个编码块(m=2)保护它们,crush-failure-domain=rack参数确保ceph不会在同一个机架中存储两个块。
命令:
ceph osd erasure-code-profile ls #列出现有的配置文件
ceph osd erasure-code-profile rm profile-name #删除现有配置文件
ceph osd erasure-code-profile get profile-name #查看现有配置文件
注意:不能修改或更改现有池的擦除代码纠删配置文件。
六 ceph配置文件
6.1 ceph配置文件介绍
默认情况下,ceph守护进程和客户机/etc/ceph/ceph.conf文件读取配置。修改配置参数时,必须确保所有集群节点和客户端/etc/ceph/ceph.conf文件一致。若使用ansible来管理您的red hat ceph存储集群配置,它将使您的ceph配置文件在其所有节点上保持同步。
ceph.conf文件使用基于ini的文件格式,包含几个部分,其中包括与ceph守护进程和客户机相关的配置。
提示:参数名称可以使用空格、下划线或破折号作为分隔符,例如osd journal size、osd_journal_size和osd-journal-size都是有效的等效参数名称。
使用特定守护进程的设置进行分组:
- [global]:存储所有守护进程共有的一般配置和设置。任何进程都会读取该配置,包括客户机。在其他更具体的配置中会重写global设置的参数。
- [mon]:存储与monitors(mon)相关的配置。
- [osd]:存储与osd守护进程相关的配置。
- [mgr]:存储与managers(mgr)相关的配置。
- [mds]:存储与元数据服务器(mds)相关的配置。
- [client]:存储应用于所有ceph客户机的配置。
提示:rhcs在/usr/share/doc/ceph/sample.ceph.conf中提供了一个配置示例文件。
注意:若需要针对某节点特定配置,可使用[daemon-type.instance-id]进行复写,参考如下:
[mon]
#所有mon节点的配置;
[mon.serverc]
#serverc区别于mon的独特配置。
对于客户端instance-id为用户名。
6.2 常见配置
global模块定义全局参数,即定义集群范围的参数。它通常包括以下配置设置:
- 带有所有监视器列表的mon主机。
- mon初始成员设置为必须在集群启动时启动的监视器列表,以建立仲裁。
- 启用或禁用ceph组件之间使用cephx身份验证的设置(默认启用)。
- ceph环境中使用的网络,通常一个用于osds(集群网络),一个用于客户机(公共网络)。
6.3 查看配置
命令:ceph daemon type.id config show #查看所有参数和值
示例:ceph daemon osd.0 config show
命令:ceph daemon type.id config get parameter #查看指定参数
示例:ceph daemon type.id config get mds_data
6.4 ansible ceph配置文件
在部署节点上使用ansible部署,调用/usr/share/ceph-ansible中的ansible playbook部署或更新red hat ceph存储集群时,它都会在每个节点上重新创建/etc/ceph/ceph.conf文件。
在/usr/share/ceph-ansible_group_vars/,编辑ceph_conf_overrides变量,以添加新的节或配置参数。ansible将该变量转换为ini格式,并将其添加到生成的ceph.conf文件。
提示:部署新的配置到节点时候,需要在/usr/share/ceph-ansible目录使用ansibe-playbook site.yml命令。
七 启动和停止ceph
7.1 概述
使用systemct1命令管理ceph服务。systemctl命令可用于管理ceph服务。有一个systemd命令控制所有ceph守护进程,也存在独立的命令只控制特定类型的守护进程。
- ceph.target:启动或停止当前节点上的所有守护进程
- ceph-type.target:启动或停止特定类型的所有守护进程
7.2 常见命令
上一篇: [憨笑]二宝儿今天早上说
发表评论