Ceph中文文档

Ceph简介

Ceph存储群集至少需要一个Ceph监视器(Ceph Monitor)、Ceph管理器(Ceph Manager)和Ceph OSD(对象存储守护程序)((Object Storage Daemon))。在运行Ceph文件系统客户端时,还需要Ceph元数据服务器(Ceph Metadata Server)。

  • 监视器(Monitors):Ceph监视器(Ceph mon)维护集群状态的映射,包括监视器映射、管理器映射、OSD映射、MDS映射和CRUSH map。这些映射是Ceph守护进程相互协调所需的关键集群状态。监视器还负责管理守护进程和客户端之间的身份验证。为了实现冗余和高可用性,通常至少需要三台监视器。

  • 管理器(Managers):Ceph管理器守护程序(Ceph mgr)负责跟踪运行时指标和Ceph群集的当前状态,包括存储利用率、当前性能指标和系统负载。Ceph Manager守护进程还托管基于python的模块,以管理和公开Ceph集群信息,包括基于web的Ceph仪表板和REST API。高可用性通常需要至少两个管理器。

  • Ceph OSDs:Ceph OSD(对象存储守护程序 object storage daemon,Ceph OSD)存储数据,处理数据复制(handles data replication)、恢复(recovery)、重新平衡(rebalancing),并通过检查其他Ceph OSD守护程序的心跳信号,向Ceph监控器和管理器提供一些监控信息。为了实现冗余和高可用性,通常至少需要3个Ceph OSD。

  • MDSs:Ceph元数据服务器(MDS,Ceph MDS)代表Ceph文件系统存储元数据(即,Ceph块设备和Ceph对象存储不使用MDS)。Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls、find等),而不会给Ceph存储集群带来巨大负担。

Ceph将数据作为对象存储在逻辑存储池中。使用CRUSH算法,Ceph计算哪个放置组应该包含该对象,并进一步计算哪个Ceph OSD守护进程应该存储该放置组。CRUSH算法使Ceph存储群集能够动态扩展、重新平衡和恢复。

硬件建议

RAM

一般来说,RAM越多越好。对于一个中等规模的集群来说,监视器Monitors/管理器Managers 节点可以使用64GB的容量;对于拥有数百个OSD的大型集群来说,128GB是一个合理的目标。BlueStore OSD有一个默认为4GB的内存目标。考虑到操作系统和管理任务(如监控和指标)的谨慎裕度,以及恢复过程中消耗的增加:建议每个BlueStore OSD配置约8GB。

Monitors and managers (ceph-mon and ceph-mgr)

Monitor and manager守护进程内存使用量通常随集群的大小而变化。请注意,在启动时以及拓扑更改和恢复期间,这些守护进程将需要比稳态运行期间更多的RAM,因此请计划峰值使用率。对于非常小的集群,32GB就足够了。对于高达300个OSD的集群,可以使用64GB。

Metadata servers (ceph-mds)

元数据守护进程的内存利用率取决于其缓存配置为消耗多少内存。我们建议大多数系统的最小容量为1 GB

Memory

Bluestore使用自己的内存来缓存数据,而不是依赖操作系统页面缓存。在bluestore中,您可以使用osd_memory_target配置选项来调整OSD试图消耗的内存量

  • 通常不建议将osd_memory_target设置为2GB以下(这可能无法将内存保持在如此低的水平,还可能导致性能极低)

  • 将内存目标设置在2GB和4GB之间通常有效,但可能会导致性能下降:在IO期间,可能会从磁盘读取元数据,除非活动数据集相对较小

  • 4GB是当前默认的osd_memory_target大小。此默认值是为典型用例选择的,旨在平衡典型用例的内存需求和OSD性能

  • 当处理多个(小)对象或大(256GB/osd或更多)数据集时,将osd_memory_target设置为高于4GB可以提高性能

最低硬件建议

ceph-osd:

RAM: 每个守护进程4GB以上(越多越好) 2-4GB经常运行(可能很慢) 不建议小于2GB

ceph-mon:

Processor: 2 core

RAM: 每个守护进程24GB以上

ceph-mds:

Processor: 2 core

RAM: 每个守护进程2GB以上

安装Ceph

推荐方法

Cephadm使用容器和systemd安装和管理Ceph群集,并与CLI和仪表板GUI紧密集成。

cephadm与新的orchestration API完全集成,并完全支持新的CLI和仪表板功能来管理集群部署。

cephadm需要容器支持(podman或docker)和Python 3。

其他方法

ceph-ansible

ceph-deploy

Cephadm

cephadm部署和管理Ceph集群。它通过SSH将manager守护进程连接到主机来实现这一点。manager守护进程能够添加、删除和更新Ceph容器。cephadm不依赖外部配置工具,如Ansible、Rook和Salt。

cephadm管理Ceph群集的整个生命周期。这个生命周期从引导过程开始,cephadm在单个节点上创建一个小型Ceph集群。此群集由一个监视器和一个管理器组成。cephadm然后使用编排界面(“第2天”命令)扩展集群,添加所有主机,并提供所有Ceph守护进程和服务。此生命周期的管理可以通过Ceph命令行界面(CLI)或仪表板(GUI)执行。

部署新的Ceph集群

Cephadm通过在单个主机上“bootstrapping”,扩展集群以包含任何其他主机,然后部署所需的服务来创建一个新的Ceph集群。

安装cephadm

cephadm可以: bootstrap一个新集群; 使用Ceph CLI启动容器化shell; 协助调试容器化Ceph守护进程

dnf install --assumeyes centos-release-ceph-pacific.noarch
dnf install --assumeyes cephadm

Bootstrap一个新集群

bootstrap之前要知道

创建新Ceph群集的第一步是在Ceph群集的第一台主机上运行cephadm bootstrap命令。在Ceph集群的第一台主机上运行cephadm bootstrap命令会创建Ceph集群的第一个“monitor daemon”,该监控守护程序需要一个IP地址。必须将Ceph群集的第一台主机的IP地址传递给Ceph bootstrap命令

如果有多个网络和接口,请确保选择一个可供任何访问Ceph群集的主机访问的网络和接口。

运行bootstrap命令

cephadm bootstrap –mon-ip *<mon-ip>*

此命令将:

  • 在本地主机上为新群集创建监视器和管理器守护程序。

  • 为Ceph集群生成一个新的SSH密钥,并将其添加到root用户的/root/.ssh/authorized_keys 文件

  • 将公钥的副本写入/etc/ceph/ceph.pub

  • 将最小配置文件写入/etc/ceph/ceph.conf. 需要此文件才能与新群集通信

  • 写一份client.admin管理(特权!)/etc/ceph/ceph.client.admin.keyring的密钥

  • 将_admin标签添加到引导主机。默认情况下,任何带有此标签的主机(也)都将获得/etc/ceph/ceph.conf和/etc/ceph/ceph.client.admin.keyring的副本

启用Ceph CLI

Cephadm不要求在主机上安装任何Ceph软件包。但是,我们建议启用对ceph命令的轻松访问。有几种方法可以做到这一点:

  • cephadm shell命令在安装了所有Ceph包的容器中启动bash shell。默认情况下,如果在主机上的/etc/ceph中找到配置文件和keyring文件,则会将它们传递到容器环境中,这样shell就可以完全正常工作。请注意,在MON主机上执行时,cephadm shell将从MON容器推断配置,而不是使用默认配置。

cephadm shell

  • 要执行ceph命令,还可以运行以下命令:

cephadm shell -- ceph -s

  • 您可以安装ceph common包,其中包含所有ceph命令,包括ceph、rbd、mount。ceph(用于安装CephFS文件系统)等:

cephadm add-repo --release octopus
cephadm install ceph-common

  • 确认ceph命令可通过以下方式访问:

ceph -v

  • 确认ceph命令可以连接到群集,并确认其状态为:

ceph status

添加主机

接下来,通过添加主机将所有主机添加到集群。

默认情况下,所有带有_admin标签的主机上的/etc/ceph中都会维护一个ceph.conf文件和一个client.admin keyring副本,该标签最初仅应用于引导主机。我们通常建议为一台或多台其他主机提供_admin标签,以便在多台主机上轻松访问Ceph CLI(例如,通过cephadm shell)。要将_admin标签添加到其他主机

ceph orch host label add *<host>* _admin

添加额外的MONs

典型的Ceph集群有三个或五个分布在不同主机上的监视器守护进程。如果集群中有五个或更多节点,建议部署五个监视器。

添加存储

要向群集添加存储,请告诉Ceph使用任何可用和未使用的设备:

ceph orch apply osd --all-available-devices

启用OSD内存自动调谐

在其他情况下,如果集群硬件并非由Ceph独家使用(超融合),请减少Ceph的内存消耗,如下所示:

# hyperconverged only:
ceph config set mgr mgr/cephadm/autotune_memory_target_ratio 0.2

然后启用内存自动调谐:

ceph config set osd osd_memory_target_autotune true

使用CEPH

To use the Ceph Filesystem, follow Deploy CephFS.

To use the Ceph Object Gateway, follow Deploy RGWs.

To use NFS, follow NFS Service

To use iSCSI, follow Deploying iSCSI

主机管理

要列出与群集关联的主机,请执行以下操作:

ceph orch host ls [--format yaml] [--host-pattern <name>] [--label <label>] [--host-status <status>]

其中可选参数“host-pattern”、“label”和“host-status”用于筛选

添加主机

要将每个新主机添加到群集,请执行两个步骤:

  1. 在新主机的根用户的authorized_keys文件中安装集群的公共SSH密钥:

ssh-copy-id -f -i /etc/ceph/ceph.pub root@*<new-host>*

2. 告诉Ceph新节点是群集的一部分:

ceph orch host add *<newhost>* [*<ip>*] [*<label1> …*]

主机标签

orchestrator支持将标签分配给主机。标签是自由形式的,本身没有特殊意义,每个主机可以有多个标签。它们可用于指定守护进程的位置。

Labels can be added when adding a host with the --labels flag:

ceph orch host add my_hostname –labels=my_label1 ceph orch host add my_hostname –labels=my_label1,my_label2

To add a label a existing host, run:

ceph orch host label add my_hostname my_label

服务管理

  • MON Service

  • MGR Service

  • OSD Service

  • RGW Service

  • MDS Service

  • NFS Service

  • iSCSI Service

  • Custom Container Service

  • Monitoring Services

  • SNMP Gateway Service

服务状态

要查看Ceph群集中运行的其中一个服务的状态,请执行以下操作:

  1. 使用命令行打印服务列表。

  2. 找到要检查其状态的服务。

  3. 打印服务的状态。

以下命令打印编排器已知的服务列表。要将输出限制为仅在指定主机上的服务,请使用可选的–host参数。要将输出仅限于特定类型的服务,请使用可选的–type参数(mon、osd、mgr、mds、rgw):

ceph orch ls [–service_type type] [–service_name name] [–export] [–format f] [–refresh]

Discover the status of a particular service or daemon:

ceph orch ls –service_type type –service_name <name> [–refresh]

To export the service specifications knows to the orchestrator, run the following command.

ceph orch ls –export

The service specifications exported with this command will be exported as yaml and that yaml can be used with the ceph orch apply -i command.

守护进程状态

守护进程是正在运行的systemd单元,是服务的一部分。

要查看守护进程的状态,请执行以下操作:

  1. 打印编排器已知的所有守护进程的列表。

  2. 查询目标守护程序的状态。

首先,打印编排器已知的所有守护进程的列表:

ceph orch ps [–hostname host] [–daemon_type type] [–service_name name] [–daemon_id id] [–format f] [–refresh]

然后查询特定服务实例(mon、osd、mds、rgw)的状态。对于OSD,id是数字OSD id。对于MDS服务,id是文件系统名称:

ceph orch ps –daemon_type osd –daemon_id 0

服务规范

服务规范是用于指定服务部署的数据结构。以下是YAML中的服务规范示例:

service_type: rgw
service_id: realm.zone
placement:
hosts:
– host1
– host2
– host3
unmanaged: false
networks:
– 192.169.142.0/24
spec:
# Additional service specific attributes.

service_id

The name of the service. Required for iscsimdsnfsosdrgwcontaineringress

service_type

The type of the service. Needs to be either a Ceph service (moncrashmdsmgrosd or rbd-mirror), a gateway (nfs or rgw), part of the monitoring stack (alertmanagergrafananode-exporter or prometheus) or (container) for custom containers.

mon、mgr和监视类型的服务规范不需要服务id

检索正在运行的服务规范

ceph orch ls –service-name rgw.<realm>.<zone> –export > rgw.<realm>.<zone>.yaml
ceph orch ls –service-type mgr –export > mgr.yaml
ceph orch ls –export > cluster.yaml

更新服务规范

  1. List the current ServiceSpec:
    ceph orch ls –service_name=<service-name> –export > myservice.yaml

  2. Update the yaml file:
    vi myservice.yaml

  3. Apply the new ServiceSpec:
    ceph orch apply -i myservice.yaml [–dry-run]

守护进程放置

Note
cephadm will not deploy daemons on hosts with the _no_schedule label; see Special host labels.

Note
The apply command can be confusing. For this reason, we recommend using YAML specifications.
Each ceph orch apply <service-name> command supersedes the one before it. If you do not use the proper syntax, you will clobber your work as you go.
For example:
ceph orch apply mon host1 ceph orch apply mon host2 ceph orch apply mon host3
This results in only one host having a monitor applied to it: host 3.
(The first command creates a monitor on host1. Then the second command clobbers the monitor on host1 and creates a monitor on host2. Then the third command clobbers the monitor on host2 and creates a monitor on host3. In this scenario, at this point, there is a monitor ONLY on host3.)
To make certain that a monitor is applied to each of these three hosts, run a command like this:
ceph orch apply mon “host1,host2,host3”
There is another way to apply monitors to multiple hosts: a yaml file can be used. Instead of using the “ceph orch apply mon” commands, run a command of this form:
ceph orch apply -i file.yaml
Here is a sample file.yaml file
service_type: mon

placement:

hosts:

– host1

– host2

– host3

CEPHADM操作

监视CEPHADM日志消息

Cephadm将日志写入Cephadm集群日志通道。您可以通过读取日志来实时监控Ceph的活动。运行以下命令以实时查看日志:

ceph -W cephadm

Ceph守护程序日志

Ceph守护进程通常会将日志写入/var/log/Ceph。默认情况下,Ceph守护进程会记录到日志,容器运行时环境会捕获Ceph日志。他们可以通过journalctl访问

健康检查

cephadm模块提供额外的运行状况检查,以补充集群提供的默认运行状况检查。这些额外的健康检查分为两类:

cephadm操作:当cephadm模块处于活动状态时,始终会执行此类健康检查。

集群配置:这些运行状况检查是可选的,重点是集群中主机的配置。

资源下载: