vlambda博客
学习文章列表

读书笔记《ceph-cookbook-second-edition》监控Ceph群集

Monitoring Ceph Clusters

在本章中,我们将介绍以下秘籍:

  • Monitoring Ceph clusters – the classic way
  • Introducing Ceph Metrics and Grafana
  • Installing and configuring Ceph Metrics with the Grafana dashboard
  • Monitoring Ceph Clusters with Ceph Metrics with the Grafana dashboard

Introduction

无论您拥有小型、中型还是 Exascale 集群,监控都是基础架构中最关键的部分。一旦您完成了 Ceph 集群的设计、部署和生产服务实施,监控就成为存储管理员的主要职责。在本章中,我们将学习多种监控 Ceph 集群及其组件的方法。我们将使用其原生 CLI 工具介绍 Ceph 的 CLI 和 GUI 监控;我们还将使用 Grafana 实现 Ceph Metrics,这是一个开源 Ceph 集群监控仪表板。

Monitoring Ceph clusters – the classic way

作为存储管理员,您需要密切关注您的 Ceph 存储集群,并了解特定时间发生的情况。定期和有纪律的监控可让您随时了解集群运行状况。根据监控通知,您有更多时间在服务中断之前采取必要的措施。

监控 Ceph 集群是一项日常任务,包括监控 MON、OSD、MDS、PG 以及存储配置服务,例如 RBD、radosgw、Ceph FS 和 Ceph 客户端。 Ceph 默认带有一组丰富的本地命令行工具和 API 来对这些组件进行监控。除此之外,还有一些开源项目是专门为在 GUI 单视图仪表板上监控 Ceph 集群而开发的。在以下秘籍中,我们将重点介绍用于集群监控的 Ceph CLI 工具。

在这个秘籍中,我们将学习用于监控整个 Ceph 集群的命令。

How to do it...

下面是我们如何监控 Ceph 集群。这些步骤将在以下部分中按主题说明

Checking the cluster's health

要检查集群的运行状况,请使用 ceph 命令,然后使用 health 作为命令选项:

# ceph health

这个命令的输出会被分成几个部分,用分号隔开:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集

输出的第一部分显示您的集群处于警告状态,HEALTH_WARN,如 < kbd>64 pgs 降级。第二部分表示 1,408 个 PG 不干净,输出的第三部分表示正在对 5,744 个对象中的 1 个进行集群恢复,并且集群降级了 0.017%。如果您的集群健康,您将收到 HEALTH_OK 的输出。

要了解集群运行状况的更多详细信息,请使用 ceph health detail 命令。该命令会告诉你所有不活跃和干净的 PG,即所有不干净、不一致和降级的 PG 都会在此处列出及其详细信息。如果您的集群健康,您将收到 HEALTH_OK 的输出。

读书笔记《ceph-cookbook-second-edition》监控Ceph群集

您可以在上图中看到,我们有像 active+remapped 这样的 PG 状态,并且具有给定的代理集。这里的 active 意味着 Ceph 将处理对归置组的请求,而 remapped 意味着归置组临时映射到与 CRUSH 指定的不同的 OSD 集。

Monitoring cluster events

您可以使用 ceph 命令和 监控集群事件-w 选项。该命令将实时显示所有集群事件的消息,包括信息[INF]、警告[WRN]和错误[ERR]。此命令的输出将是连续的、实时的集群更改;您可以使用 Ctrl + C 进入 shell:

# ceph -w
读书笔记《ceph-cookbook-second-edition》监控Ceph群集

您可以在前面的屏幕截图中看到,我们列出了两种类型的事件消息,WRNINF,一种用于 PG 的恢复,另一种用于监控时钟偏差。

还有其他选项可与 ceph 命令一起使用,以收集不同类型的事件详细信息。它们如下:

  • --watch-debug: to watch debug events
  • --watch-info: to watch info events
  • --watch-sec: to watch security events
  • --watch-warn: to watch warning events
  • --watch-error: to watch error events

The cluster utilization statistics

要了解集群的空间利用率统计信息,请使用 ceph 命令和 df 选项。此命令将显示总集群大小、可用大小、已用大小和百分比。这也会显示 POOLS 信息,如 NAME, ID,利用率,以及每个池中的对象数量:

# ceph df

输出如下:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集
Ceph df command output for checking cluster usage

ceph df 为我们提供了集群中每个池的 USED%USEDOBJECTS 的详细信息,我们这样做有 ceph df detail 命令。如果你在ceph df命令中添加detail switch,它会给你RAW USEDQUOTA OBJECTS详细信息.

Checking the cluster's status

检查集群状态是管理 Ceph 集群时最常见也是最频繁的操作。您可以使用 ceph 命令和 status 作为选项:

# ceph status

除了 status 子命令,您还可以使用较短的版本, -s,作为一个选项:

# ceph -s

以下截图显示了我们集群的状态:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集

此命令将为您的 Ceph 集群转储大量有用信息:

  • cluster: This command represents the Ceph unique cluster ID.
  • health: This command shows the cluster health.
  • monmap: This command represents the monitor map epoch version, monitor information, monitor election epoch version, and monitor quorum status.
  • fsmap: This command represents the fsmap (mdsmap) epoch version and the fsmap (mdsmap) status.
  • osdmap: This command represents the OSD map epoch, OSD total, up and in count.
  • pgmap: This command shows the pgmap version, total number of PGs, pool count, capacity in use for a single copy, and total objects. It also displays information about cluster utilization including used size, free size, and total size. Finally, it will display the PG status.
In order to view the real-time cluster status, you can use ceph status with the Linux watch command to get the continuous output:

# watch ceph -s

The cluster authentication entries

Ceph 在基于密钥的身份验证系统上工作。一旦经过基于密钥的身份验证系统,所有集群组件就会相互交互。您可以将 ceph 命令与 auth list 子命令获取所有键的列表:

# ceph auth list
要了解更多关于命令操作的信息,您可以使用 help 与子选项。例如,运行 # ceph auth --help 并按照帮助中的说明使用命令。跨度>

Monitoring Ceph MON

通常,一个 Ceph 集群部署有多个 MON 实例以实现高可用性。由于有大量监视器,它们应该达到法定人数才能使集群正常运行。

How to do it...

我们现在将重点介绍用于 OSD 监控的 Ceph 命令。这些步骤将在以下部分中按主题进行解释

Checking the MON status

要显示集群的 MON 状态和 MON 映射,请将 ceph 命令与 < span>mon statmon dump 子选项:

# ceph mon stat
# ceph mon dump

以下屏幕截图显示了此命令的输出:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集

Checking the MON quorum status

为了维持 Ceph MON 之间的仲裁,集群应该始终拥有 Ceph 集群中一半以上的可用监视器。检查集群的仲裁状态在 MON 故障排除时非常有用。您可以使用 ceph 命令和 quorum_status 子命令:

# ceph quorum_status -f json-pretty

以下屏幕截图显示了此命令的输出:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集

仲裁状态显示election_epoch,即选举版本号, quorum_leader_name,表示仲裁领导者的主机名。它还显示 MON 地图纪元和集群 ID。每个集群监视器都分配有一个等级。对于 I/O 操作,客户端首先连接到 quorum Lead 监视器;如果 leader MON 不可用,则客户端连接到下一个 rank 监视器:

要为 ceph 命令生成格式化输出,请使用 -f json-pretty 选项。

Monitoring Ceph OSDs

监控 OSD 是一项至关重要的任务,需要引起很多关注,因为有很多 OSD 需要监控和处理。你的集群越大,它拥有的 OSD 就越多,它需要的监控就越严格。通常,Ceph 集群托管大量磁盘,因此面临 OSD 故障的几率非常高。

How to do it...

我们现在将重点介绍用于 OSD 监控的 ceph 命令。这些步骤将在以下部分中按主题进行解释。

OSD tree view

OSD 中的树形视图对于了解诸如 in< 等 OSD 状态非常有用span>outup向下。 OSD 中的树视图显示每个节点及其所有 OSD 及其在 CRUSH 图中的位置。您可以使用以下命令查看 OSD 的树状视图:

# ceph osd tree
读书笔记《ceph-cookbook-second-edition》监控Ceph群集

此命令显示 Ceph OSD 的各种有用信息,例如 WEIGHTUP/DOWN 状态和 in/out 状态。输出将根据您的 Ceph CRUSH 地图进行精美的格式化。如果您要维护一个大型集群,这种格式将有助于从一长串列表中定位您的 OSD 及其托管服务器。

OSD statistics

要检查 OSD 统计信息,请使用 # ceph osd stat;此命令将帮助您获取 OSD 地图 epoch、总 OSD 计数及其 in up 状态。

要获取有关 Ceph 集群和 OSD 的详细信息,请执行以下命令:

# ceph osd dump

这是一个非常有用的命令,它会输出 OSD map epoch、pool 详细信息包括 pool ID、pool name、pool type,即复制或擦除、CRUSH 规则集、复制大小、min_size ( PG 中为 IO 服务的 up/in OSD 的最小数量)和 PG。该命令还将显示每个 OSD 的信息,例如 OSD ID、状态、权重、最后一个清洁间隔时期等。所有这些信息对于集群监控和故障排除都非常有帮助。

你也可以建立一个OSD黑名单,防止它连接到其他OSD,这样就不会发生心跳过程。它主要用于防止滞后的元数据服务器对 OSD 上的数据进行不良更改。通常,黑名单由 Ceph 自己维护,不需要人工干预,但很高兴知道。

要显示列入黑名单的客户端,请执行以下命令:

# ceph osd blacklist ls

Checking the CRUSH map

我们可以直接从 ceph osd 命令查询 CRUSH 图。 CRUSH map 命令行实用程序与 CRUSH map 反编译后的常规查看和编辑方式相比,可以节省大量系统管理员的时间:

  • To view the CRUSH map, execute the following command:
        # ceph osd crush dump
  • To view the CRUSH map rules, execute the following command:
        # ceph osd crush rule list
  • To view the detailed CRUSH rule, execute the following command:
        # ceph osd crush rule dump <crush_rule_name>

下图展示了我们查询CRUSH图的输出:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集

如果您正在管理具有数百个 OSD 的大型 Ceph 集群,有时很难在 CRUSH 映射中找到特定 OSD 的位置。如果您的 CRUSH 地图包含多个存储桶层次结构,这也很困难。您可以使用 ceph osd find 在 CRUSH 地图中搜索 OSD 及其位置:跨度>

# ceph osd find <Numeric_OSD_ID>
读书笔记《ceph-cookbook-second-edition》监控Ceph群集

Monitoring PGs

OSD 存储 PG,每个 PG 都包含对象。集群的整体健康状况主要取决于 PG。只有当所有 PG 都处于状态 active+ 时,集群才会保持在 HEALTH_OK 状态干净。如果您的 Ceph 集群不健康,那么 PG 可能不是 active+clean。归置组可以表现出多种状态,甚至是多种状态的组合。以下是 PG 可以是的一些状态:

  • Creating: The PG is being created.
  • Peering: The process of bringing all of the OSDs that store PGs into agreement about the state of all objects including their metadata in that PG.
  • Active: Once the peering operation is completed, Ceph lists the PG as active. Under the active state, the data in the PG data is available on the primary PG and its replica for the I/O operation.
  • Clean: A clean state means that the primary and secondary OSDs have successfully peered and no PG moves away from their correct location. It also shows that PGs are replicated the correct number of times.
  • Down: This means that the replica with the necessary data is down, so the PG is offline.
  • Degraded: Once an OSD is down, Ceph changes the state of all the PGs that are assigned to that OSD to degraded. After the OSD comes up, it has to peer again to make the degraded PGs clean. If the OSD remains down and out for more than 300 seconds, Ceph recovers all the PGs that are degraded from their replica PGs to maintain the replication count. Clients can perform I/O even after PGs are in the degraded stage.
  • Recovering: When an OSD goes down, the content of the PGs of that OSD fall behind the contents of the replica PGs on other OSDs. Once the OSD comes up, Ceph initiates a recovery operation on the PGs to keep them up to date with the replica PGs in other OSDs.
  • Backfilling: As soon as a new OSD is added to the cluster, Ceph tries to rebalance the data by moving some PGs from other OSDs to this new OSD; this process is known as backfilling. Once the backfilling is completed for the PGs, the OSD can participate in the client I/O.
  • Remapped: Whenever there is a change in the PG acting set, data migration happens from the old acting set OSD to the new acting set OSD. This operation might take some time depending on the data size that is being migrated to the new OSD. During this time, the old primary OSD of the old acting group serves to the client request. As soon as the data migration operation completes, Ceph uses new primary OSDs from the acting group.
代理集是指一组负责PG的OSD。第一个 OSD 被称为代理集中的主 OSD,它负责每个 PG 及其辅助 OSD 的对等和复制操作。它还招待来自客户端的 I/O 操作。已启动的 OSD 仍保留在代理集中。一旦主 OSD 为 down,它首先从up set 中移除;然后将辅助 OSD 提升为主 OSD。
  • Stale: Ceph OSD reports their statistics to the Ceph monitor every 0.5 seconds; by any chance, if the primary OSDs of the PG acting set fail to report their statistics to the monitors, or if other OSDs have reported the primary OSD down, the monitor will consider those PGs as stale.
  • Inconsistent: Ceph detects inconsistencies in one or more replica OSD of an object or multiple objects in the placement group (for example, objects are the wrong size, objects are missing from one replica after recovery finished, and so on).
  • Undersized: The placement group has fewer copies than the configured replication size.
  • Incomplete: Ceph detects that a placement group has missing information about writes that may have occurred, or does not have any healthy copies.
  • Snaptrim: The PGs are currently being trimmed.
  • Snaptrim_wait: The PGs are waiting to be trimmed.

您可以使用以下命令监控PG:

  • To get the PG status, run # ceph pg stat:
读书笔记《ceph-cookbook-second-edition》监控Ceph群集

pg stat命令的输出会以特定的格式显示很多信息:vNNNN: X pgs: Y active+clean; R MB 数据,U MB 使用,F GB / T GB 可用.

其中变量定义如下:

    • vNNNN: This is the PG map version number
    • X: The total number of PGs
    • Y: The number of PGs that have an active+clean state
    • R: The raw data stored
    • U: The real data stored after replication
    • F: The free capacity remaining
    • T: The total capacity
  • To get the PG list, execute the following command:
        # ceph pg dump -f json-pretty

这个命令会生成很多关于PG的基本信息,比如PG映射版本、PG ID、PG状态、代理集、代理集primary等等。
此命令的输出可能很大,具体取决于集群中 PG 的数量,如果需要,可以使用 json-pretty
运行; 它将以纯文本形式转储输出。

  • To query a particular PG for detailed information, execute the following command, which has the syntax as ceph pg <PG_ID> query:
        # ceph pg <pg_id> query
  • To list stuck PGs, execute the following command that has the syntax as ceph pg dump_stuck < unclean | Inactive | stale >:
        # ceph pg dump_stuck unclean

Monitoring Ceph MDS

元数据服务器仅用于 Ceph FS,目前还没有生产就绪。
元数据服务器有几种状态,例如 UP , DOWN, 活动 INACTIVE
在执行 MDS 的监控时,应确保 MDS 的状态MDS 是 UPACTIVE。以下命令将帮助您获取与 Ceph MDS 相关的信息。

How to do it...

您可以使用以下命令查看 Ceph 文件系统的详细信息:

  1. Check the Ceph FS Filesystem list:
        # ceph fs ls
  1. Check the MDS status:
        # ceph mds stat

输出如下图所示:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集
  1. Display the details of the Metadata Server:
        # ceph mds dump

输出显示在以下屏幕截图中:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集

Introducing Ceph Metrics and Grafana

Ceph Metrics 是一个工具,它允许用户直观地监控正在运行的 Ceph 集群中的各种指标。它有两个组件 collectd 和 Grafana。

collectd

collectd 是一个守护进程,它定期收集系统和应用程序性能指标,并提供一种以不同方式存储值的方法。它从各种来源收集指标,例如操作系统平台、用户应用程序、系统和用户日志文件以及外部设备,并累积这些信息或使其通过网络可用。

在 Ceph Metrics 中,Ceph 节点将安装 collectd 以及来自 cephmetrics-collectd 的收集器插件。

Grafana

Grafana 是一个开源、功能丰富的指标仪表板和图形编辑器,适用于 Graphite、Elasticsearch、OpenTSDB、Prometheus 和 InfluxDB。它有一个标语漂亮的分析和监控的开放平台

在 Ceph Metrics 中,仪表板主机将安装和配置 Grafana,以通过 Graphite-Web、Python-Carbon 和 Python-Whisper 堆栈查询从 Ceph 节点接收的数据来显示各种仪表板:https://github.com/ceph/cephmetrics

Ceph Metrics 项目的 GitHub 链接: https://github.com/ceph/cephmetrics

Installing and configuring Ceph Metrics with the Grafana dashboard

您已使用 ceph-ansible 设置集群,并且可以使用相同的 ceph-ansible 虚拟机安装 cephmetrics 以利用清单文件 - /etc/ansible/hosts

How to do it...

我们将使用以下命令在 ceph-node1 中配置 Ceph Metrics:

  1. In this book, ceph-ansible virtual machine is ceph-node1. Perform the following steps in ceph-node1. This will install repositories which include the cephmetrics packages and its dependencies.
        sudo su -
        mkdir ~/cephmetrics
        curl -L -o /etc/yum.repos.d/cephmetrics.repo 
        http://download.ceph.com/cephmetrics/rpm-
                                     master/el7/cephmetrics.repo
        yum install cephmetrics-ansible -y
  1. Edit the inventory file.

您需要修改 /etc/ansible/hosts 以添加 Ceph Metrics 节点,在本书中,我们使用 ceph-node1 作为 Ceph Metrics 节点。如果您在清单文件中提到的主机上运行 ansible-playbook,则需要将 ansible_connection=local 附加到清单文件中提到该主机的每一行。

  1. After adding the inventory, the file format looks like this:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集

在编写本书时,Ceph Metrics 正处于 CentOS 和 Ubuntu 的开发模式,我们针对它的一些限制进行了持续改进。以下 README 屏幕截图中列出了 Ceph Metrics 限制。

此文件存在于 ceph-node1 VM 路径中:/usr/share/cephmetrics-ansible/README.md

读书笔记《ceph-cookbook-second-edition》监控Ceph群集
  1. For CentOS installation, we need to change the devel_mode and the use_epel from false to true in roles/cephmetrics-common/defaults/main.yml file:
        use_epel: true
        devel_mode: true
读书笔记《ceph-cookbook-second-edition》监控Ceph群集
  1. Add the following lines at the top of the roles/ceph-collectd/tasks/configure_collectd.yml file because Ceph Metrics is still in development—this was a known issue so we need to do it by manually editing it:
        - name: Set collectd_dir
         set_fact:
         collectd_dir: "/usr/lib{{ '64' if ansible_pkg_mgr == 'yum' 
        else '' }}/collectd"
 
         - name: Set collectd_cephmetrics_dir
         set_fact:
         collectd_cephmetrics_dir: "{{ collectd_dir }}/cephmetrics"
  1. Run the Ceph Metrics playbook:
        ansible-playbook -v playbook.yml 
读书笔记《ceph-cookbook-second-edition》监控Ceph群集
  1. Once completed, you will have the following output having dashboard link and username and password:
读书笔记《ceph-cookbook-second-edition》监控Ceph群集

Monitoring Ceph clusters with Ceph Metrics with the Grafana dashboard

在这个秘籍中,您将了解如何借助 Ceph Metrics 和 Grafana 仪表板监控 Ceph 集群。仪表板包含有关主要 Ceph 守护进程及其性能的信息。

How to do it ...

你应该使用 Grafana 登录页面,使用链接 ceph-node1:3000/login 和用户名和密码为 admin

  1. Log in to the dashboard with the help of the given link and username/password:
读书笔记《ceph-cookbook-second-edition》监控Ceph群集
  1. Once you log in, you will have the following dashboard:
读书笔记《ceph-cookbook-second-edition》监控Ceph群集
Ceph Metrics Dashboard

前面的仪表板屏幕截图中的第一个浅绿色选项卡只是集群运行状况,即 HEALTH_OK,之后,三个深绿色选项卡是 MON、OSD 和 MDS,它们给出了总的守护进程:

    • For MON, you can see we have three MONs and all three are in the quorum
    • For OSD, you can see we have nine OSDs and all nine are up and in
    • For MDS, we can see we do not have any MDS because we do not have a MDS daemon running

以下是上一个 Ceph Metrics 仪表板屏幕截图的命令行中的集群状态:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集

仪表板还具有以下选项卡:

    • Capacity Utilization: Cluster capacity utilization
    • Placement Group Status: Placement group states—active+clean (green color), active+degraded (yellow color), and peering (blue color)
    • Recovery: Cluster data rebalance—recovery and backfill
    • Client IOPS: The client IOPS
    • Pools: Number of Pools
    • RBDs: Number of RBD images
    • OSD Apply vs Commit Latency: OSD Filestore apply vs commit latency, helps in tracking the OSD Filestore performance

最后一行有 Ceph 集群系统资源:

    • Disk IOPS: This is a tab which has information about cluster OSD node disk IOPS
    • Nearly Full Disks: This covers the nearly full disks in the cluster

此仪表板屏幕截图的集群运行状况为 HEALTH_WARN,因为一些归置组具有三种归置组状态——peering(蓝色)、active+degraded(黄色)和active+clean(绿色),如果所有归置组都不是active+clean,那么集群健康将处于警告状态:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集
Ceph Metrics Dashboard in Health Warn with different PG states
仪表板中的大多数选项卡会将您带到一个新的仪表板窗口,该窗口将包含有关该选项卡的完整信息。

例如, Health 标签详细:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集
Ceph Health in detail

第三行磁盘选项卡:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集

如果单击磁盘相关选项卡上方的任何一个选项卡,您将拥有以下仪表板:

读书笔记《ceph-cookbook-second-edition》监控Ceph群集
OSD disk tab in detail
Ceph Metrics 还可以报告您的 RGW 统计数据和 S3/SWIFT 协议详细信息。您可以在上一张图片中看到,它有 RGW 主机S3/SWIFT 选项卡。