操作指南

Red Hat Ceph Storage 5

Red Hat Ceph Storage 操作任务

摘要

本文档描述了如何执行红帽 Ceph 存储的操作任务。
红帽承诺替换我们的代码、文档和网页属性中存在问题的语言。我们从这四个术语开始: master、slave、blacklist 和 whitelist。这些更改将在即将发行的几个发行本中逐渐实施。详情请查看 CTO Chris Wright 信息

第 1 章 Ceph 编排器简介

作为存储管理员,您可以使用 Ceph 编排器和 Cephadm 实用程序来发现红帽 Ceph 存储集群中的设备和创建服务。

1.1. 使用 Ceph 编排器

红帽 Ceph 存储编排器是管理器模块,主要充当红帽 Ceph 存储集群与 Rook 和 Cephadm 等部署工具之间的桥梁,以获得统一体验。它们还与 Ceph 命令行界面和 Ceph 控制面板集成。

以下是 Ceph 编排器的工作流图:

Ceph 编排器

Red Hat Ceph Storage Orchestrator 类型

Red Hat Ceph Storage 编排器主要有三种类型:

  • 编排器 CLI :它们是编排器中使用的常见 API,包含一组可以实施的命令。这些 API 还提供通用命令行界面(CLI),以利用外部编排服务编排 ceph-mgr 模块。以下是 Ceph 编排器所用的命名法:

    • Host :这是物理主机的主机名,而不是容器内的 pod 名称、DNS 名称、容器名称或主机名。
    • 服务类型:这是服务的类型,如 nfs、mds、osd、mon、rgw、mgr 和 iscsi。
    • 服务 :由 Ceph 存储集群提供的功能服务,如监控服务、管理器服务、OSD 服务、Ceph 对象网关服务和 NFS 服务。
    • 守护进程:由一个或多个主机(如 Ceph 对象网关服务)部署的服务的特定实例可以具有在三个不同的主机上运行的不同 Ceph 对象网关守护进程。
  • Cephadm Orchestrator - 这是一个 Ceph 编排器模块,它不依赖于 Rook 或 Ansible 等外部工具,而是通过建立 SSH 连接并发出显式管理命令来管理集群中的节点。此模块可用于进行 天一操作和第二天操作。

    建议使用 Cephadm Orchestrator 在不利用任何部署框架(如 Ansible)的情况下安装 Ceph 存储集群。其理念是为管理器守护进程提供对 SSH 配置和密钥的访问权限,以便连接到集群中的所有节点以执行任何管理操作,例如创建存储设备清单、部署和更换 OSD,或启动和停止 Ceph 守护进程。此外,Cephadm Orchestrator 将部署由 systemd 管理的容器镜像,以允许独立升级并置服务。

    此编排器还可能突出显示一个工具,该工具封装了所有必要的操作,以管理基于当前主机上的容器镜像服务的部署,包括引导运行 Ceph 监控器和 Ceph 管理器的最小集群的命令。

  • rook 编排器 - Rook 是一个编配工具,它使用 Kubernetes Rook 操作器管理 Kubernetes 集群内运行的 Ceph 存储集群。rook 模块提供 Ceph 的编排器框架和 Rook 之间的集成。rook 是 Kubernetes 的开源原生云存储操作器。

    rook 遵循"operator"模型,其中在 Kubernetes 中定义自定义资源定义(CRD)对象来描述 Ceph 存储集群及其所需状态,rook operator 守护进程在控制循环中运行,将当前集群状态与所需状态进行比较,并采取措施进行聚合。描述 Ceph 所需状态的主要对象是 Ceph 存储集群 CRD,其中包括有关 OSD 应使用哪些设备的信息、应运行的 monitor 数,以及应使用的 Ceph 版本的信息。rook 定义几个其他 CRD 来描述 RBD 池和 CephFS 文件系统等。

    Rook 编排器模块是在 ceph-mgr 守护进程中运行的粘合器模块,通过在 Kubernetes 中更改 Ceph 存储集群来描述所需的集群状态来实施 Ceph 编排 API。Rook 集群的 ceph-mgr 守护进程作为 Kubernetes pod 运行,因此 rook 模块可以在没有任何显式配置的情况下连接到 Kubernetes API。

第 2 章 将非容器化红帽 Ceph 存储集群迁移到容器化环境中

红帽 Ceph 存储 5 仅支持容器化守护进程。它不支持非容器化存储集群。如果您要将非容器化裸机存储集群从 Red Hat Ceph Storage 4 升级到 Red Hat Ceph Storage 5,升级过程包括转换到容器化部署。您可以使用命令行界面将非容器化集群手动迁移到容器化集群。

先决条件

  • 正在运行的红帽 Ceph 存储非容器化集群。
  • 所有节点的根级别访问权限。

流程

  1. 可选:对于使用裸机存储集群中命令行界面配置的双向 RBD 镜像功能,集群不会迁移 RBD 镜像功能。对于这样的配置,请在将非容器化存储集群迁移到容器化存储集群前按照以下步骤执行:

    1. 在 Ceph 客户端节点上创建一个用户:

      语法

      ceph auth get client.PRIMARY_CLUSTER_NAME -o /etc/ceph/ceph.PRIMARY_CLUSTER_NAME.keyring

      示例

      [root@rbd-client-site-a ~]# ceph auth get client.rbd-mirror.site-a -o /etc/ceph/ceph.client.rbd-mirror.site-a.keyring

    2. 更改 /etc/ceph 目录中 auth 文件中的用户名:

      示例

      [client.rbd-mirror.rbd-client-site-a]
          key = AQCbKbVg+E7POBAA7COSZCodvOrg2LWIFc9+3g==
          caps mds = "allow *"
          caps mgr = "allow *"
          caps mon = "allow *"
          caps osd = "allow *"

    3. 导入 auth 文件以添加相关权限:

      语法

      ceph auth import -i PATH_TO_KEYRING

      示例

      [root@rbd-client-site-a ~]# ceph auth import -i /etc/ceph/ceph.client.rbd-mirror.rbd-client-site-a.keyring

    4. 检查 RBD 镜像节点的服务名称:

      示例

      [root@rbd-client-site-a ~]# systemctl list-units --all
      
      systemctl stop ceph-rbd-mirror@rbd-client-site-a.service
      systemctl disable ceph-rbd-mirror@rbd-client-site-a.service
      systemctl reset-failed ceph-rbd-mirror@rbd-client-site-a.service
      systemctl start ceph-rbd-mirror@rbd-mirror.rbd-client-site-a.service
      systemctl enable ceph-rbd-mirror@rbd-mirror.rbd-client-site-a.service
      systemctl status ceph-rbd-mirror@rbd-mirror.rbd-client-site-a.service

    5. 将 rbd-mirror 节点添加到 /etc/ansible/hosts 文件中:

      示例

      [rbdmirrors]
      ceph.client.rbd-mirror.rbd-client-site-a

  2. 编辑 group_vars/all.yml 文件,使其包含容器的配置:

    ceph_docker_image_tag: "latest"
    ceph_docker_image: rhceph/rhceph-4-rhel8
    containerized_deployment: true
  3. 进入 /usr/share/ceph-ansible 目录:

    [ansible@admin ~]$ cd /usr/share/ceph-ansible
  4. 在 Ansible 管理节点上,运行 Ansible 迁移 playbook:

    语法

    ansible-playbook ./infrastructure-playbooks/switch-from-non-containerized-to-containerized-ceph-daemons.yml -i INVENTORY_FILE

    示例

    [ansible@admin ceph-ansible]$ ansible-playbook ./infrastructure-playbooks/switch-from-non-containerized-to-containerized-ceph-daemons.yml -i hosts

    验证集群是否已切换到容器化环境。

  5. 在监控节点上,列出所有正在运行的容器:

    示例

    [root@mon ~]$ sudo podman ps

第 3 章 使用 Ceph 编排器管理服务

作为存储管理员,在安装红帽 Ceph 存储集群后,您可以使用 Ceph 编排器监控和管理存储集群中的服务。服务是一起配置的一组守护进程。

本节涵盖了以下管理信息:

3.1. Ceph 编排器放置规格

您可以使用 Ceph 编排器部署 osds、monsmgrs mdsrgw,以及 iSCSI 服务。红帽建议使用放置规则部署服务。您需要知道必须部署什么守护进程,才能使用 Ceph 编排器部署服务。放置规格可以作为命令行参数传递,也可以作为服务规格在 yaml 文件中传递。

使用放置规格部署服务有两种方法:

  • 直接在命令行界面中使用放置规格。例如,如果要在主机上部署三个监视器,运行以下命令在 host01、host02 和 host 03 上部署三个监视器。

    示例

    [ceph: root@host01 /]# ceph orch apply mon --placement="3 host01 host02 host03"

  • 使用 YAML 文件中的放置规格。例如,如果要在所有主机上部署 node-exporter,您可以在 yaml 文件中指定以下内容:

    示例

    service_type: mon
    placement:
    host_pattern: '*'

3.2. 使用命令行界面部署 Ceph 守护进程

利用 Ceph 编排器,您可以使用 ceph orch 命令部署 Ceph 管理器、Ceph 监控器、Ceph OSD 和监控堆栈等守护进程。放置规格通过 Orchestrator 命令作为 --placement 参数传递。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到存储群集。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 使用以下方法之一在主机上部署守护进程:

    方法 1

    • 指定守护进程的数量和主机名:

      语法

      ceph orch apply SERVICE_NAME --placement="NUMBER_OF_DAEMONS HOST_NAME_1 HOST_NAME_2 HOST_NAME_3"

      示例

      [ceph: root@host01 /]# ceph orch apply mon --placement="2 host01 host02 host03"

    • 将标签添加到主机,然后使用标签部署守护进程:

      1. 在主机中添加标签:

        语法

        ceph orch host label add HOSTNAME_1 LABEL_1,LABEL_2

        示例

        [ceph: root@host01 /]# ceph orch host label add host01 mon

      2. 使用标签部署守护进程:

        语法

        ceph orch apply DAEMON_NAME label:_LABEL_1_

        示例

        ceph orch apply mon label:mon

    方法 3

    • 为主机添加标签并使用 --placement 参数部署:

      1. 在主机中添加标签:

        语法

        ceph orch host label add HOSTNAME_1 LABEL_1,LABEL_2

        示例

        [ceph: root@host01 /]# ceph orch host label add host01 mon

      2. 使用标签放置规则部署守护进程:

        语法

        ceph orch apply DAEMON_NAME --placement="label:_LABEL_1_"

        示例

        ceph orch apply mon --placement="label:mon"

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME
    ceph orch ps --service_name=SERVICE_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=mon
    [ceph: root@host01 /]# ceph orch ps --service_name=mon

其它资源

3.3. 使用命令行界面在主机的子集上部署 Ceph 守护进程

您可以使用 --placement 选项在主机子集上部署守护进程。您可以使用要部署守护进程的主机名称在放置规格中指定守护进程数量。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 列出您要在其上部署 Ceph 守护进程的主机:

    示例

    [ceph: root@host01 /]# ceph orch host ls

  3. 部署守护进程:

    语法

    ceph orch apply SERVICE_NAME --placement="NUMBER_OF_DAEMONS HOST_NAME_1 _HOST_NAME_2 HOST_NAME_3"

    示例

    ceph orch apply mgr --placement="2 host01 host02 host03"

    在本例中,mgr 守护进程 仅在两个主机上部署。

验证

  • 列出主机:

    示例

    [ceph: root@host01 /]# ceph orch host ls

其它资源

3.4. Ceph 编排器的服务规格

服务规格是一种数据结构,用于指定用于部署 Ceph 服务的服务属性和配置设置。以下是用于指定服务规格的 multi-document YAML 文件 cluster.yml 示例:

示例

service_type: mon
placement:
  host_pattern: "mon*"
---
service_type: mgr
placement:
  host_pattern: "mgr*"
---
service_type: osd
service_id: default_drive_group
placement:
  host_pattern: "osd*"
data_devices:
  all: true

以下列表定义了服务规格的属性的参数如下:

  • service_type :服务类型:

    • Ceph 服务,如 mon、crash、mds、mgr、osd、rbd 或 rbd-mirror。
    • 诸如 nfs 或 rgw 的 Ceph 网关.
    • 监控堆栈,如 Alertmanager、Prometheus、Grafana 或 Node-exporter。
    • 用于自定义容器的容器.
  • service_id :服务的唯一名称。
  • placement :这用于定义守护进程部署的位置和方式。
  • Unmanaged: 如果设置为 true,则 编排器不会部署或删除与此服务关联的任何守护进程。

编排器无状态服务

无状态服务是一种服务,不需要提供状态信息。例如,要启动 rgw 服务,不需要额外的信息来启动或运行服务。rgw 服务不会创建有关此状态的信息以提供功能。无论 rgw 服务何时启动,其状态都是相同的。

3.5. 使用服务规格部署 Ceph 守护进程

利用 Ceph 编排器,您可以使用 YAML 文件中的服务规格部署 Ceph 管理器、Ceph 监控器、Ceph OSD 和监控堆栈等守护进程。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 进入以下目录:

    语法

    cd /var/lib/ceph/DAEMON_PATH/

    示例

    [ceph: root@host01 /]# cd /var/lib/ceph/mon/

  3. 创建 yml 文件:

    示例

    [ceph: root@host01 mon]# touch mon.yml

  4. 此文件可以通过两种不同的方式进行配置:

    • 编辑该文件,使其在放置规格中包含主机详情:

      语法

      service_type: SERVICE_NAME
      placement:
        hosts:
          - HOST_NAME_1
          - HOST_NAME_2

      示例

      service_type: mon
      placement:
        hosts:
          - host01
          - host02
          - host03

    • 编辑该文件,使其在放置规格中包含标签详情:

      语法

      service_type: SERVICE_NAME
      placement:
        label: "_LABEL_1"

      示例

      service_type: mon
      placement:
        label: "mon"

  5. 使用服务规格部署 Ceph 守护进程:

    语法

    ceph orch apply -i FILE_NAME.yml

    示例

    [ceph: root@host01 mon]# ceph orch apply -i mon.yml

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=mon

其它资源

第 4 章 使用 Ceph 编排器管理主机

作为存储管理员,您可以使用后端中带有 Cephadm 的 Ceph 编排器来添加、列出和删除现有红帽 Ceph 存储集群中的主机。

您还可以向主机添加标签。标签是自由格式的,没有具体含义。每一主机可以有多个标签。例如,将 mon 标签应用到部署了监控守护进程的所有主机,mgr 用于部署管理器守护进程的所有主机,将 rgw 用于 Ceph 对象网关等。

标记存储集群中的所有主机有助于简化系统管理任务,允许您快速识别每个主机上运行的守护进程。此外,您可以使用 Ceph 编排器或 YAML 文件在具有特定主机标签的主机上部署或删除守护进程。

本节涵盖了以下管理任务:

4.1. 先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 新主机的 IP 地址应在 /etc/hosts 文件中更新。

4.2. 使用 Ceph 编排器添加主机

您可以在后端将 Ceph 编排器与 Cephadm 搭配使用,将主机添加到现有的红帽 Ceph 存储集群中。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 将集群的公共 SSH 密钥提取到文件夹中:

    语法

    ceph cephadm get-pub-key > ~/PATH

    示例

    [ceph: root@host01 /]# ceph cephadm get-pub-key > ~/ceph.pub

  3. 将 Ceph 集群的公共 SSH 密钥复制到新主机上的 root 用户的 authorized_keys 文件中:

    语法

    ssh-copy-id -f -i ~/PATH root@HOST_NAME_2

    示例

    [root@host01 ~]# ssh-copy-id -f -i ~/ceph.pub root@host02

  4. 在集群中添加主机:

    语法

    ceph orch host add HOST_NAME IP_ADDRESS_OF_HOST

    示例

    [ceph: root@host01 /]# ceph orch host add host02 10.69.265.25

验证

  • 列出主机:

    示例

    [ceph: root@host01 /]# ceph orch host ls

其它资源

4.3. 使用 Ceph 编排器添加多个主机

您可以在后端将 Ceph 编排器与 Cephadm 搭配使用,以利用 YAML 文件格式的服务规格同时将多个主机添加到红帽 Ceph 存储集群中。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 进入以下目录:

    语法

    cd /var/lib/ceph/DAEMON_PATH/

    示例

    [ceph: root@host01 /]# cd /var/lib/ceph/hosts/

  3. 创建 hosts.yml 文件:

    示例

    [ceph: root@host01 hosts]# touch hosts.yml

  4. 编辑 hosts.yml 文件使其包含以下详情:

    示例

    service_type: host
    addr: host01
    hostname: host01
    labels:
    - mon
    - osd
    - mgr
    ---
    service_type: host
    addr: host02
    hostname: host02
    labels:
    - mon
    - osd
    - mgr
    ---
    service_type: host
    addr: host03
    hostname: host03
    labels:
    - mon
    - osd

  5. 使用服务规格部署主机:

    语法

    ceph orch apply -i FILE_NAME.yml

    示例

    [ceph: root@host01 hosts]# ceph orch apply -i hosts.yml

验证

  • 列出主机:

    示例

    [ceph: root@host01 /]# ceph orch host ls

其它资源

4.4. 使用 Ceph 编排器列出主机

您可以使用 Ceph 编排器列出 Ceph 集群的主机。

注意

主机 STATUS 为空,在 ceph orch host ls 命令的输出中。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到存储群集。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 列出集群的主机:

    示例

    [ceph: root@host01 /]# ceph orch host ls

    您将看到主机的 STATUS 为空,这是正常的。

4.5. 使用 Ceph 编排器向主机添加标签

您可以在后端将 Ceph 编排器与 Cephadm 搭配使用,以向现有红帽 Ceph 存储集群中的主机添加标签。标签的一些示例包括 mgrmonosd,具体取决于主机上部署的服务。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 将主机添加到存储集群中

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 为主机添加标签:

    语法

    ceph orch host label add HOST_NAME LABEL_NAME

    示例

    [ceph: root@host01 /]# ceph orch host label add host02 mon

  3. 可选:您可以在主机中添加多个标签:

    语法

    ceph orch host label add HOSTNAME_1 LABEL_1,LABEL_2

    示例

    [ceph: root@host01 /]# ceph orch host label add host01 mon,mgr

验证

  • 列出主机:

    示例

    [ceph: root@host01 /]# ceph orch host ls

4.6. 使用 Ceph 编排器删除主机

您可以使用 Ceph 编排器移除 Ceph 集群的主机。在删除主机时,您还需要删除 node-exportercrash 服务,以避免在主机中保留容器。

注意

用户必须先手动删除所有服务,包括管理器、监控器和 OSD 等服务,然后才能从存储集群中移除主机。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到存储群集。
  • 所有服务都已部署。
  • Cephadm 部署在必须要移除服务的节点上。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 对于除 node-exportercrash 外的所有 Ceph 服务,请从放置规格文件中删除主机:

    示例

    service_type: rgw
    placement:
      hosts:
      - host01
      - host02

    在本例中,host03 删除了 Ceph 对象网关服务的放置规格。对于主机上部署的所有服务,您需要按照上述步骤操作。

    1. 若要移除 OSD,可使用 --unmanaged=True 部署OSD

      示例

      [ceph: root@host01 /]# ceph orch apply osd --all-available-devices --unmanaged=true

      注意

      这可以防止在设备上自动部署 OSD。

    2. 移除 OSD:

      语法

      for osd_id in $(ceph orch ps HOST_NAME --daemon_type osd | grep osd | awk '{print  $1}' | cut -c 5-) ; do ceph orch osd rm $osd_id; done

      示例

      [ceph: root@host01 /]# for osd_id in $(ceph orch ps host03 --daemon_type osd | grep osd | awk '{print  $1}' | cut -c 5-) ; do ceph orch osd rm $osd_id; done

    3. 删除主机:

      语法

      ceph orch host rm HOST_NAME

      示例

      [ceph: root@host01 /]# ceph orch host rm host03

  3. 在需要删除 node-exporter崩溃 服务的节点中,运行以下命令:

    1. 以 root 用户身份在 Cephadm shell 外获取集群的 fsid 的详细信息以及服务名称:

      示例

      [root@host03 ~]# cephadm ls

    2. 复制 fsidnode-exporter 服务 的名称
    3. 删除服务:

      语法

      cephadm rm-daemon --fsid CLUSTER_ID --name SERVICE_NAME

      示例

      [root@host03 ~]# cephadm rm-daemon --fsid a34c81a0-889b-11eb-af98-001a4a00063d --name node-exporter.host03

验证

  • 运行 cephadm ls 命令以验证服务删除:

    示例

    [root@host03 ~]# cephadm ls

  • 列出主机、守护进程和进程:

    示例

    [ceph: root@host01 /]# ceph orch ps

其它资源

4.7. 使用 Ceph 编排器将主机置于维护模式

您可以使用 Ceph 编排器将主机置于维护模式或退出维护模式。这将停止主机上的所有 Ceph 守护进程。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 添加到群集的主机.

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 您可以将主机置于维护模式,或者将其从维护模式中放置:

    • 将主机置于维护模式:

      语法

      ceph orch host maintenance enter HOST_NAME [--force]

      示例

      [ceph: root@host01 /]# ceph orch host maintenance enter host02 --force

      通过 --force 标志,用户可以绕过警告,但不能忽略警报。

    • 将主机从维护模式中移出:

      语法

      ceph orch host maintenance exit HOST_NAME

      示例

      [ceph: root@host01 /]# ceph orch host maintenance exit host02

验证

  • 列出主机:

    示例

    [ceph: root@host01 /]# ceph orch host ls

第 5 章 使用 Ceph 编排器管理 monitor

作为存储管理员,您可以使用放置规格部署其他监控器,使用服务规格添加 monitor,将监控器添加到子网配置,并将 monitor 添加到特定主机。此外,您还可以使用 Ceph 编排器移除监视器。

默认情况下,典型的红帽 Ceph 存储集群在不同主机上部署了三个或五个 monitor 守护进程。

如果集群中有五个或多个节点,红帽建议部署五个 monitor。

Ceph 会在集群增长时自动部署监控守护进程,并在集群缩小时自动缩减监控守护进程。此自动增长和缩小的顺利执行取决于正确的子网配置。

如果您的监控节点或整个集群都位于单个子网中,则 Cephadm 会在向集群添加新主机时自动添加最多五个监控守护进程。Cephadm 自动配置新主机上的 monitor 守护进程。新主机与存储集群中的引导主机位于同一个子网中。

Cephadm 还可以部署和扩展监视器,以响应存储集群大小的变化。

5.1. Ceph monitor

Ceph 监控器是轻量进程,维护存储集群映射的主副本。所有 Ceph 客户端都联系 Ceph 监控器并检索存储集群映射的当前副本,使客户端能够绑定到池并读取和写入数据。

Ceph 监控器使用 Paxos 协议的一种变体来就存储群集中的 map 和其他重要信息建立共识。由于 Paxos 的性质,Ceph 需要运行的大多数 monitor 建立仲裁,从而建立共识。

重要

红帽要求单独的主机上至少三个监视器才能获得生产集群的支持。

红帽建议部署奇数的监控器。Ceph 监控器的奇数与偶数监视器相比,具有更高的故障弹性。例如,若要在双监视器部署上维护仲裁,Ceph 无法容忍任何故障;有 3 个监视器,一个故障;有四个监视器,一个失败;有 5 个 monitor,两个失败。这就是建议使用奇数的原因。总结一下,Ceph 需要大多数 monitor 正在运行,并且能够相互通信,其中两个是三个,四个监视器中有三个,等等。

对于多节点 Ceph 存储集群的初始部署,红帽需要三个监视器,如果存在三个以上监视器的有效需求,一次增加两个监视器的数量。

由于 Ceph 监控器是轻量级的,因此可以在与 OpenStack 节点相同的主机上运行它们。但是,红帽建议在单独的主机上运行监控器。

重要

红帽不支持将 Ceph monitor 和 OSD 在同一节点上并置。这样做会对存储集群性能造成负面影响。

红帽 ONLY 支持在容器化环境中整合 Ceph 服务。

从存储集群中删除监控器时,请考虑 Ceph monitor 使用 Paxos 协议就主存储集群映射建立共识。您必须有足够的 Ceph 监控器才能建立仲裁。

其它资源

5.2. 配置监控选举策略

monitor 选择策略标识网络分割并处理故障。您可以在三种不同的模式下配置选举监控策略:

  1. 经典 - 这是默认模式,其中根据两个站点之间的选举器模块对等级最低的监控器进行投票。
  2. disallow - 此模式允许您将 monitor 标记为不允许,在这种情况下,他们将参与仲裁并为客户端服务,但不能成为选定领导者。这可让您将监控器添加到不允许的领导列表中。如果 monitor 列在不允许的列表中,它将始终延迟到另一个 monitor。
  3. 连接 - 此模式主要用于解决网络差异。它评估每个监控器提供的对等点的连接分数,并选择连接最强且最可靠的监控器作为领导者。此模式旨在处理网络分割,如果集群扩展到多个数据中心或易受攻击,则可能会出现此问题。此模式包含连接分数评级,并以最佳分数选择 monitor。

红帽建议您继续使用 经典 模式,除非您需要其他模式的功能。

在构建集群前,请使用以下命令将 elect_strategy 改为 经典不允许连接

语法

ceph mon set election_strategy {classic|disallow|connectivity}

5.3. 使用命令行界面部署 Ceph 监控守护进程

Ceph 编排器默认部署一个监控守护进程。您可以使用命令行界面中的 放置 规范来部署额外的监控守护进程。要部署不同数量的 monitor 守护进程,请指定不同的数字。如果您不指定应该部署 monitor 守护进程的主机,Ceph 编排器会随机选择主机,并将 monitor 守护进程部署到主机上。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 部署 Ceph 监控守护进程有四种不同方式:

方法 1

  • 使用放置规格在主机上部署监控器:

    注意

    红帽建议您使用 --placement 选项部署到特定主机上。

    语法

    ceph orch apply mon --placement="HOST_NAME_1 HOST_NAME_2 HOST_NAME_3"

    示例

    [ceph: root@host01 /]# ceph orch apply mon --placement="host01 host02 host03"

    注意

    务必在 命令中包含 bootstrap 节点作为第一个节点。

    重要

    不要将监视器单独添加为 ceph 或ch 应用 mon,并且不会将 monitor 添加到所有主机。例如,如果您运行下列命令,则第一个命令会在 host01 上创建一个监控器。然后,第二个命令取代 host1 上的 monitor,并在 host02 上创建监视器。然后,第三个命令取代 host02 上的 monitor,并在 host 03 上创建一个监控器。最终,第三个主机上仅有一个监控器。

    # ceph orch apply mon host01
    # ceph orch apply mon host02
    # ceph orch apply mon host03

方法 2

  • 使用放置规格在具有标签的特定主机上部署特定数量的 monitor:

    1. 在主机中添加标签:

      语法

      ceph orch host label add HOSTNAME_1 LABEL_1,LABEL_2

      示例

      [ceph: root@host01 /]# ceph orch host label add host01 mon

    2. 部署守护进程:

      语法

      ceph orch apply mon --placement="HOST_NAME_1:mon HOST_NAME_2:mon HOST_NAME_3:mon"

      示例

      [ceph: root@host01 /]# ceph orch apply mon --placement="host01:mon host02:mon host03:mon"

方法 3

  • 使用放置规格在特定主机上部署特定数量的 monitor:

    语法

    ceph orch apply mon --placement="NUMBER_OF_DAEMONS HOST_NAME_1 HOST_NAME_2 HOST_NAME_3"

    示例

    [ceph: root@host01 /]# ceph orch apply mon --placement="3 host01 host02 host03"

方法 4

  • 在存储集群中的主机上随机部署 monitor 守护进程:

    语法

    ceph orch apply mon NUMBER_OF_DAEMONS

    示例

    [ceph: root@host01 /]# ceph orch apply mon 3

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=mon

5.4. 使用服务规格部署 Ceph 监控守护进程

Ceph 编排器默认部署一个监控守护进程。您可以使用服务规格部署其他监控守护进程,如 YAML 格式文件。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 进入以下目录:

    语法

    cd /var/lib/ceph/DAEMON_PATH/

    示例

    [ceph: root@host01 /]# cd /var/lib/ceph/mon/

  3. 创建 mon.yml 文件:

    示例

    [ceph: root@host01 mon]# touch mon.yml

  4. 编辑 mon.yml 文件使其包含以下详情:

    语法

    service_type: mon
    placement:
      hosts:
        - HOST_NAME_1
        - HOST_NAME_2

    示例

    service_type: mon
    placement:
      hosts:
        - host01
        - host02

  5. 部署 monitor 守护进程:

    语法

    ceph orch apply -i FILE_NAME.yml

    示例

    [ceph: root@host01 mon]# ceph orch apply -i mon.yml

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=mon

5.5. 使用 Ceph 编排器在特定网络上部署 monitor 守护进程

Ceph 编排器默认部署一个监控守护进程。您可以为每个监控器和控制显式指定 IP 地址或 CIDR 网络。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 禁用自动监控器部署:

    示例

    [ceph: root@host01 /]# ceph orch apply mon --unmanaged

  3. 在特定网络中的主机上部署 monitor:

    语法

    ceph orch daemon add mon HOST_NAME_1:_IP_OR_NETWORK_

    示例

    [ceph: root@host01 /]# ceph orch daemon add mon host03:10.1.2.123

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=mon

5.6. 使用 Ceph 编排器移除 monitor 守护进程

要从主机中删除 monitor 守护进程,您只需重新部署其他主机上的 monitor 守护进程。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 主机上至少部署了一个监控守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 运行 ceph 或ch apply 命令来部署所需的监控守护进程:

    语法

    ceph orch apply mon “NUMBER_OF_DAEMONS _HOST_NAME_1 HOST_NAME_3”

    如果要从 host02 中删除监控守护进程,则可以重新部署其他主机上的监控器。

    示例

    [ceph: root@host01 /]# ceph orch apply mon “2 host01 host03”

验证

  • 列出主机、daemons 和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=mon

第 6 章 使用 Ceph 编排器管理管理器

作为存储管理员,您可以使用 Ceph 编排器来部署额外的管理器守护进程。在引导过程中,Cephadm 会在 bootstrap 节点上自动安装管理器守护进程。

本节涵盖了以下管理任务:

6.1. 先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。

6.2. 使用 Ceph 编排器部署管理器守护进程

Ceph 编排器默认部署两个管理器守护进程。您可以使用命令行界面中的 放置规则 来部署额外的管理器守护进程。要部署不同数量的管理器守护进程,请指定不同的数字。如果您不指定应当部署管理器守护进程的主机,Ceph Orchestrator 会随机选择主机,并将 Manager 守护进程部署到主机上。

注意

确保您的部署在每个部署中至少具有三个 Ceph 管理器。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 您可以通过两种不同的方式部署管理器守护进程:

方法 1

  • 在特定主机组上使用放置规格部署管理器守护进程:

    注意

    红帽建议您使用 --placement 选项部署到特定主机上。

    语法

    ceph orch apply mgr --placement=" HOST_NAME_1 HOST_NAME_2 HOST_NAME_3"

    示例

    [ceph: root@host01 /]# ceph orch apply mgr --placement="host01 host02 host03"

方法 2

  • 在存储集群中的主机上随机部署管理器守护进程:

    语法

    ceph orch apply mgr NUMBER_OF_DAEMONS

    示例

    [ceph: root@host01 /]# ceph orch apply mgr 3

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=mgr

6.3. 使用 Ceph 编排器移除管理器守护进程

要从主机中删除管理器守护进程,您只需重新部署其他主机上的守护进程。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。
  • 主机上至少部署了一个管理器守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 运行 ceph 或ch apply 命令以重新部署所需的管理器守护进程:

    语法

    ceph orch apply mgr “NUMBER_OF_DAEMONS _HOST_NAME_1 HOST_NAME_3”

    如果要从 host02 中删除管理器守护进程,则可以重新部署其他主机上的管理器守护进程。

    示例

    [ceph: root@host01 /]# ceph orch apply mgr “2 host01 host03”

验证

  • 列出主机、daemons 和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=mgr

第 7 章 使用 Ceph 编排器管理 OSD

作为存储管理员,您可以使用 Ceph 编排器来管理红帽 Ceph 存储集群的 OSD。

7.1. Ceph OSD

当红帽 Ceph 存储集群启动并运行后,您可以在运行时添加 OSD 到存储集群。

Ceph OSD 通常包含一个 ceph-osd 守护进程,用于一个存储驱动器以及节点中关联的日志。如果节点有多个存储驱动器,则为每个驱动器映射一个 ceph-osd 守护进程。

红帽建议定期检查集群的容量,以查看它是否达到其存储容量的上限。当存储集群达到 接近满 比率时,添加一个或多个 OSD 以扩展存储集群的容量。

如果要减小红帽 Ceph 存储集群的大小或替换硬件,也可以在运行时移除 OSD。如果节点有多个存储驱动器,您可能还需要删除该驱动器的一个 ceph-osd 守护进程。通常,最好检查存储群集的容量,以查看其容量是否达到其容量的上限。在移除存储集群未达到接近满比率的 OSD 时,确保该存储集群没有 接近满 比率。

重要

在添加 OSD 之前,请勿让存储集群达到 完整的 比率。存储集群达到 接近满 比率后出现的 OSD 故障可能会导致存储集群超过 比率。Ceph 会阻止通过写入访问来保护数据,直到您解决存储容量问题为止。不要先考虑对 比率的影响,否则不要移除 OSD。

7.2. Ceph OSD 节点配置

将 Ceph OSD 和支持的硬件配置为将使用 OSD 的池的存储策略。Ceph 喜欢池间的统一硬件,以实现一致的性能配置集。为获得最佳性能,请考虑 CRUSH 层次结构,其驱动器类型或大小相同。

如果您添加不同大小的驱动器,请相应地调整其权重。将 OSD 添加到 CRUSH map 时,请考虑新 OSD 的权重。硬盘驱动器容量每年增长约 40%,因此较新的 OSD 节点的硬盘驱动器可能比存储集群中的旧节点大,也就是说,它们的权重可能更大。

在进行新安装之前,请参阅《安装 指南 》中的安装红帽 Ceph 存储要求 章节。

7.3. 自动调优 OSD 内存

OSD 守护进程根据 osd_memory_target 配置选项调整内存消耗。选项 osd_memory_target 根据系统中的可用 RAM 设置 OSD 内存。

如果将红帽 Ceph 存储部署到不与其他服务共享内存的专用节点上,Cephadm 会自动根据 RAM 总量和部署 OSD 数量来调整每个OSD 的消耗。

默认情况下,红帽 Ceph 存储 5 中的 osd_memory_target_autotune 参数设置为 false。您可以在 Cephadm shell 中全局启用这个选项:

示例

[ceph: root@host01 /]# ceph config set osd osd_memory_target_autotune true

存储集群升级到红帽 Ceph 存储 5.0 后,用于群集维护(如添加 OSD 或替换 OSD),红帽建议将 osd_memory_target_autotune 参数设置为 true,以根据系统内存自动调整 osd 内存。

Cephadm 从部分 mgr/cephadm/autotune_memory_target_ratio 开始,默认值为系统中 RAM 的 0.7,减去非调优后台程序(如非 OSDS)消耗的内存,用于 osd_memory_target_autotune 为 false 的 OSD,然后由剩余的 OSD 划分。

osd_memory_target 参数计算如下:

语法

osd_memory_target = TOTAL_RAM_OF_THE_OSD * (1048576) * (0.7)/ NUMBER_OF_OSDS_IN_THE_OSD_NODE

例如,如果节点有 24 个 OSD 并且具有 251G RAM 空间,则 osd_memory_target7860684936

最终目标反映在带有选项的配置文件中。您可以从 MEM LIMIT 列下的 ceph orch ps 输出查看各个守护进程所消耗的限值和当前内存。

您可以手动为存储集群中的 OSD 设置特定的内存目标。

示例

[ceph: root@host01 /]# ceph config set osd.123 osd_memory_target 7860684936

您可以从内存自动调节中排除 OSD。

示例

[ceph: root@host01 /]# ceph config set osd.123 osd_memory_target_autotune false

7.4. 列出 Ceph OSD 部署的设备

在使用 Ceph 编排器部署 OSD 之前,您可以检查可用设备的列表。命令用于显示可由 Cephadm 发现的设备列表。如果满足以下条件,则存储设备被视为可用:

  • 该设备不能有分区。
  • 该设备不能有任何 LVM 状态。
  • 不得挂载该设备。
  • 该设备不得包含文件系统。
  • 该设备不得包含 Ceph BlueStore OSD。
  • 该设备必须大于 5 GB。
注意

Ceph 不会在不可用的设备上调配 OSD。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器和监控守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]#cephadm shell

  2. 列出要部署 OSD 的可用设备:

    语法

    ceph orch device ls [--hostname=HOSTNAME_1 HOSTNAME_2] [--wide] [--refresh]

    示例

    [ceph: root@host01 /]# ceph orch device ls --wide --refresh

    使用 --wide 选项可提供与设备相关的所有详细信息,包括设备可能不符合用作 OSD 资格的原因。这个选项不支持 NVMe 设备。

  3. 可选: 要在 ceph 或ch 设备 ls 输出中启用 Health、Ident Fault 字段,请运行以下命令:

    注意

    这些字段由 libstoragemgmt 库支持,目前支持 SCSI、SAS 和 SATA 设备。

    1. 以 root 用户身份,检查您的硬件与 libstoragemgmt 库的兼容性,以避免对服务的计划外中断:

      示例

      [root@host01 ~]# cephadm shell lsmcli ldl

      在输出中,您会看到 Health Status with the 相应的 SCSI VPD 0x83 ID。

      注意

      如果您没有获得此信息,则启用字段可能会导致设备异常行为。

    2. 启用 libstoragemgmt 支持:

      示例

      [ceph: root@host01 /]# ceph config set mgr mgr/cephadm/device_enhanced_scan true

      启用后,ceph 或ch device ls 会将 Health 字段的输出结果显示为 Good

验证

  • 列出设备:

    示例

    [ceph: root@host01 /]# ceph orch device ls

7.5. 用于 Ceph OSD 部署的 zapping 设备

在部署 OSD 之前,您需要先检查可用设备的列表。如果设备中没有可用空间,您可以通过 zapp 来清除设备上的数据。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器和监控守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 列出要部署 OSD 的可用设备:

    语法

    ceph orch device ls [--hostname=HOSTNAME_1 HOSTNAME_2] [--wide] [--refresh]

    示例

    [ceph: root@host01 /]# ceph orch device ls --wide --refresh

  3. 清除设备的数据:

    语法

    ceph orch device zap HOSTNAME FILE_PATH --force

    示例

    [ceph: root@host01 /]# ceph orch device zap host02 /dev/sdb --force

验证

  • 验证该设备中的空间是否可用:

    示例

    [ceph: root@host01 /]# ceph orch device ls

    您将看到 Available 下的字段是 Yes

其它资源

7.6. 在所有可用设备上部署 Ceph OSD

您可以在所有可用设备上部署所有 OSDS。Cephadm 允许 Ceph 编排器发现 OSD 并部署到任何可用的存储设备上。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器和监控守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 列出要部署 OSD 的可用设备:

    语法

    ceph orch device ls [--hostname=HOSTNAME_1 HOSTNAME_2] [--wide] [--refresh]

    示例

    [ceph: root@host01 /]# ceph orch device ls --wide --refresh

  3. 在所有可用设备上部署 OSD:

    示例

    [ceph: root@host01 /]# ceph orch apply osd --all-available-devices

    ceph 或ch 应用 的效果是持久的,这意味着编排器自动找到该设备,将它添加到集群中,然后创建新的 OSD。这在以下条件下发生:

    • 向系统添加了新磁盘或驱动器。
    • 现有磁盘或驱动器已 zapped。
    • OSD 已移除,设备已被 zapped。

      您可以使用 --unmanaged 参数,禁用所有可用设备上的 OSD 自动创建。

      示例

      [ceph: root@host01 /]# ceph orch apply osd --all-available-devices --unmanaged=true

      将参数 --unmanaged 设置为 true 可禁用 OSD 创建,如果您应用了新的 OSD 服务,则不会有任何变化。

      注意

      命令 ceph orch 守护进程 add 创建新的 OSD,但不添加 OSD 服务。

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 查看节点和设备详情:

    示例

    [ceph: root@host01 /]# ceph osd tree

其它资源

7.7. 在特定的设备和主机上部署 Ceph OSD

您可以使用 Ceph 编排器将所有 Ceph OSD 部署到特定的设备和主机上。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器和监控守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 列出要部署 OSD 的可用设备:

    语法

    ceph orch device ls [--hostname=HOSTNAME_1 HOSTNAME_2] [--wide] [--refresh]

    示例

    [ceph: root@host01 /]# ceph orch device ls --wide --refresh

  3. 在特定的设备和主机上部署 OSD:

    语法

    ceph orch daemon add osd HOSTNAME:_DEVICE_PATH_

    示例

    [ceph: root@host01 /]# ceph orch daemon add osd host02:/dev/sdb

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls osd

  • 查看节点和设备详情:

    示例

    [ceph: root@host01 /]# ceph osd tree

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --service_name=SERVICE_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --service_name=osd

其它资源

7.8. 用于部署 OSD 的高级服务规格和过滤器

OSD 类型的服务规格是利用磁盘属性描述集群布局的一种方式。它为用户提供一个抽象的方式,告知 Ceph 哪些磁盘应该转换成具有所需配置的 OSD,而不必知道设备名称和路径的具体细节。对于每个设备和每个主机,定义一个 yaml 文件或一个 json 文件。

OSD 规格的一般设置

  • service_type: 'osd':这是创建 OSDS 所必需的
  • service_id :使用您首选的服务名称或身份识别。使用 规格文件创建一组 OSD。此名称用于将所有 OSD 一起管理并代表编排器服务。
  • placement :这用于定义需要在其上部署 OSD 的主机。

    您可以在以下选项中使用:

    • host_pattern: '*' - 用于选择主机的主机名模式。
    • label: 'osd_host' - 需要部署 OSD 的主机中使用的标签。
    • hosts: 'host01', 'host02' - 需要部署 OSD 的主机名的显式列表。
  • 设备选择 :创建 OSD 的设备。这样,可以将 OSD 与不同的设备分开。您只能创建具有三个组件的 BlueStore OSD:

    • OSD 数据:包含所有 OSD 数据
    • WAL: BlueStore 内部日志或 write-ahead Log
    • DB: BlueStore 内部元数据
  • data_devices :定义要部署 OSD 的设备。在这种情形中,OSD 在并置架构中创建。您可以使用过滤器来选择设备和文件夹。
  • wal_devices :定义用于 WAL OSD 的设备。您可以使用过滤器来选择设备和文件夹。
  • db_devices :定义用于 DB OSD 的设备。您可以使用过滤器来选择设备和文件夹。
  • 加密 :一个可选参数,用于加密 OSD 的信息,它可以设置为 TrueFalse
  • Unmanaged: 可选参数,默认设置为 False。如果您不希望 Orchestrator 管理 OSD 服务,您可以将其设置为 True。
  • block_wal_size :用户定义的值,以字节为单位。
  • block_db_size :用户定义的值,以字节为单位。

指定设备的过滤器

过滤器与 data_devices、wal_devicesdb_devices 参数 搭配使用。

过滤器的名称

描述

语法

示例

Model

目标特定磁盘.您可以通过运行 lsblk -o NAME,FSTYPE,LABEL,MOUNTPOINT,SIZE,MODEL 命令或 smartctl -i /DEVIVE_PATH获取模型详情

Model: DISK_MODEL_NAME

型号:MC-55-44-XZ

vendor

目标特定磁盘

vendor: DISK_VENDOR_NAME

供应商:供应商 C

大小规格

包括具有准确大小的磁盘

大小: EXACT

大小:"10G"

大小规格

包括 的磁盘大小,其位于范围内

大小: LOW:HIGH

大小:"10G:40G"

大小规格

包括小于或等于大小的磁盘

大小 ::HIGH

大小:':10G'

大小规格

包括等于或大于大小的磁盘

大小: LOW:

大小:"40G:'

rotational

磁盘的轮转属性。1 匹配所有旋转磁盘,0 匹配所有非轮转磁盘。如果轮转 =1,则 OSD 配置为使用 SSD 或 NVME。如果轮转=0,则 OSD 配置为使用 HDD。

轮转:0 或 1

rotational: 0

All

考虑所有可用的磁盘

All: true

All: true

limiter

当您指定有效过滤器但希望限制匹配磁盘的数量时,您可以使用"limit"指令。仅应作为最后的手段使用。

limit: NUMBER

限制:2

注意

若要在同一主机上创建带有非并置组件的 OSD,您必须指定所使用的不同类型的设备,设备应位于同一主机上。

注意

libstoragemgmt 支持用于部署 OSD 的设备。

其它资源

7.9. 使用高级服务规格部署 Ceph OSD

OSD 类型的服务规格是一种利用磁盘属性描述集群布局的方式。它为用户提供一个抽象的方式,告知 Ceph 哪些磁盘应该转换成具有所需配置的 OSD,而不必知道设备名称和路径的具体细节。

您可以通过定义 yml 文件或 json 文件,为每个设备和每个主机部署 OSD。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器和监控守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 在监控节点上,进入以下目录:

    语法

    cd /var/lib/ceph/DAEMON_PATH/

    示例

    [ceph: root@host01 /]# cd /var/lib/ceph/osd/

  3. 创建 osd_spec.yml 文件:

    示例

    [ceph: root@host01 osd]# touch osd_spec.yml

  4. 编辑 osd_spec.yml 文件,使其包含以下详情:

    1. 简单场景:在这种情况下,所有节点都有相同的设置。

      语法

      service_type: osd
      service_id: SERVICE_ID
      placement:
        host_pattern: '*' # optional
      data_devices: # optional
        model: DISK_MODEL_NAME # optional
      db_devices: # optional
        size: # optional
        all: true # optional
      encrypted: true

      示例

      service_type: osd
      service_id: osd_spec_default
      placement:
        host_pattern: '*'
      data_devices:
        all: true
      encrypted: true

      示例

      service_type: osd
      service_id: osd_spec_default
      placement:
        host_pattern: '*'
      data_devices:
        size: '80G'
      db_devices:
        size: '40G:'

    2. 高级情景:这会使用所有 HDD 作为 data_devices 来创建所需的布局,其中有两个 SSD 分配为专用 DB 或 WAL 设备。剩余的 SSD 是 data_devices,其 NVME 供应商被分配为专用的 DB 或 WAL 设备。

      示例

      service_type: osd
      service_id: osd_spec_hdd
      placement:
        host_pattern: '*'
      data_devices:
        rotational: 0
      db_devices:
        model: Model-name
        limit: 2
      ---
      service_type: osd
      service_id: osd_spec_ssd
      placement:
        host_pattern: '*'
      data_devices:
        model: Model-name
      db_devices:
        vendor: Vendor-name

    3. 具有非统一节点的高级场景:根据 host_pattern 键,这会将不同的 OSD 规格应用到不同的主机。

      示例

      service_type: osd
      service_id: osd_spec_node_one_to_five
      placement:
        host_pattern: 'node[1-5]'
      data_devices:
        rotational: 1
      db_devices:
        rotational: 0
      ---
      service_type: osd
      service_id: osd_spec_six_to_ten
      placement:
        host_pattern: 'node[6-10]'
      data_devices:
        model: Model-name
      db_devices:
        model: Model-name

    4. 具有专用 WAL 和 DB 设备的高级场景:

      示例

      service_type: osd
      service_id: osd_using_paths
      placement:
        hosts:
          - host01
          - host02
      data_devices:
        paths:
          - /dev/sdb
      db_devices:
        paths:
          - /dev/sdc
      wal_devices:
        paths:
          - /dev/sdd

  5. 在部署 OSD 之前,先进行空运行:

    注意

    此步骤提供部署预览,而无需部署守护进程。

    示例

    [ceph: root@host01 osd]# ceph orch apply -i osd_spec.yml --dry-run

  6. 使用服务规格部署 OSD:

    语法

    ceph orch apply -i FILE_NAME.yml

    示例

    [ceph: root@host01 osd]# ceph orch apply -i osd_spec.yml

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls osd

  • 查看节点和设备详情:

    示例

    [ceph: root@host01 /]# ceph osd tree

其它资源

7.10. 使用 Ceph 编排器移除 OSD 守护进程

您可以使用 Cephadm 从集群中删除 OSD。

从集群中移除 OSD 涉及两个步骤:

  1. 从集群中撤离所有放置组(PG)。
  2. 从集群移除 PG-free OSD。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 监控、管理器和 OSD 守护进程部署在存储集群中。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 检查必须从中移除 OSD 的设备和节点:

    示例

    [ceph: root@host01 /]# ceph osd tree

  3. 移除 OSD:

    语法

    ceph orch osd rm OSD_ID [--replace] [--force]

    示例

    [ceph: root@host01 /]# ceph orch osd rm 0

  4. 可选: 要从特定节点移除特定的 OSD,请运行以下命令:

    语法

    for osd_id in $(ceph orch ps --host HOST_NAME --service_type osd) ; do ceph orch osd rm OSD_ID ; done

    示例

    [ceph: root@host01 /]# for osd_id in $(ceph orch ps --host host01 --service_type osd) ; do ceph orch osd rm 0 ; done

  5. 检查 OSD 移除的状态:

    示例

    [ceph: root@host01 /]# ceph orch osd rm status

    当 OSD 上没有保留 PG 时,它将停用并从集群中移除。

验证

  • 验证从中移除 Ceph OSD 的设备和节点的详细信息:

    示例

    [ceph: root@host01 /]# ceph osd tree

7.11. 使用 Ceph 编排器替换 OSD

您可以使用 ceph orch rm 命令保留 OSD ID,以替换集群中的 OSD。OSD 不会永久从 CRUSH 层次结构中移除,而是被分配有 destroy 标志。此标志用于确定可在下一次 OSD 部署中重复使用的 OSD ID。"destroyed"标志用于决定在下一次 OSD 部署中重复使用哪些 OSD ID。

如果您使用 OSD 规格进行部署,则会为新添加的磁盘分配其替换的对等点的 OSD ID。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 监控、管理器和 OSD 守护进程部署在存储集群中。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 检查要从中替换 OSD 的设备和节点:

    示例

    [ceph: root@host01 /]# ceph osd tree

  3. 替换 OSD:

    语法

    ceph orch osd rm OSD_ID --replace

    示例

    [ceph: root@host01 /]# ceph orch osd rm 0 --replace

  4. 检查 OSD 替换的状态:

    示例

    [ceph: root@host01 /]# ceph orch osd rm status

验证

  • 验证替换 Ceph OSDS 的设备和节点的详细信息:

    示例

    [ceph: root@host01 /]# ceph osd tree

7.12. 使用 Ceph 编排器停止移除 OSD

您只能停止删除已排队进行移除的 OSD。这会重置 OSD 的初始状态,并将它移出移除队列。

如果 OSD 处于移除过程,则您无法停止该进程。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 监控、管理器和 OSD 守护进程在集群中部署。
  • 移除启动的 OSD 进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 检查从中启动 OSD 的设备和节点:

    示例

    [ceph: root@host01 /]# ceph osd tree

  3. 停止删除已排队 OSD:

    语法

    ceph orch osd rm stop OSD_ID

    示例

    [ceph: root@host01 /]# ceph orch osd rm stop 0

  4. 检查 OSD 移除的状态:

    示例

    [ceph: root@host01 /]# ceph orch osd rm status

验证

  • 验证 Ceph OSD 排队以移除的设备和节点的详细信息:

    示例

    [ceph: root@host01 /]# ceph osd tree

7.13. 使用 Ceph 编排器激活 OSD

当主机操作系统被重新安装时,您可以激活集群中的 OSD。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 监控、管理器和 OSD 守护进程部署在存储集群中。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 重新安装主机的操作系统后,激活 OSD:

    语法

    ceph cephadm osd activate HOSTNAME

    示例

    [ceph: root@host01 /]# ceph cephadm osd activate host03

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --service_name=SERVICE_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --service_name=osd

7.13.1. 观察数据迁移

当您向 CRUSH map 添加或删除 OSD 时,Ceph 将通过将 PG 迁移到新的或现有的 OSD 来开始重新平衡数据。您可以使用 ceph-w 命令观察数据迁移。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 最近添加或移除 OSD。

流程

  1. 观察数据迁移:

    示例

    [ceph: root@host01 /]# ceph -w

  2. 观察 PG 状态从 active+clean 变为 active、一些降级的对象,并在迁移完成后最终 激活+clean
  3. 要退出 实用程序,请按 Ctrl + C

7.14. 重新计算 PG

放置组(PG)定义任何池数据在可用 OSD 之间的分布。PG 基于要使用的给定冗余算法构建。对于三向复制,其冗余定义为使用三个不同的 OSD。对于纠删代码池,要使用的 OSD 数量由区块数定义。

在定义池数量时,PG 数量定义数据分散到所有可用 OSD 的粒度评级。容量负载的等值越高,其数值越高。但是,处理放置组对于数据重新生成来说也很重要,因此预先选择的数量非常重要。为了支持计算,可使用工具来生成敏捷的环境。

在存储集群的生命周期内,池可能会增加超过最初预期的限值。随着驱动器数量的增加,建议重新计算。每个 OSD 的 PG 数量应当大约 100。向存储集群添加更多 OSD 时,随着时间推移,每个 OSD 的 PG 数量会降低。首先在存储集群中从 120 个驱动器开始,并将池的 pg_num 设置为 4000,每个 OSD 的 100 个 PG 将最终变为 100 个 PG,给定为三个复制因子。随着时间推移,随着 OSD 数量的增加至 OSD 数量的十倍,每个 OSD 的 PG 数量将仅变为十。由于每个 OSD 的 PG 数量较少,因此请考虑调整每个池的 PG。

可以在线调整 PG 数量。重新计算不仅是 PG 编号的重新计算,还会涉及到数据重定位,这将是一个漫长的过程。但是,数据可用性将随时保持。

应避免每个 OSD 拥有非常高的 PG 数量,因为故障 OSD 上的所有 PG 将同时启动。需要大量的 IOPS 才能及时进行重建,而这不一定是不可用的。这会导致深度 I/O 队列和高延迟造成存储群集无法使用,或会导致长时间修复。

其它资源

  • 如需按照给定用例计算值,请参阅 PG 计算器
  • 如需更多信息,请参阅《 红帽 Ceph 存储策略指南》 中的 纠删代码池 章节。

7.15. 使用 Ceph 管理器均衡器模块

平衡器是 Ceph 管理器(ceph-mgr)的模块,可优化 PG 在 OSD 之间的放置,从而实现自动或稳定的方式分发。

目前无法禁用 balancer 模块。它只能关闭来自定义配置。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。

流程

  1. 确保启用了 balancer 模块:

    示例

    [ceph: root@host01 /]# ceph mgr module enable balancer

  2. 打开 balancer 模块:

    示例

    [ceph: root@host01 /]# ceph balancer on

  3. 默认模式为 crush-compat。该模式可使用以下方法更改:

    示例

    [ceph: root@host01 /]# ceph balancer mode upmap

    示例

    [ceph: root@host01 /]# ceph balancer mode crush-compat

状态

可以随时使用以下方法检查该均衡程序的当前状态:

示例

[ceph: root@host01 /]# ceph balancer status

自动平衡

默认情况下,当打开 balancer 模块时,会使用自动平衡:

示例

[ceph: root@host01 /]# ceph balancer on

可使用以下方法再次关闭该平衡:

示例

[ceph: root@host01 /]# ceph balancer off

这将使用 crush-compat 模式,它向后兼容较旧的客户端,并将随着时间推移对数据分发进行少量更改,以确保 OSD 得到平等利用。

节流

如果集群降级,例如 OSD 出现故障并且系统尚未修复自身,则不会对 PG 分发进行调整。

当集群处于健康状态时,负载平衡器会限制其变化,使得被不当或需要移动的 PG 百分比默认低于 5% 的阈值。可以使用 target_max_misplaced 设置 调整这个百分比。例如,将阈值增加到 7%:

示例

[ceph: root@host01 /]# ceph config-key set mgr/balancer/target_max_misplaced .07

强制优化

平衡器操作分为几个不同的阶段:

  1. 构建 计划.
  2. 评估当前 PG 分布的数据分发质量,或评估 执行计划 后生成的 PG 分发。
  3. 执行计划.

    • 评估并评分当前发行版:

      示例

      [ceph: root@host01 /]# ceph balancer eval

    • 评估单个池的分布:

      语法

      ceph balancer eval POOL_NAME

      示例

      [ceph: root@host01 /]# ceph balancer eval rbd

    • 查看更多评估详情:

      示例

      [ceph: root@host01 /]# ceph balancer eval-verbose ...

    • 使用当前配置的模式生成计划:

      语法

      ceph balancer optimize PLAN_NAME

      PLAN_NAME 替换为自定义计划名称。

      示例

      [ceph: root@host01 /]# ceph balancer optimize rbd_123

    • 查看计划的内容:

      语法

      ceph balancer show PLAN_NAME

      示例

      [ceph: root@host01 /]# ceph balancer show rbd_123

    • 丢弃旧计划:

      语法

      ceph balancer rm PLAN_NAME

      示例

      [ceph: root@host01 /]# ceph balancer rm rbd_123

    • 要查看当前记录的计划,请使用 status 命令:

      [ceph: root@host01 /]# ceph balancer status
    • 要计算执行计划后产生的分布质量:

      语法

      ceph balancer eval PLAN_NAME

      示例

      [ceph: root@host01 /]# ceph balancer eval rbd_123

    • 执行计划:

      语法

      ceph balancer execute PLAN_NAME

      示例

      [ceph: root@host01 /]# ceph balancer execute rbd_123

      注意

      仅当 预期改进分布时,才会执行计划。执行后,计划将被丢弃。

7.16. 使用 Ceph 管理器 crash 模块

通过使用 Ceph 管理器 crash 模块,您可以收集有关守护进程 crashdump 的信息,并将它存储在红帽 Ceph 存储集群中,以进行进一步分析。

默认情况下,守护进程 crashdump 在 /var/lib/ceph/crash 中被转储。您可以使用 选项配置 crash dir。崩溃目录按时间、日期和随机生成的 UUID 命名,包含元数据文件 meta 和最新的日志文件,其 crash_id 是相同的。

您可以使用 ceph-crash.service 自动提交这些崩溃并在 Ceph 监控中保留。ceph-crash.service 会监视 crashdump 目录,并使用 ceph crash post 上传它们。

RECENT_CRASH Heath 消息是 Ceph 集群中最常见的健康消息之一。此健康消息表示一个或多个 Ceph 守护进程最近崩溃,并且该崩溃尚未被管理员存档或确认。这可能表示软件错误、硬件问题(如磁盘失败)或其他一些问题。选项 mgr/crash/warn_recent_interval 控制最近表示的时间周期,默认为两周。您可以运行以下命令禁用警告:

示例

[ceph: root@host01 /]# ceph config set mgr/crash/warn_recent_interval 0

选项 mgr/crash/retain_interval 控制在自动清除崩溃报告前要保留崩溃报告的时间段。这个选项的默认值为一年。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。

流程

  1. 确保启用了 crash 模块:

    示例

    [ceph: root@host01 /]# ceph mgr module ls | more
    {
        "always_on_modules": [
            "balancer",
            "crash",
            "devicehealth",
            "orchestrator_cli",
            "progress",
            "rbd_support",
            "status",
            "volumes"
        ],
        "enabled_modules": [
            "dashboard",
            "pg_autoscaler",
            "prometheus"
        ]

  2. 保存崩溃转储:元数据文件是存储在 crash dir 中的 JSON blob,存为 meta。您可以调用 ceph 命令 -i - 选项,它从 stdin 中读取。

    示例

    [ceph: root@host01 /]# ceph crash post -i meta

  3. 列出所有新的和归档的崩溃信息的时间戳或 UUID 崩溃 ID:

    示例

    [ceph: root@host01 /]# ceph crash ls

  4. 列出所有新崩溃信息的时间戳或 UUID 崩溃 ID:

    示例

    [ceph: root@host01 /]# ceph crash ls-new

  5. 列出所有新崩溃信息的时间戳或 UUID 崩溃 ID:

    示例

    [ceph: root@host01 /]# ceph crash ls-new

  6. 列出按年龄分组的已保存崩溃信息的摘要:

    示例

    [ceph: root@host01 /]# ceph crash stat
    8 crashes recorded
    8 older than 1 days old:
    2021-05-20T08:30:14.533316Z_4ea88673-8db6-4959-a8c6-0eea22d305c2
    2021-05-20T08:30:14.590789Z_30a8bb92-2147-4e0f-a58b-a12c2c73d4f5
    2021-05-20T08:34:42.278648Z_6a91a778-bce6-4ef3-a3fb-84c4276c8297
    2021-05-20T08:34:42.801268Z_e5f25c74-c381-46b1-bee3-63d891f9fc2d
    2021-05-20T08:34:42.803141Z_96adfc59-be3a-4a38-9981-e71ad3d55e47
    2021-05-20T08:34:42.830416Z_e45ed474-550c-44b3-b9bb-283e3f4cc1fe
    2021-05-24T19:58:42.549073Z_b2382865-ea89-4be2-b46f-9a59af7b7a2d
    2021-05-24T19:58:44.315282Z_1847afbc-f8a9-45da-94e8-5aef0738954e

  7. 查看保存的崩溃详情:

    语法

    ceph crash info CRASH_ID

    示例

    [ceph: root@host01 /]# ceph crash info 2021-05-24T19:58:42.549073Z_b2382865-ea89-4be2-b46f-9a59af7b7a2d
    {
        "assert_condition": "session_map.sessions.empty()",
        "assert_file": "/builddir/build/BUILD/ceph-16.1.0-486-g324d7073/src/mon/Monitor.cc",
        "assert_func": "virtual Monitor::~Monitor()",
        "assert_line": 287,
        "assert_msg": "/builddir/build/BUILD/ceph-16.1.0-486-g324d7073/src/mon/Monitor.cc: In function 'virtual Monitor::~Monitor()' thread 7f67a1aeb700 time 2021-05-24T19:58:42.545485+0000\n/builddir/build/BUILD/ceph-16.1.0-486-g324d7073/src/mon/Monitor.cc: 287: FAILED ceph_assert(session_map.sessions.empty())\n",
        "assert_thread_name": "ceph-mon",
        "backtrace": [
            "/lib64/libpthread.so.0(+0x12b30) [0x7f679678bb30]",
            "gsignal()",
            "abort()",
            "(ceph::__ceph_assert_fail(char const*, char const*, int, char const*)+0x1a9) [0x7f6798c8d37b]",
            "/usr/lib64/ceph/libceph-common.so.2(+0x276544) [0x7f6798c8d544]",
            "(Monitor::~Monitor()+0xe30) [0x561152ed3c80]",
            "(Monitor::~Monitor()+0xd) [0x561152ed3cdd]",
            "main()",
            "__libc_start_main()",
            "_start()"
        ],
        "ceph_version": "16.1.0-486.el8cp",
        "crash_id": "2021-05-24T19:58:42.549073Z_b2382865-ea89-4be2-b46f-9a59af7b7a2d",
        "entity_name": "mon.ceph-adm4",
        "os_id": "rhel",
        "os_name": "Red Hat Enterprise Linux",
        "os_version": "8.3 (Ootpa)",
        "os_version_id": "8.3",
        "process_name": "ceph-mon",
        "stack_sig": "957c21d558d0cba4cee9e8aaf9227b3b1b09738b8a4d2c9f4dc26d9233b0d511",
        "timestamp": "2021-05-24T19:58:42.549073Z",
        "utsname_hostname": "host02",
        "utsname_machine": "x86_64",
        "utsname_release": "4.18.0-240.15.1.el8_3.x86_64",
        "utsname_sysname": "Linux",
        "utsname_version": "#1 SMP Wed Feb 3 03:12:15 EST 2021"
    }

  8. 删除超过 KEEP 天的已保存崩溃:这里,KEEP 必须是整数。

    语法

    ceph crash prune KEEP

    示例

    [ceph: root@host01 /]# ceph crash prune 60

  9. 归档崩溃报告,以便不再考虑 RECENT_CRASH 健康检查,不会出现在 崩溃 ls-new 输出中。它会出现在 崩溃 ls 中

    语法

    ceph crash archive CRASH_ID

    示例

    [ceph: root@host01 /]# ceph crash archive 2021-05-24T19:58:42.549073Z_b2382865-ea89-4be2-b46f-9a59af7b7a2d

  10. 归档所有崩溃报告:

    示例

    [ceph: root@host01 /]# ceph crash archive-all

  11. 删除崩溃转储:

    语法

    ceph crash rm CRASH_ID

    示例

    [ceph: root@host01 /]# ceph crash rm 2021-05-24T19:58:42.549073Z_b2382865-ea89-4be2-b46f-9a59af7b7a2d

第 8 章 使用 Ceph 编排器管理监控堆栈

作为存储管理员,您可以使用后端中带有 Cephadm 的 Ceph 编排器来部署监控和警报堆栈。监控堆栈由 Prometheus、Prometheus、Prometheus Alertmanager 和 Grafana 组成。用户需要在 YAML 配置文件中使用 Cephadm 定义这些服务,或者使用命令行界面来部署这些服务。部署多个相同类型的服务时,会部署一个高可用性的设置。节点导出器对此规则的一个例外。

注意

Red Hat Ceph Storage 5.0 不支持用于部署监控服务的自定义镜像,如 Prometheus、Grafana、Alertmanager 和 node-exporter。

以下监控服务可使用 Cephadm 部署:

  • Prometheus 是监控和警报工具包。它收集 Prometheus 地区提供的数据,并在达到预定义阈值时触发预配置警报。Prometheus manager 模块提供了一个 Prometheus 导出器,用于从 ceph-mgr 中的收集点传递 Ceph 性能计数器。

    Prometheus 配置(包括提取目标)由 Cephadm 自动设置,如提供守护进程的指标。Cephadm 也会部署一组默认警报,如健康错误、10% OSD 停机或 pgs inactive。

  • Alertmanager 处理 Prometheus 服务器发送的警报。它重复数据删除、分组和将警报路由到正确的接收方。默认情况下,Ceph 控制面板自动配置为接收器。Alertmanager 处理 Prometheus 服务器发送的警报。可以使用 Alertmanager 来静默警报,但静默也可使用 Ceph 控制面板进行管理。
  • Grafana 是视觉化和警报软件。此监控堆栈不使用 Grafana 的警报功能。用于警报,使用 Alertmanager。

    默认情况下,到 Grafana 的流量使用 TLS 加密。您可以提供自己的 TLS 证书,也可以使用自签名证书。如果在部署 Grafana 之前没有配置自定义证书,则会自动为 Grafana 创建和配置自签名证书。可以使用以下命令配置 Grafana 的自定义证书:

    语法

     ceph config-key set mgr/cephadm/grafana_key -i PRESENT_WORKING_DIRECTORY/key.pem
     ceph config-key set mgr/cephadm/grafana_crt -i PRESENT_WORKING_DIRECTORY/certificate.pem

节点导出器是 Prometheus 的导出器,提供有关安装它的节点的数据。建议在所有节点上安装节点导出器。这可以通过将 'monitoring.yml 文件与 node-exporter 服务类型一起使用来实现。

8.1. 使用 Ceph 编排器部署监控堆栈

监控堆栈由 Prometheus、Prometheus、Prometheus Alertmanager 和 Grafana 组成。Ceph 控制面板利用这些组件存储和视觉化关于集群使用情况和性能的详细指标。

您可以使用 YAML 文件格式的服务规格部署监控堆栈。所有监控服务都可以在 yml 文件中具有它们绑定到的网络和端口。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 对节点的根级别访问权限。

流程

  1. 在 Ceph 管理器守护进程中启用 prometheus 模块。这会公开内部 Ceph 指标,以便 Prometheus 可以读取它们:

    示例

    [ceph: root@host01 /]# ceph mgr module enable prometheus

    重要

    确保此命令在部署 Prometheus 之前运行。如果在部署前没有运行该命令,您必须重新部署 Prometheus 以更新配置:

    ceph orch redeploy prometheus
  2. 进入以下目录:

    语法

    cd /var/lib/ceph/DAEMON_PATH/

    示例

    [ceph: root@host01 mds/]# cd /var/lib/ceph/monitoring/

    注意

    如果目录 监控 不存在,请进行创建。

  3. 创建 monitoring.yml 文件:

    示例

    [ceph: root@host01 monitoring]# touch monitoring.yml

  4. 使用类似以下示例的内容编辑规格文件:

    示例

    service_type: prometheus
    service_name: prometheus
    placement:
      hosts:
      - host01
    networks:
    - 192.169.142.0/24
    ---
    service_type: node-exporter
    ---
    service_type: alertmanager
    service_name: alertmanager
    placement:
      hosts:
      - host03
    networks:
    - 192.169.142.03/24
    ---
    service_type: grafana
    service_name: grafana
    placement:
      hosts:
      - host02
    networks:
    - 192.169.142.02/24

  5. 应用监控服务:

    示例

    [ceph: root@host01 monitoring]# ceph orch apply -i monitoring.yml

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --service_name=SERVICE_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --service_name=prometheus

重要

Prometheus、Grafana 和 Ceph 仪表板都会自动配置为相互通信,从而在 Ceph 控制面板中实现功能齐全的 Grafana 集成。

8.2. 使用 Ceph 编排器移除监控堆栈

您可以使用 ceph orch rm 命令删除监控堆栈。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 使用 ceph 或ch rm 命令删除监控堆栈:

    语法

    ceph orch rm SERVICE_NAME --force

    示例

    [ceph: root@host01 /]# ceph orch rm grafana
    [ceph: root@host01 /]# ceph orch rm prometheus
    [ceph: root@host01 /]# ceph orch rm node-exporter
    [ceph: root@host01 /]# ceph orch rm alertmanager
    [ceph: root@host01 /]# ceph mgr module disable prometheus

  3. 检查进程的状态:

    示例

    [ceph: root@host01 /]# ceph orch status

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps

    示例

    [ceph: root@host01 /]# ceph orch ps

第 9 章 基本 Red Hat Ceph Storage 客户端设置

作为存储管理员,您必须设置具有基本配置的客户端计算机,以便与存储集群交互。大多数客户端计算机只需要安装 ceph-common 软件包 及其依赖项。它将提供基本的 cephrados 命令,以及 mount.cephrbd 等其他命令。

9.1. 在客户端机器上配置文件设置

客户端计算机通常需要比具备完整存储群集成员的配置文件小。您可以生成一个最小的配置文件,向客户端提供详细信息,以访问 Ceph 监视器。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 对节点的 root 访问权限.

流程

  1. 在您要设置文件的节点上,在 /etc 文件夹中创建 ceph 目录:

    示例

    [root@host01 ~]# mkdir /etc/ceph/

  2. 进入 /etc/ceph 目录:

    示例

    [root@host01 ~]# cd /etc/ceph/

  3. ceph 目录中生成配置文件:

    示例

    [root@host01 ceph]# ceph config generate-minimal-conf
    
    # minimal ceph.conf for 417b1d7a-a0e6-11eb-b940-001a4a000740
    [global]
    	fsid = 417b1d7a-a0e6-11eb-b940-001a4a000740
    	mon_host = [v2:10.74.249.41:3300/0,v1:10.74.249.41:6789/0]

    此文件的内容应当安装在 /etc/ceph/ceph.conf 路径中。您可以使用此配置文件来访问 Ceph 监视器。

9.2. 在客户端计算机上设置密钥环

大多数 Ceph 集群在启用身份验证的情况下运行,客户端需要密钥才能与集群计算机通信。您可以生成密钥环,向客户端提供详细信息,以访问 Ceph 监视器。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 对节点的 root 访问权限.

流程

  1. 在您要设置密钥环的节点上,在 /etc 文件夹中创建 ceph 目录:

    示例

    [root@host01 ~]# mkdir /etc/ceph/

  2. 进入 ceph 目录中的 /etc/ceph 目录:

    示例

    [root@host01 ~]# cd /etc/ceph/

  3. 为客户端生成密钥环:

    语法

    ceph auth get-or-create client.CLIENT_NAME -o /etc/ceph/NAME_OF_THE_FILE

    示例

    [root@host01 ceph]# ceph auth get-or-create client.fs -o /etc/ceph/ceph.keyring

  4. 验证 ceph.keyring 文件中的输出:

    示例

    [root@host01 ceph]# cat ceph.keyring
    
    [client.fs]
    	key = AQAvoH5gkUCsExAATz3xCBLd4n6B6jRv+Z7CVQ==

    生成的输出应当放入密钥环文件中,如 /etc/ceph/ceph.keyring

第 10 章 使用 Ceph 编排器管理 MDS 服务

作为存储管理员,您可以在后端使用 Ceph 编排器和 Cephadm 来部署 MDS 服务。默认情况下,Ceph 文件系统(CephFS)仅使用一个活跃的 MDS 守护进程。但是,具有许多客户端的系统得益于多个活跃的 MDS 守护进程。

本节涵盖了以下管理任务:

10.1. 先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。

10.2. 使用命令行界面部署 MDS 服务

利用 Ceph 编排器,您可以使用命令行界面 Ceph 文件系统(CephFS)中的 放置 规范部署元数据服务器(MDS)服务,需要一个或多个 MDS。

注意

确保您至少有两个池,一个用于 Ceph 文件系统(CephFS)数据,另一个用于 CephFS 元数据。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 使用放置规格部署 MDS 守护进程的方法有两种:

方法 1

  • 使用 ceph fs 卷 创建 MDS 守护进程。这将创建 CephFS 卷和与 CephFS 关联的池,并在主机上启动 MDS 服务。

    语法

    ceph fs volume create FILESYSTEM_NAME --placement="NUMBER_OF_DAEMONS HOST_NAME_1 HOST_NAME_2 HOST_NAME_3"

    注意

    默认情况下,为此命令创建复制池。

    示例

    [ceph: root@host01 /]# ceph fs volume create test --placement="2 host01 host02"

方法 2

  • 创建池 CephFS,然后使用放置规范部署 MDS 服务:

    1. 为 CephFS 创建池:

      语法

      ceph osd pool create DATA_POOL
      ceph osd pool create METADATA_POOL

      示例

      [ceph: root@host01 /]# ceph osd pool create cephfs_data
      [ceph: root@host01 /]# ceph osd pool create cephfs_metadata

    2. 为数据池和元数据池创建文件系统:

      语法

      ceph fs new FILESYSTEM_NAME DATA_POOL_ METADATA_POOL

      示例

      [ceph: root@host01 /]# ceph fs new test cephfs_data cephfs_metadata

    3. 使用 ceph 或ch apply 命令部署 MDS 服务:

      语法

      ceph orch apply mds FILESYSTEM_NAME --placement="NUMBER_OF_DAEMONS HOST_NAME_1 HOST_NAME_2 HOST_NAME_3"

      示例

      [ceph: root@host01 /]# ceph orch apply mds test --placement="2 host01 host02"

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 检查 CephFS 状态:

    示例

    [ceph: root@host01 /]# ceph fs ls
    [ceph: root@host01 /]# ceph fs status

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=mds

10.3. 使用服务规格部署 MDS 服务

利用 Ceph 编排器,您可以使用服务规格部署 MDS 服务。

注意

确保您至少有两个池,一个用于 Ceph 文件系统(CephFS)数据,另一个用于 CephFS 元数据。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]#cephadm shell

  2. 进入以下目录:

    语法

    cd /var/lib/ceph/DAEMON_PATH/

    示例

    [ceph: root@host01 mds]# cd /var/lib/ceph/mds/

    注意

    如果 directory mds 不存在,请创建 目录。

  3. 创建 sds.yml 文件:

    示例

    [ceph: root@host01 mds/]# touch mds.yml

  4. 编辑 sds.yml 文件,使其包含以下详情:

    语法

    service_type: mds
    service_id: FILESYSTEM_NAME
    placement:
      hosts:
      - HOST_NAME_1
      - HOST_NAME_2
      - HOST_NAME_3

    示例

    service_type: mds
    service_id: fs_name
    placement:
      hosts:
      - host01
      - host02

  5. 使用服务规格部署 MDS 服务:

    语法

    ceph orch apply -i FILE_NAME.yml

    示例

    [ceph: root@host01 mds]# ceph orch apply -i mds.yml

  6. 部署和运行 MDS 服务后,创建 CephFS:

    语法

    ceph fs new CEPHFS_NAME METADATA_POOL DATA_POOL

    示例

    [ceph: root@host01 /]# ceph fs new test metadata_pool data_pool

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=mds

10.4. 使用 Ceph 编排器移除 MDS 服务

您可以使用 ceph orch rm 命令删除服务。或者,您可以删除文件系统和关联的池。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。
  • 主机上至少部署了一个 MDS 守护进程。

流程

  1. 从集群中移除 MDS 守护进程的方法有两种:

方法 1

  • 移除 CephFS 卷、关联的池和服务:

    1. 登录到 Cephadm shell:

      示例

      [root@host01 ~]# cephadm shell

    2. 将配置参数 mon_allow_pool_delete 设置为 true

      示例

      [ceph: root@host01 /]# ceph config set mon mon_allow_pool_delete true

    3. 删除文件系统:

      语法

      ceph fs volume rm FILESYSTEM_NAME --yes-i-really-mean-it

      示例

      [ceph: root@host01 /]# ceph fs volume rm cephfs-new --yes-i-really-mean-it

      此命令将删除文件系统、数据和元数据池。它还尝试使用已启用的 ceph-mgr Orchestrator 模块来移除 MDS。

方法 2

  • 使用 ceph 或ch rm 命令从整个集群中删除 MDS 服务:

    1. 列出服务:

      示例

      [ceph: root@host01 /]# ceph orch ls

    2. 删除服务

      语法

      ceph orch rm SERVICE_NAME

      示例

      [ceph: root@host01 /]# ceph orch rm mds.test

验证

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps

    示例

    [ceph: root@host01 /]# ceph orch ps

第 11 章 使用 Ceph 编排器管理 Ceph 对象网关

作为存储管理员,您可以使用命令行界面或使用服务规格来部署 Ceph 对象网关。

您还可以配置多站点对象网关,并使用 Ceph 编排器移除 Ceph 对象网关。

Cephadm 将 Ceph 对象网关部署为一组守护进程,这些守护进程在多站点部署中管理单一集群部署或特定的域和区域。

注意

使用 Cephadm 时,对象网关守护进程通过使用 monitor 配置数据库而非 ceph.conf 或命令行来配置。如果 client.rgw 部分中尚未使用该配置,则对象网关守护进程将使用默认设置启动,并绑定到端口 80

本节涵盖了以下管理任务:

11.1. 先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。
  • 所有管理器、监视器和 OSD 都部署在存储集群中。

11.2. 使用命令行界面部署 Ceph 对象网关

使用 Ceph 编排器,您可以在命令行界面中使用 ceph orch 命令来部署 Ceph 对象网关

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 您可以通过三种不同的方式部署 Ceph 对象网关守护进程:

方法 1

  • 创建 realm、zone group 和 zone,然后将放置规格与主机名搭配使用:

    1. 创建一个域:

      语法

      radosgw-admin realm create --rgw-realm=REALM_NAME --default

      示例

      [ceph: root@host01 /]# radosgw-admin realm create --rgw-realm=test_realm --default

    2. 创建区组:

      语法

      radosgw-admin zonegroup create --rgw-zonegroup=ZONE_GROUP_NAME  --master --default

      示例

      [ceph: root@host01 /]# radosgw-admin zonegroup create --rgw-zonegroup=default  --master --default

    3. 创建区:

      语法

      radosgw-admin zone create --rgw-zonegroup=ZONE_GROUP_NAME --rgw-zone=ZONE_NAME --master --default

      示例

      [ceph: root@host01 /]# radosgw-admin zone create --rgw-zonegroup=default --rgw-zone=test_zone --master --default

    4. 提交更改:

      语法

      radosgw-admin period update --rgw-realm=REALM_NAME --commit

      示例

      [ceph: root@host01 /]# radosgw-admin period update --rgw-realm=test_realm --commit

    5. 运行 ceph orch apply 命令:

      语法

      ceph orch apply rgw NAME [--realm=REALM_NAME] [--zone=ZONE_NAME] --placement="NUMBER_OF_DAEMONS [HOST_NAME_1 HOST_NAME_2]"

      示例

      [ceph: root@host01 /]# ceph orch apply rgw test --realm=test_realm --zone=test_zone --placement="2 host01 host02"

方法 2

  • 使用任意服务名称为单个集群部署部署两个 Ceph 对象网关守护进程:

    语法

    ceph orch apply rgw SERVICE_NAME

    示例

    [ceph: root@host01 /]# ceph orch apply rgw foo

方法 3

  • 在标记的一组主机上使用任意服务名称:

    语法

    ceph orch host label add HOST_NAME_1 LABEL_NAME
    ceph orch host label add HOSTNAME_2 LABEL_NAME
    ceph orch apply rgw SERVICE_NAME '--placement=label:_LABEL_NAME_ count-per-host:_NUMBER_OF_DAEMONS_' --port=8000

    示例

    [ceph: root@host01 /]# ceph orch host label add host01 rgw  # the 'rgw' label can be anything
    [ceph: root@host01 /]# ceph orch host label add host02 rgw
    [ceph: root@host01 /]# ceph orch apply rgw foo '--placement=label:rgw count-per-host:2' --port=8000

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=rgw

11.3. 使用服务规格部署 Ceph 对象网关

利用 Ceph 编排器,您可以使用服务规格部署 Ceph 对象网关。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 进入以下目录:

    语法

    cd /var/lib/ceph/DAEMON_PATH/

    示例

    [ceph: root@host01 nfs/]# cd /var/lib/ceph/rgw/

    如果 rgw 目录不存在,请在路径中创建 目录。

  3. 创建 rgw.yml 文件:

    示例

    [ceph: root@host01 rgw]# touch rgw.yml

  4. 编辑 rgw.yml 文件,使其包含以下详情:

    语法

    service_type: rgw
    service_id: REALM_NAME.ZONE_NAME
    placement:
      hosts:
      - HOST_NAME_1
      - HOST_NAME_2
    spec:
      rgw_realm: REALM_NAME
      rgw_zone: ZONE_NAME
    networks:
      -  NETWORK_IP_ADDRESS # RGW service binds to a specific network

    示例

    service_type: rgw
    service_id: test_realm.test_zone
    placement:
      hosts:
      - host01
      - host02
      - host03
    spec:
      rgw_realm: test_realm
      rgw_zone: test_zone
    networks:
      - 192.169.142.0/24

  5. 使用服务规格部署 Ceph 对象网关:

    语法

    ceph orch apply -i FILE_NAME.yml

    示例

    [ceph: root@host01 rgw]# ceph orch apply -i rgw.yml

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=rgw

11.4. 使用 Ceph 编排器部署多站点 Ceph 对象网关

Ceph 编排器支持用于 Ceph 对象网关的多站点配置选项。

您可以将每个对象网关配置为在主动区域配置中工作,从而允许写入到非主要区域。多站点配置存储在名为 realm 的容器中。

realm 存储 zone group、区域和一个时间周期。rgw 守护进程处理同步消除了对独立同步代理的需求,因此使用主动-主动配置运行。

您还可以使用命令行界面(CLI)部署多站点区域。

注意

以下配置假定在地理上至少有两个红帽 Ceph 存储集群。但是,配置也在同一站点工作。

先决条件

  • 至少两个正在运行的 Red Hat Ceph Storage 集群
  • 至少两个 Ceph 对象网关实例,每个实例对应一个红帽 Ceph 存储集群。
  • 所有节点的根级别访问权限。
  • 节点或容器添加到存储集群中。
  • 部署所有 Ceph 管理器、监控器和 OSD 守护进程。

流程

  1. cephadm shell 中,配置主区:

    1. 创建一个域:

      语法

      radosgw-admin realm create --rgw-realm=REALM_NAME --default

      示例

      [ceph: root@host01 /]# radosgw-admin realm create --rgw-realm=test_realm --default

      如果存储集群只有一个域,则指定 --default 标志。

    2. 创建主要区组:

      语法

      radosgw-admin zonegroup create --rgw-zonegroup=ZONE_GROUP_NAME --endpoints=http://RGW_PRIMARY_HOSTNAME:_RGW_PRIMARY_PORT_NUMBER_1_ --master --default

      示例

      [ceph: root@host01 /]# radosgw-admin zonegroup create --rgw-zonegroup=us --endpoints=http://rgw1:80 --master --default

    3. 创建一个主要区:

      语法

      radosgw-admin zone create --rgw-zonegroup=PRIMARY_ZONE_GROUP_NAME --rgw-zone=PRIMARY_ZONE_NAME --endpoints=http://RGW_PRIMARY_HOSTNAME:_RGW_PRIMARY_PORT_NUMBER_1_ --access-key=SYSTEM_ACCESS_KEY --secret=SYSTEM_SECRET_KEY

      示例

      [ceph: root@host01 /]# radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-east-1 --endpoints=http://rgw1:80

    4. 可选:删除默认 zone、zone group 和关联的池:

      重要

      如果您使用默认 zone 和 zone group 存储数据,则不要删除默认区域及其池。此外,删除默认 zone group 也会删除系统用户。

      示例

      [ceph: root@host01 /]# radosgw-admin zonegroup delete --rgw-zonegroup=default
      [ceph: root@host01 /]# ceph osd pool rm default.rgw.log default.rgw.log --yes-i-really-really-mean-it
      [ceph: root@host01 /]# ceph osd pool rm default.rgw.meta default.rgw.meta --yes-i-really-really-mean-it
      [ceph: root@host01 /]# ceph osd pool rm default.rgw.control default.rgw.control --yes-i-really-really-mean-it
      [ceph: root@host01 /]# ceph osd pool rm default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
      [ceph: root@host01 /]# ceph osd pool rm default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it

    5. 创建系统用户:

      语法

      radosgw-admin user create --uid=USER_NAME --display-name="USER_NAME" --access-key=SYSTEM_ACCESS_KEY --secret=SYSTEM_SECRET_KEY --system

      示例

      [ceph: root@host01 /]# radosgw-admin user create --uid=zone.user --display-name="Zone user" --system

      记录 access_keysecret_key

    6. 在主区中添加 access key 和 system key:

      语法

      radosgw-admin zone modify --rgw-zone=PRIMARY_ZONE_NAME --access-key=ACCESS_KEY --secret=SECRET_KEY

      示例

      [ceph: root@host01 /]# radosgw-admin zone modify --rgw-zone=us-east-1 --access-key=NE48APYCAODEPLKBCZVQ--secret=u24GHQWRE3yxxNBnFBzjM4jn14mFIckQ4EKL6LoW

    7. 提交更改:

      语法

      radosgw-admin period update --commit

      示例

      [ceph: root@host01 /]# radosgw-admin period update --commit

    8. cephadm shell 外部,获取存储集群的 FSID 及进程:

      示例

      [root@host01 ~]#  systemctl list-units | grep ceph

    9. 启动 Ceph 对象网关守护进程:

      语法

      systemctl start ceph-FSID@DAEMON_NAME
      systemctl enable ceph-FSID@DAEMON_NAME

      示例

      [root@host01 ~]# systemctl start ceph-62a081a6-88aa-11eb-a367-001a4a000672@rgw.test_realm.us-east-1.host01.ahdtsw.service
      [root@host01 ~]# systemctl enable ceph-62a081a6-88aa-11eb-a367-001a4a000672@rgw.test_realm.us-east-1.host01.ahdtsw.service

  2. 在 Cephadm shell 中,配置 second zone。

    1. 使用 primary zone 和 primary zone group 的 URL 路径、访问密钥和 secret 密钥,并从主机拉取 realm 配置:

      语法

      radosgw-admin period pull --url=URL_TO_PRIMARY_ZONE_GATEWAY --access-key=ACCESS_KEY --secret-key=SECRET_KEY

      示例

      [ceph: root@host04 /]# radosgw-admin period pull --url=http://10.74.249.26:80 --access-key=LIPEYZJLTWXRKXS9LPJC --secret-key=IsAje0AVDNXNw48LjMAimpCpI7VaxJYSnfD0FFKQ

    2. 配置 second zone:

      语法

      radosgw-admin zone create --rgw-zonegroup=ZONE_GROUP_NAME \
                   --rgw-zone=SECONDARY_ZONE_NAME --endpoints=http://RGW_SECONDARY_HOSTNAME:_RGW_PRIMARY_PORT_NUMBER_1_ \
                   --access-key=SYSTEM_ACCESS_KEY --secret=SYSTEM_SECRET_KEY \
                   --endpoints=http://FQDN:80 \
                   [--read-only]

      示例

      [ceph: root@host04 /]# radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-east-2 --endpoints=http://rgw2:80 --access-key=LIPEYZJLTWXRKXS9LPJC --secret-key=IsAje0AVDNXNw48LjMAimpCpI7VaxJYSnfD0FFKQ

    3. 可选:删除默认区:

      重要

      如果您使用默认 zone 和 zone group 存储数据,则不要删除默认区域及其池。

      示例

      [ceph: root@host04 /]# radosgw-admin zone rm --rgw-zone=default
      [ceph: root@host04 /]# ceph osd pool rm default.rgw.log default.rgw.log --yes-i-really-really-mean-it
      [ceph: root@host04 /]# ceph osd pool rm default.rgw.meta default.rgw.meta --yes-i-really-really-mean-it
      [ceph: root@host04 /]# ceph osd pool rm default.rgw.control default.rgw.control --yes-i-really-really-mean-it
      [ceph: root@host04 /]# ceph osd pool rm default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
      [ceph: root@host04 /]# ceph osd pool rm default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it

    4. 更新 Ceph 配置数据库:

      语法

      ceph config set _SERVICE_NAME_ rgw_zone _SECONDARY_ZONE_NAME_

      示例

      [ceph: root@host04 /]# ceph config set rgw rgw_zone us-east-2

    5. 提交更改:

      语法

      radosgw-admin period update --commit

      示例

      [ceph: root@host04 /]# radosgw-admin period update --commit

    6. 在 Cephadm shell 外,获取存储集群的 FSID 及进程:

      示例

      [root@host04 ~]#  systemctl list-units | grep ceph

    7. 启动 Ceph 对象网关守护进程:

      语法

      systemctl start ceph-FSID@DAEMON_NAME
      systemctl enable ceph-FSID@DAEMON_NAME

      示例

      [root@host04 ~]# systemctl start ceph-62a081a6-88aa-11eb-a367-001a4a000672@rgw.test_realm.us-east-2.host04.ahdtsw.service
      [root@host04 ~]# systemctl enable ceph-62a081a6-88aa-11eb-a367-001a4a000672@rgw.test_realm.us-east-2.host04.ahdtsw.service

  3. 可选:使用放置规格部署多站点 Ceph 对象网关:

    语法

    ceph orch apply rgw _NAME_ --realm=_REALM_NAME_ --zone=_PRIMARY_ZONE_NAME_ --placement="_NUMBER_OF_DAEMONS_ _HOST_NAME_1_ _HOST_NAME_2_"

    示例

    [ceph: root@host04 /]# ceph orch apply rgw east --realm=test_realm --zone=us-east-1 --placement="2 host01 host02"

验证

  • 检查同步状态以验证部署:

    示例

    [ceph: root@host04 /]# radosgw-admin sync status

11.5. 使用 Ceph 编排器移除 Ceph 对象网关

您可以使用 ceph 或ch rm 命令移除 Ceph 对象网关守护进程。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。
  • 主机上至少部署了一个 Ceph 对象网关守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

    1. 删除服务

      语法

      ceph orch rm SERVICE_NAME

      示例

      [ceph: root@host01 /]# ceph orch rm rgw.test_realm.test_zone_bb

验证

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps

    示例

    [ceph: root@host01 /]# ceph orch ps

第 12 章 使用 Ceph 编排器管理 NFS-Ganesha 网关

作为存储管理员,您可以使用后端中带有 Cephadm 的 Orchestrator 来部署 NFS-Ganesha 网关。Cephadm 利用预定义的 RADOS 池和可选命名空间部署 NFS Ganesha。

注意

红帽支持仅通过 NFS v4.0+ 协议进行 CephFS 导出。

本节涵盖了以下管理任务:

12.1. 先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。

12.2. 使用 Ceph 编排器创建 NFS-Ganesha 集群

您可以使用 Ceph 编排器的 mgr/nfs 模块创建 NFS-Ganesha 集群。此模块使用 Cephadm 在后端部署 NFS 集群。

这会为所有 NFS-Ganesha 守护进程创建一个通用恢复池,基于 clusterid 的新用户,以及通用的 NFS-Ganesha 配置 RADOS 对象。

对于每个守护进程,池中会创建一个新用户和一个通用配置。虽然所有集群在集群名称上都有不同的命名空间,但它们使用相同的恢复池。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 启用 mgr/nfs 模块:

    示例

    [ceph: root@host01 /]# ceph mgr module enable nfs

  3. 创建集群:

    语法

    ceph nfs cluster create CLUSTER_NAME ["HOST_NAME_1_,HOST_NAME_2,HOST_NAME_3"]

    The CLUSTER_NAME 是一个任意字符串,HOST_NAME_1 是一个可选字符串,表示主机要部署 NFS-Ganesha 守护进程。

    示例

    [ceph: root@host01 /]# ceph nfs cluster create nfsganesha "host01, host02"

    这会创建一个 NFS_Ganesha 群集 nfsganesha,并在 host01 和 host 02 上有一个守护进程。

验证

  • 列出集群详情:

    示例

    [ceph: root@host01 /]# ceph nfs cluster ls

  • 显示 NFS-Ganesha 集群信息:

    语法

    ceph nfs cluster info CLUSTER_NAME

    示例

    [ceph: root@host01 /]# ceph nfs cluster info nfsganesha

12.3. 使用命令行界面部署 NFS-Ganesha 网关

您可以在后端将 Ceph 编排器与 Cephadm 搭配使用,以按照放置规范部署 NFS-Ganesha 网关。在这种情形中,您必须创建 RADOS 池,并在部署网关之前创建命名空间。

注意

红帽支持仅通过 NFS v4.0+ 协议进行 CephFS 导出。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 创建 RADOS 池命名空间,并启用应用:

    语法

    ceph osd pool create POOL_NAME _
    ceph osd pool application enable POOL_NAME freeform/rgw/rbd/cephfs/nfs
    rbd pool init -p POOL_NAME

    示例

    [ceph: root@host01 /]# ceph osd pool create nfs-ganesha
    [ceph: root@host01 /]# ceph osd pool application enable nfs-ganesha nfs
    [ceph: root@host01 /]# rbd pool init -p nfs-ganesha

  3. 使用命令行界面中的放置规格部署 NFS-Ganesha 网关:

    语法

    ceph orch apply nfs SERVICE_ID --pool POOL_NAME --namespace NAMESPACE --placement="NUMBER_OF_DAEMONS HOST_NAME_1 HOST_NAME_2 HOST_NAME_3"

    示例

    [ceph: root@host01 /]# ceph orch apply nfs foo --pool nfs-ganesha --namespace nfs-ns --placement="2 host01 host02"

    这将通过 host01 和 host 02 上的一个守护进程部署 NFS-Ganesha 群集 nfsganesha

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=nfs

12.4. 使用服务规格部署 NFS-Ganesha 网关

您可以在后端将 Ceph 编排器与 Cephadm 搭配使用,以按照服务规格部署 NFS-Ganesha 网关。在这种情形中,您必须创建 RADOS 池,并在部署网关之前创建命名空间。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 创建 RADOS 池、命名空间并启用 RBD:

    语法

    ceph osd pool create POOL_NAME _
    ceph osd pool application enable POOL_NAME rbd
    rbd pool init -p POOL_NAME

    示例

    [ceph: root@host01 /]# ceph osd pool create nfs-ganesha
    [ceph: root@host01 /]#ceph osd pool application enable nfs-ganesha rbd
    [ceph: root@host01 /]#rbd pool init -p nfs-ganesha

  3. 进入以下目录:

    语法

    cd /var/lib/ceph/DAEMON_PATH/

    示例

    [ceph: root@host01 nfs/]# cd /var/lib/ceph/nfs/

    如果 nfs 目录不存在,请在路径中创建目录。

  4. 创建 nfs.yml 文件:

    示例

    [ceph: root@host01 nfs]# touch nfs.yml

  5. 编辑 nfs.yml 文件,使其包含以下详情:

    语法

    service_type: nfs
    service_id: SERVICE_ID
    placement:
      hosts:
        - HOST_NAME_1
        - HOST_NAME_2
    spec:
      pool: POOL_NAME
      namespace: NAMESPACE

    示例

    service_type: nfs
    service_id: foo
    placement:
      hosts:
        - host01
        - host02
    spec:
      pool: nfs-ganesha
      namespace: nfs-ns

  6. 使用服务规格部署 NFS-Ganesha 网关:

    语法

    ceph orch apply -i FILE_NAME.yml

    示例

    [ceph: root@host01 nfs]# ceph orch apply -i nfs.yml

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=nfs

12.5. 使用 Ceph 编排器更新 NFS-Ganesha 集群

您可以使用后端中的 Ceph 编排器更改主机上的守护进程放置来更新 NFS-Ganesha 集群。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。
  • 使用 mgr/nfs 模块创建的 NFS-Ganesha 群集.

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 更新集群:

    语法

    ceph orch apply nfs CLUSTER_NAME ["HOST_NAME_1,HOST_NAME_2,HOST_NAME_3"]

    The CLUSTER_NAME 是一个任意字符串,HOST_NAME_1 是一个可选字符串,表示主机更新所部署的 NFS-Ganesha 守护进程。

    示例

    [ceph: root@host01 /]# ceph orch apply nfs nfsganesha "host02"

    这将更新 host02 上的 nfsganesha 集群。

验证

  • 列出集群详情:

    示例

    [ceph: root@host01 /]# ceph nfs cluster ls

  • 显示 NFS-Ganesha 集群信息:

    语法

    ceph nfs cluster info CLUSTER_NAME

    示例

    [ceph: root@host01 /]# ceph nfs cluster info nfsganesha

  • 列出主机、守护进程和进程:+

语法

ceph orch ps --daemon_type=DAEMON_NAME

+ .Example

[ceph: root@host01 /]# ceph orch ps --daemon_type=nfs

12.6. 使用 Ceph 编排器查看 NFS-Ganesha 集群信息

您可以使用 Ceph 编排器查看 NFS-Ganesha 集群的信息。您可以使用其端口、IP 地址以及创建集群的主机名称来获取有关所有 NFS Ganesha 集群或特定集群的信息。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。
  • 使用 mgr/nfs 模块创建的 NFS-Ganesha 群集.

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 查看 NFS-Ganesha 集群信息:

    语法

    ceph nfs cluster info CLUSTER_NAME

    示例

    [ceph: root@host01 /]# ceph nfs cluster info nfsganesha
    
    {
        "nfsganesha": [
            {
                "hostname": "host02",
                "ip": [
                    "10.74.251.164"
                ],
                "port": 2049
            }
        ]
    }

12.7. 使用 Ceph 编排器获取 NFS-Ganesha clutser 日志

利用 Ceph 编排器,您可以获取 NFS-Ganesha 集群日志。您需要处于部署该服务的节点。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • Cephadm 安装在部署了 NFS 的节点上。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。
  • 使用 mgr/nfs 模块创建的 NFS-Ganesha 群集.

流程

  1. 以 root 用户身份,获取存储集群的 FSID

    示例

    [root@host03 ~]# cephadm ls

    复制 FSID 和服务的名称。

  2. 获取日志:

    语法

    cephadm logs --fsid FSID --name SERVICE_NAME

    示例

    [root@host03 ~]# cephadm logs --fsid 499829b4-832f-11eb-8d6d-001a4a000635 --name nfs.foo.host03

12.8. 使用 Ceph 编排器设置自定义 NFS-Ganesha 配置

NFS-Ganesha 集群在默认配置块中定义。利用 Ceph 编排器,您可以自定义配置,它们优先于默认配置块。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。
  • 使用 mgr/nfs 模块创建的 NFS-Ganesha 群集.

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 以下是 NFS-Ganesha 集群默认配置的示例:

    示例

    # {{ cephadm_managed }}
    NFS_CORE_PARAM {
            Enable_NLM = false;
            Enable_RQUOTA = false;
            Protocols = 4;
    }
    
    MDCACHE {
            Dir_Chunk = 0;
    }
    
    EXPORT_DEFAULTS {
            Attr_Expiration_Time = 0;
    }
    
    NFSv4 {
            Delegations = false;
            RecoveryBackend = 'rados_cluster';
            Minor_Versions = 1, 2;
    }
    
    RADOS_KV {
            UserId = "{{ user }}";
            nodeid = "{{ nodeid}}";
            pool = "{{ pool }}";
            namespace = "{{ namespace }}";
    }
    
    RADOS_URLS {
            UserId = "{{ user }}";
            watch_url = "{{ url }}";
    }
    
    RGW {
            cluster = "ceph";
            name = "client.{{ rgw_user }}";
    }
    
    %url    {{ url }}

  3. 自定义 NFS-Ganesha 集群配置。以下是自定义配置的两个示例:

    • 更改日志级别:

      示例

      LOG {
       COMPONENTS {
           ALL = FULL_DEBUG;
       }
      }

    • 添加自定义导出块:

      1. 创建 用户。

        注意

        在 FSAL 块中指定的用户应当具有正确的 NFS-Ganesha 守护进程,以访问 Ceph 集群。

        语法

        ceph auth get-or-create client.USER_NAME mon 'allow r' osd 'allow rw pool=POOL_NAME namespace=NFS_CLUSTER_NAME, allow rw tag cephfs data=FILE_SYSTEM_NAME' mds 'allow rw path=EXPORT_PATH'

        示例

        [ceph: root@host01 /]# ceph auth get-or-create client.nfstest1 mon 'allow r' osd 'allow rw pool=nfsganesha namespace=nfs_cluster_name, allow rw tag cephfs data=filesystem_name' mds 'allow rw path=export_path

      2. 进入以下目录:

        语法

        cd /var/lib/ceph/DAEMON_PATH/

        示例

        [ceph: root@host01 /]# cd /var/lib/ceph/nfs/

        如果 nfs 目录不存在,请在路径中创建目录。

      3. 创建新配置文件:

        语法

        touch PATH_TO_CONFIG_FILE

        示例

        [ceph: root@host01 nfs]#  touch nfs-ganesha.conf

      4. 通过添加自定义导出块来编辑 配置文件。它创建一个导出,它由 Ceph NFS 导出接口管理。

        语法

        EXPORT {
          Export_Id = NUMERICAL_ID;
          Transports = TCP;
          Path = PATH_WITHIN_CEPHFS;
          Pseudo = BINDING;
          Protocols = 4;
          Access_Type = PERMISSIONS;
          Attr_Expiration_Time = 0;
          Squash = None;
          FSAL {
            Name = CEPH;
            Filesystem = "FILE_SYSTEM_NAME";
            User_Id = "USER_NAME";
            Secret_Access_Key = "USER_SECRET_KEY";
          }
        }

        示例

        EXPORT {
          Export_Id = 100;
          Transports = TCP;
          Path = /;
          Pseudo = /ceph/;
          Protocols = 4;
          Access_Type = RW;
          Attr_Expiration_Time = 0;
          Squash = None;
          FSAL {
            Name = CEPH;
            Filesystem = "filesystem name";
            User_Id = "user id";
            Secret_Access_Key = "secret key";
          }
        }

  4. 应用集群的新配置:

    语法

    ceph nfs cluster config set _CLUSTER_NAME_ -i _PATH_TO_CONFIG_FILE_

    示例

    [ceph: root@host01 nfs]# ceph nfs cluster config set nfs-ganesha -i /root/nfs-ganesha.conf

    这也会重启自定义配置的服务。

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=nfs

  • 验证自定义配置:

    语法

    ./bin/rados -p POOL_NAME -N CLUSTER_NAME get userconf-nfs.CLUSTER_NAME -

    示例

    [ceph: root@host01 /]# ./bin/rados -p nfs-ganesha -N nfsganesha get userconf-nfs.nfsganesha -

其它资源

12.9. 使用 Ceph 编排器重置自定义 NFS-Ganesha 配置

利用 Ceph 编排器,您可以将用户定义的配置重置为默认配置。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。
  • 使用 mgr/nfs 模块部署的 NFS-Ganesha。
  • 自定义 NFS 集群配置已设置

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 重置 NFS_Ganesha 配置:

    语法

    ceph nfs cluster config reset CLUSTER_NAME

    示例

    [ceph: root@host01 /]# ceph nfs cluster config reset nfsganesha

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=nfs

  • 验证自定义配置是否已删除:

    语法

    ./bin/rados -p POOL_NAME -N CLUSTER_NAME get userconf-nfs.CLUSTER_NAME -

    示例

    [ceph: root@host01 /]# ./bin/rados -p nfs-ganesha -N nfsganesha get userconf-nfs.nfsganesha -

其它资源

12.10. 使用 Ceph 编排器删除 NFS-Ganesha 集群

您可以在后端将 Ceph 编排器与 Cephadm 搭配使用,以删除 NFS-Ganesha 集群。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。
  • 使用 mgr/nfs 模块创建的 NFS-Ganesha 群集.

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 删除集群:

    语法

    ceph nfs cluster delete CLUSTER_NAME

    The CLUSTER_NAME 是一个任意字符串。

    示例

    [ceph: root@host01 /]# ceph nfs cluster delete nfsganesha
    NFS Cluster Deleted Successfully

验证

  • 列出集群详情:

    示例

    [ceph: root@host01 /]# ceph nfs cluster ls

12.11. 使用 Ceph 编排器删除 NFS-Ganesha 网关

您可以使用 ceph 或ch rm 命令删除 NFS-Ganesha 网关。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。
  • 主机上至少部署了一个 NFS-Ganesha 网关。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  3. 删除服务

    语法

    ceph orch rm SERVICE_NAME

    示例

    [ceph: root@host01 /]# ceph orch rm nfs.foo

验证

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps

    示例

    [ceph: root@host01 /]# ceph orch ps

第 13 章 使用 Ceph 编排器管理 iSCSI 网关

作为存储管理员,您可以使用 Ceph 编排器部署 iSCSI 网关。iSCSI 网关提供高可用性(HA)iSCSI 目标,将 RADOS 块设备(RBD)镜像导出为 SCSI 磁盘。

您可以使用放置规范或服务规格(如 YAML 文件)来部署 iSCSI 网关。

本节涵盖了以下管理任务:

13.1. 先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。

13.2. 使用命令行界面部署 iSCSI 网关

利用 Ceph 编排器,您可以在命令行界面中使用 ceph orch 命令来部署 iSCSI 网关。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 创建池:

    语法

    ceph osd pool create POOL_NAME

    示例

    [ceph: root@host01 /]# ceph osd pool create mypool

  3. 使用命令行界面部署 iSCSI 网关:

    语法

    ceph orch apply iscsi POOLNAME admin admin --placement="NUMBER_OF_DAEMONS HOST_NAME_1 HOST_NAME_2"

    示例

    [ceph: root@host01 /]# ceph orch apply iscsi mypool admin admin --placement="1 host01"

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=iscsi

13.3. 使用服务规格部署 iSCSI 网关

利用 Ceph 编排器,您可以使用服务规格部署 iSCSI 网关。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 主机添加到集群中。
  • 部署所有管理器、监控器和 OSD 守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 进入以下目录:

    语法

    cd /var/lib/ceph/DAEMON_PATH/

    示例

    [ceph: root@host01 /]# cd /var/lib/ceph/iscsi/

    注意:如果目录 'iscsi 不存在,请创建该目录。

  3. 创建 iscsi.yml 文件:

    示例

    [ceph: root@host01 iscsi]# touch iscsi.yml

  4. 编辑 iscsi.yml 文件,使其包含以下详情:

    语法

    service_type: iscsi
    service_id: iscsi
    placement:
      hosts:
        - HOST_NAME_1
        - HOST_NAME_2
    spec:
      pool: POOL_NAME  # RADOS pool where ceph-iscsi config data is stored.
      trusted_ip_list: "IP_ADDRESS_1,IP_ADDRESS_2" # optional
      api_port: ... # optional
      api_user: API_USERNAME # optional
      api_password: API_PASSWORD # optional
      api_secure: true/false # optional
      ssl_cert: | # optional
      ...
      ssl_key: | # optional
      ...

    示例

    service_type: iscsi
    service_id: iscsi
    placement:
      hosts:
        - host01
    spec:
      pool: mypool

  5. 使用服务规格部署 iSCSI 网关:

    语法

    ceph orch apply -i FILE_NAME.yml

    示例

    [ceph: root@host01 iscsi]# ceph orch apply -i iscsi.yml

验证

  • 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps --daemon_type=DAEMON_NAME

    示例

    [ceph: root@host01 /]# ceph orch ps --daemon_type=iscsi

13.4. 使用 Ceph 编排器删除 iSCSI 网关

您可以使用 ceph 或ch rm 命令删除 iSCSI 网关守护进程。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 所有节点的根级别访问权限。
  • 主机添加到集群中。
  • 主机上至少部署了一个 iSCSI 网关守护进程。

流程

  1. 登录到 Cephadm shell:

    示例

    [root@host01 ~]# cephadm shell

  2. 列出服务:

    示例

    [ceph: root@host01 /]# ceph orch ls

    1. 删除服务

      语法

      ceph orch rm SERVICE_NAME

      示例

      [ceph: root@host01 /]# ceph orch rm iscsi.iscsi

验证

  • 列出主机、守护进程和进程:

    语法

    ceph orch ps

    示例

    [ceph: root@host01 /]# ceph orch ps

第 14 章 处理节点故障

作为存储管理员,您可以在存储集群中遇到整个节点故障,并且处理节点故障与处理磁盘故障类似。如果节点出现故障,而不是 Ceph 只为一个磁盘恢复 PG,则必须恢复该节点上磁盘上的所有 PG。Ceph 将检测 OSD 已停机并自动启动恢复过程,称为自我修复。

有三种节点故障情况:以下是替换节点时每个场景的高级工作流:

  • 替换 节点,但从故障节点使用根和 Ceph OSD 磁盘。

    1. 禁用回填。
    2. 替换节点,从旧节点获取磁盘,并将它们添加到新节点中。
    3. 启用回填.
  • 替换节点,重新安装操作系统,并从故障节点使用 Ceph OSD 磁盘。

    1. 禁用回填。
    2. 创建 Ceph 配置的备份。
    3. 替换 节点,再添加来自故障节点的 Ceph OSD 磁盘。
    4. 将磁盘配置为 JBOD.
    5. 安装操作系统。
    6. 恢复 Ceph 配置。
    7. 使用 Ceph 编排器命令将新节点添加到存储群集,并且 Ceph 守护进程会自动放置到对应的节点上。
    8. 启用回填.
  • 替换 节点,重新安装操作系统,并且使用所有新的 Ceph OSD 磁盘。

    1. 禁用回填。
    2. 从存储集群移除故障节点上的所有 OSD。
    3. 创建 Ceph 配置的备份。
    4. 替换 节点,再添加来自故障节点的 Ceph OSD 磁盘。

      1. 将磁盘配置为 JBOD.
    5. 安装操作系统。
    6. 使用 Ceph 编排器命令将新节点添加到存储群集,并且 Ceph 守护进程会自动放置到对应的节点上。
    7. 启用回填.

14.1. 先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 出现故障的节点。

14.2. 添加或删除节点前的注意事项

Ceph 的一个出色的功能是在运行时添加或删除 Ceph OSD 节点。这意味着您可以调整存储集群容量的大小,或者在不关闭存储集群的情况下替换硬件。

当存储集群处于 降级 状态时,能够为 Ceph 客户端提供服务也具有操作优势。例如,您可以在正常工作时间内添加或删除或删除或替换硬件,而不是在加班或周间工作。但是,添加和移除 Ceph OSD 节点可能会对性能产生重大影响。

在添加或删除 Ceph OSD 节点前,请考虑对存储集群性能的影响:

  • 无论您是扩展还是缩小存储集群容量,添加或删除 Ceph OSD 节点都会减少回填,作为存储集群重新平衡。在重新平衡期间,Ceph 使用其他资源,这可能会影响存储集群性能。
  • 在生产用 Ceph 存储集群中,Ceph OSD 节点具有促进特定类型存储策略的特定硬件配置。
  • 由于 Ceph OSD 节点是 CRUSH 层次结构的一部分,添加或删除节点的性能影响通常会影响使用 CRUSH 规则集的池的性能。

其它资源

14.3. 性能注意事项

在添加或删除 Ceph OSD 节点时,以下因素通常影响存储集群的性能:

  • Ceph 客户端将 I/O 接口的负载放在 Ceph;即,客户端将负载放入池。池映射到 CRUSH 规则集。Ceph 底层 CRUSH 层次结构允许 Ceph 在故障域之间放置数据。如果底层 Ceph OSD 节点涉及的池正在经历较高的客户端负载,客户端的负载可能会严重影响恢复时间并降低性能。由于写入操作需要数据复制以实现持久性,尤其是写入密集型客户端负载可增加存储集群恢复的时间。
  • 通常,您要添加或删除的容量会影响存储集群恢复的时间。另外,添加或删除的节点的存储密度也可能影响恢复时间。例如,具有 36 个 OSD 的节点恢复通常比具有 12 个 OSD 的节点要长。
  • 删除节点时,您必须确保您有足够的备用容量,以便您不会达到 满比率 或接近满比率。如果存储群集达到 满比率,Ceph 将暂停写入操作,以防止数据丢失。
  • Ceph OSD 节点至少映射到一个 Ceph CRUSH 层次结构,其层次结构至少映射到一个池。使用 CRUSH 规则集的每个池在添加或删除 Ceph OSD 节点时都会遇到性能影响。
  • 复制池往往使用更多的网络带宽来复制数据的深度副本,而纠删代码池则往往使用更多 CPU 来计算 k+m 编码区块。数据副本越多,存储集群恢复所需的时间就会越长。例如,一个更大的池或具有更多 k+m 块的池,恢复所需的时间要长于具有相同数据副本较少的复制池。
  • 驱动器、控制器和网络接口卡都具有可能会影响恢复时间的吞吐量特征。通常,吞吐量较高的节点(如 10 Gbps 和 SSD)的恢复速度要快于吞吐量较低的节点,如 1 Gbps 和 SATA 驱动器。

14.4. 添加或删除节点的建议

红帽建议在节点内一次性添加或删除一个 OSD,并在继续下一 OSD 前允许存储集群恢复。这有助于最小化对存储集群性能的影响。请注意,如果节点出现故障,您可能需要一次更改整个节点,而不必一次更改一个 OSD。

删除 OSD:

添加 OSD:

在添加或删除 Ceph OSD 节点时,请考虑其他持续进程对存储集群性能的影响。要减少对客户端 I/O 的影响,红帽建议以下内容:

计算容量

在移除 Ceph OSD 节点之前,请确保存储集群可以回填其所有 OSD 的内容,而不达到 满比率。达到 满比率 将导致存储集群拒绝写入操作。

临时禁用清理

清理对于确保存储集群数据的持久性至关重要,但它需要消耗大量资源。在添加或删除 Ceph OSD 节点之前,请先禁用清理和深度清理,并在继续操作前让当前的清理完成。

ceph osd set noscrub
ceph osd set nodeep-scrub

添加或删除 Ceph OSD 节点并且存储集群返回到 active+clean 状态后,取消设置 noscrubnodeep-scrub 设置。

ceph osd unset noscrub
ceph osd unset nodeep-scrub

限制回填和恢复

如果您有合理的数据持久性,在 降级 状态下操作不会有任何问题。例如,您可以使用 osd_pool_default _size = 3 和 osd_pool_default _min_size = 2 来运行存储集群。您可以对存储集群进行可能的恢复速度最快的调整,但这对 Ceph 客户端 I/O 性能有很大影响。为保持最高的 Ceph 客户端 I/O 性能,请限制回填和恢复操作,并允许它们花费更长的时间。

osd_max_backfills = 1
osd_recovery_max_active = 1
osd_recovery_op_priority = 1

您还可以考虑设置睡眠参数和延迟参数,如 osd_recovery_sleep

增加 PG 数量

最后,如果您要扩展存储集群的大小,可能需要增加放置组的数量。如果您确定需要扩展 PG 数量,红帽建议增加 PG 数量。将放置组数量显著增加将会导致性能下降。

14.5. 添加 Ceph OSD 节点

若要扩展红帽 Ceph 存储集群的容量,您可以添加 OSD 节点。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 具有网络连接的置备节点。

流程

  1. 验证存储集群中的其他节点可以通过其短主机名访问新节点。
  2. 临时禁用清理:

    示例

    [ceph: root@host01 /]# ceph osd set noscrub
    [ceph: root@host01 /]# ceph osd set nodeep-scrub

  3. 限制回填和恢复功能:

    语法

    ceph tell DAEMON_TYPE.* injectargs --OPTION_NAME VALUE [--OPTION_NAME VALUE]

    示例

    [ceph: root@host01 /]# ceph tell osd.* injectargs --osd-max-backfills 1 --osd-recovery-max-active 1 --osd-recovery-op-priority 1

  4. 将集群的公共 SSH 密钥提取到文件夹中:

    语法

    ceph cephadm get-pub-key > ~/PATH

    示例

    [ceph: root@host01 /]# ceph cephadm get-pub-key > ~/ceph.pub

  5. 将 ceph 集群的公共 SSH 密钥复制到新主机上的 root 用户的 authorized_keys 文件中:

    语法

    ssh-copy-id -f -i ~/PATH root@HOST_NAME_2

    示例

    [ceph: root@host01 /]# ssh-copy-id -f -i ~/ceph.pub root@host02

  6. 将新节点添加到 CRUSH map:

    语法

    ceph orch host add NODE_NAME IP_ADDRESS

    示例

    [ceph: root@host01 /]# ceph orch host add host02 168.20.20.2

  7. 为节点上的每个磁盘添加一个 OSD 到存储集群。

重要

在添加 OSD 节点到红帽 Ceph 存储集群时,红帽建议一次添加一个 OSD 守护进程,并在继续下一 OSD 前让集群恢复到 active+clean 状态。

14.6. 删除 Ceph OSD 节点

要减少存储集群的容量,请移除 OSD 节点。

警告

在移除 Ceph OSD 节点之前,请确保存储集群可以回填所有 OSD 的内容,而不达到 满比率。达到 满比率 将导致存储集群拒绝写入操作。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 对存储集群中所有节点的根级别访问权限。

流程

  1. 检查存储集群的容量:

    语法

    ceph df
    rados df
    ceph osd df

  2. 临时禁用清理:

    语法

    ceph osd set noscrub
    ceph osd set nodeep-scrub

  3. 限制回填和恢复功能:

    语法

    ceph tell DAEMON_TYPE.* injectargs --OPTION_NAME VALUE [--OPTION_NAME VALUE]

    示例

    [ceph: root@host01 /]# ceph tell osd.* injectargs --osd-max-backfills 1 --osd-recovery-max-active 1 --osd-recovery-op-priority 1

  4. 从存储集群中移除节点上的每个 OSD:

    • 使用 Ceph 编排器移除 OSD 守护进程.

      重要

      在从存储集群中删除 OSD 节点时,红帽建议在节点上一次移除一个 OSD,并在继续移除下一个 OSD 之前,让集群恢复到 active+clean 状态。

      1. 删除 OSD 后,检查以确认存储集群没有达到 接近完整比率

        语法

        ceph -s
        ceph df

      2. 重复此步骤,直到节点上的所有 OSD 都从存储集群中移除。
  5. 移除所有 OSD 后,删除主机:

其它资源

14.7. 模拟节点失败

要模拟硬节点故障,请关闭节点并重新安装操作系统。

先决条件

  • 运行正常的红帽 Ceph 存储集群。
  • 对存储集群上所有节点的根级别访问权限。

流程

  1. 检查存储集群的容量以了解删除节点的影响:

    示例

    [ceph: root@host01 /]# ceph df
    [ceph: root@host01 /]# rados df
    [ceph: root@host01 /]# ceph osd df

  2. 另外,还可禁用恢复和回填:

    示例

    [ceph: root@host01 /]# ceph osd set noout
    [ceph: root@host01 /]# ceph osd set noscrub
    [ceph: root@host01 /]# ceph osd set nodeep-scrub

  3. 关闭节点。
  4. 如果要更改主机名,请从 CRUSH map 中删除节点:

    示例

    [ceph: root@host01 /]# ceph osd crush rm host03

  5. 检查存储集群的状态:

    示例

    [ceph: root@host01 /]# ceph -s

  6. 在节点上重新安装操作系统。
  7. 添加新节点:

  8. 另外,还可启用恢复和回填:

    示例

    [ceph: root@host01 /]# ceph osd unset noout
    [ceph: root@host01 /]# ceph osd unset noscrub
    [ceph: root@host01 /]# ceph osd unset nodeep-scrub

  9. 检查 Ceph 的健康状态:

    示例

    [ceph: root@host01 /]# ceph -s

其它资源

第 15 章 处理数据中心故障

作为存储管理员,您可以采取强制措施以避免数据中心故障。这些强制措施包括:

  • 配置数据中心基础架构.
  • 在 CRUSH map 层次结构中设置故障域.
  • 指定域中的故障节点.

15.1. 先决条件

  • 运行正常的红帽 Ceph 存储集群。
  • 对存储集群中所有节点的根级别访问权限。

15.2. 避免数据中心故障

配置数据中心基础架构

扩展群集中的每个数据中心可以具有不同的存储集群配置,以反映本地功能和依赖项。在数据中心之间设置复制,以帮助保留数据。如果一个数据中心出现故障,存储集群中的其他数据中心将包含数据的副本。

在 CRUSH map 层次结构中设置故障域

域失败或故障转移是存储集群中域的冗余副本。如果某个活动域失败,则故障域将成为活动域。

默认情况下,CRUSH map 在扁平层次结构中列出存储群集中的所有节点。但是,为了获得最佳结果,在 CRUSH map 中创建逻辑层次结构。层次结构指定每个节点所属的域以及存储集群中这些域之间的关系,包括故障域。在层次结构中定义每个域的故障域可提高存储集群的可靠性。

在规划包含多个数据中心的存储集群时,请将节点置于 CRUSH map 层次结构中,以便在一个数据中心出现故障时,存储群集的其余部分会保持正常运行。

在域中指定故障节点

如果您计划对存储集群内的数据使用三向复制,请考虑故障域中节点的位置。如果数据中心内发生停机,则某些数据可能仅存在于一个副本中。发生这种情况时,有两个选项:

  • 将数据保留为只读状态,使用标准设置。
  • 在中断期间只使用一个副本进行实时。

使用标准设置,并且由于数据在节点间放置的随机性,并非所有数据都会受到影响,但一些数据只能有一个副本,存储集群将恢复到只读模式。但是,如果某些数据仅存在于一个副本中,则存储集群会恢复到只读模式。

15.3. 处理数据中心故障

红帽 Ceph 存储可能会遭受基础架构的灾难性故障,例如丢失扩展群集中的一个数据中心。对于标准的对象存储用例,可以独立于它们之间的复制来配置所有三个数据中心。在这种情况下,每个数据中心中的存储集群配置可能会有所不同,这反映了本地功能和依赖项。

应考虑放置层次结构的逻辑结构。可以使用正确的 CRUSH map,反映基础架构中故障域的层次结构。使用逻辑层次定义可提高存储群集的可靠性,而非使用标准层次结构定义。故障域在 CRUSH map 中定义。默认 CRUSH map 包含扁平层次结构中的所有节点。在三个数据中心环境中,如扩展集群,节点的放置应该以一个数据中心停机的方式进行管理,但存储集群会保持启动和运行。在对数据使用三向复制时,节点会驻留于哪个故障域。

在下例中,生成的 map 派生自具有 6 个 OSD 节点的存储集群的初始设置。在本例中,所有节点只有一个磁盘,因此只有一个 OSD。所有节点都排列在默认 下,即层次结构树的标准 根目录 下。由于分配给两个 OSD 的权重比较大,因此这些 OSD 收到的数据区块比其他 OSD 少。这些节点在稍后引入时比初始 OSD 磁盘大。这不会影响数据放置来防止一组节点的故障。

示例

[ceph: root@host01 /]# ceph osd tree
ID WEIGHT  TYPE NAME           UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.33554 root default
-2 0.04779     host host03
 0 0.04779         osd.0            up  1.00000          1.00000
-3 0.04779     host host02
 1 0.04779         osd.1            up  1.00000          1.00000
-4 0.04779     host host01
 2 0.04779         osd.2            up  1.00000          1.00000
-5 0.04779     host host04
 3 0.04779         osd.3            up  1.00000          1.00000
-6 0.07219     host host06
 4 0.07219         osd.4            up  0.79999          1.00000
-7 0.07219     host host05
 5 0.07219         osd.5            up  0.79999          1.00000

使用逻辑分层定义将节点分组到同一数据中心可以实现数据放置成熟度。可以通过可能的 数据中心机架 和主机 定义类型来反映三个数据中心扩展集群的故障域:

  • 节点 host01 和 host02 驻留在数据中心 1(DC1)
  • 节点 host03 和 host05 驻留在数据中心 2(DC2)中.
  • 节点 host04 和 host06 驻留在数据中心 3(DC3)
  • 所有数据中心属于同一结构(所有DC)

由于主机中的所有 OSD 都属于主机定义,因此无需进行任何更改。所有其他分配可在存储集群运行时调整:

  • 使用以下命令定义 存储桶 结构:

    ceph osd crush add-bucket allDC root
    ceph osd crush add-bucket DC1 datacenter
    ceph osd crush add-bucket DC2 datacenter
    ceph osd crush add-bucket DC3 datacenter
  • 通过修改 CRUSH map 将节点移到此结构中的相应位置:

    ceph osd crush move DC1 root=allDC
    ceph osd crush move DC2 root=allDC
    ceph osd crush move DC3 root=allDC
    ceph osd crush move host01 datacenter=DC1
    ceph osd crush move host02 datacenter=DC1
    ceph osd crush move host03 datacenter=DC2
    ceph osd crush move host05 datacenter=DC2
    ceph osd crush move host04 datacenter=DC3
    ceph osd crush move host06 datacenter=DC3

在此结构中,任何新主机也可以添加,也可以添加新磁盘。通过将 OSD 放置到层次结构中的正确位置,CRUSH 算法已被更改,将冗余部分放入结构中不同的故障域中。

以上示例会产生以下内容:

示例

[ceph: root@host01 /]# ceph osd tree
ID  WEIGHT  TYPE NAME               UP/DOWN REWEIGHT PRIMARY-AFFINITY
 -8 6.00000 root allDC
 -9 2.00000     datacenter DC1
 -4 1.00000         host host01
  2 1.00000             osd.2            up  1.00000          1.00000
 -3 1.00000         host host02
  1 1.00000             osd.1            up  1.00000          1.00000
-10 2.00000     datacenter DC2
 -2 1.00000         host host03
  0 1.00000             osd.0            up  1.00000          1.00000
 -7 1.00000         host host05
  5 1.00000             osd.5            up  0.79999          1.00000
-11 2.00000     datacenter DC3
 -6 1.00000         host host06
  4 1.00000             osd.4            up  0.79999          1.00000
 -5 1.00000         host host04
  3 1.00000             osd.3            up  1.00000          1.00000
 -1       0 root default

上方的列表通过显示 osd 树来显示生成的 CRUSH map。易于查看的是,主机如何属于数据中心,所有数据中心从属于同一顶级结构,但清楚区分各个位置。

注意

根据映射将数据放置到正确的位置时,只能在健康的集群中正常工作。某些 OSD 不可用时,可能会出现错误放置。这些错误一旦可能就会自动修正。

其它资源

  • 如需更多信息,请参见《红帽 Ceph 存储策略指南》中的 CRUSH 管理 一章。