Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

容器指南

Red Hat Ceph Storage 3

在容器中部署和管理 Red Hat Ceph Storage

摘要

本文档论述了如何在容器中部署和管理红帽 Ceph 存储。

第 1 章 在容器中部署 Red Hat Ceph Storage

本章论述了如何将 Ansible 应用与 ceph-ansible playbook 搭配使用,以在容器中部署 Red Hat Ceph Storage 3。

1.1. 先决条件

1.1.1. 将 Red Hat Ceph Storage 节点注册到 CDN 和附加订阅

将每个 Red Hat Ceph Storage(RHCS)节点注册到 Content Delivery Network(CDN),并附加适当的订阅,以便节点可以访问软件存储库。每个 RHCS 节点都必须能访问完整的 Red Hat Enterprise Linux 7 基本内容和额外存储库内容。

先决条件
  • 有效的红帽订阅
  • RHCS 节点必须能够连接到互联网。
  • 对于在安装过程中无法访问互联网的 RHCS 节点,您必须首先在有互联网访问的系统中按照以下步骤操作:

    1. 启动本地 Docker registry:

      # docker run -d -p 5000:5000 --restart=always --name registry registry:2
    2. 从红帽客户门户网站拉取 Red Hat Ceph Storage 3.x 镜像:

      # docker pull registry.access.redhat.com/rhceph/rhceph-3-rhel7
    3. 标记镜像:

       # docker tag registry.access.redhat.com/rhceph/rhceph-3-rhel7 <local-host-fqdn>:5000/cephimageinlocalreg

      <local-host-fqdn> 替换为本地主机 FQDN。

    4. 将镜像推送到您启动的本地 Docker registry:

      # docker push <local-host-fqdn>:5000/cephimageinlocalreg

      <local-host-fqdn> 替换为本地主机 FQDN。

步骤

root 用户身份在存储集群中的所有节点上执行以下步骤。

  1. 注册该节点。在提示时,输入您的红帽客户门户网站凭证:

    # subscription-manager register
  2. 从 CDN 拉取最新的订阅数据:

    # subscription-manager refresh
  3. 列出 Red Hat Ceph Storage 的所有可用订阅:

    # subscription-manager list --available --all --matches="*Ceph*"

    确定适当的订阅并检索其池 ID。

  4. 附加订阅:

    # subscription-manager attach --pool=$POOL_ID
    替换
    • $POOL_ID,其池 ID 在上一步中标识。
  5. 禁用默认软件存储库。然后,启用 Red Hat Enterprise Linux 7 Server、Red Hat Enterprise Linux 7 Server Extras 和 RHCS 软件仓库:

    # subscription-manager repos --disable=*
    # subscription-manager repos --enable=rhel-7-server-rpms
    # subscription-manager repos --enable=rhel-7-server-extras-rpms
    # subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-els-rpms
    # subscription-manager repos --enable=rhel-7-server-rhceph-3-osd-els-rpms
    # subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
  6. 更新系统以接收最新的软件包:

    # yum update
其它资源

1.1.2. 创建具有 sudo 访问权限的 Ansible 用户

Ansible 必须能够以具有 root 权限的用户身份登录所有 Red Hat Ceph Storage 节点,以便在不提示输入密码的情况下安装软件和创建配置文件。在使用 Ansible 部署和配置 Red Hat Ceph Storage 集群时,您必须在存储集群的所有节点上创建一个没有密码的 root 用户。

前提条件

  • 对存储集群中的所有节点具有 rootsudo 访问权限。

步骤

  1. root 用户身份登录 Ceph 节点:

    ssh root@$HOST_NAME
    替换
    • $HOST_NAME,主机名为 Ceph 节点。

    示例

    # ssh root@mon01

    出现提示时,输入 root 密码。

  2. 创建一个新的 Ansible 用户:

    adduser $USER_NAME
    替换
    • $USER_NAME,以及 Ansible 用户的新用户名。

    示例

    # adduser admin

    重要

    不要使用 ceph 作为用户名。ceph 用户名保留用于 Ceph 守护进程。整个集群中的统一用户名可以提高易用性,但避免使用明显的用户名,因为入侵者通常使用它们进行暴力攻击。

  3. 为这个用户设置一个新密码:

    # passwd $USER_NAME
    替换
    • $USER_NAME,以及 Ansible 用户的新用户名。

    示例

    # passwd admin

    出现提示时,输入新密码两次。

  4. 为新创建的用户配置 sudo 访问权限:

    cat << EOF >/etc/sudoers.d/$USER_NAME
    $USER_NAME ALL = (root) NOPASSWD:ALL
    EOF
    替换
    • $USER_NAME,以及 Ansible 用户的新用户名。

    示例

    # cat << EOF >/etc/sudoers.d/admin
    admin ALL = (root) NOPASSWD:ALL
    EOF

  5. 为新文件分配正确的文件权限:

    chmod 0440 /etc/sudoers.d/$USER_NAME
    替换
    • $USER_NAME,以及 Ansible 用户的新用户名。

    示例

    # chmod 0440 /etc/sudoers.d/admin

其它资源

  • Red Hat Enterprise Linux 7 系统管理员指南 中的 Adding a New User 部分。

1.1.3. 为 Ansible 启用无密码 SSH

在 Ansible 管理节点上生成 SSH 密钥对,并将公钥分发到存储集群中的每个节点,以便 Ansible 可以在不提示输入密码的情况下访问节点。

先决条件
步骤

从 Ansible 管理节点以及 Ansible 用户执行以下步骤。

  1. 生成 SSH 密钥对,接受默认文件名并将密语留空:

    [user@admin ~]$ ssh-keygen
  2. 将公钥复制到存储集群中的所有节点:

    ssh-copy-id $USER_NAME@$HOST_NAME
    替换
    • $USER_NAME,以及 Ansible 用户的新用户名。
    • $HOST_NAME,主机名为 Ceph 节点。

    示例

    [user@admin ~]$ ssh-copy-id admin@ceph-mon01

  3. 创建并编辑 ~/.ssh/config 文件。

    重要

    通过创建和编辑 ~/.ssh/config 文件,您不必在每次执行 ansible-playbook 命令时指定 -u $USER_NAME 选项。

    1. 创建 SSH 配置文件

      [user@admin ~]$ touch ~/.ssh/config
    2. 打开 配置文件 进行编辑。为存储集群中的每个节点设置 HostnameUser 选项:

      Host node1
         Hostname $HOST_NAME
         User $USER_NAME
      Host node2
         Hostname $HOST_NAME
         User $USER_NAME
      ...
      替换
      • $HOST_NAME,主机名为 Ceph 节点。
      • $USER_NAME,以及 Ansible 用户的新用户名。

      示例

      Host node1
         Hostname monitor
         User admin
      Host node2
         Hostname osd
         User admin
      Host node3
         Hostname gateway
         User admin

  4. ~/.ssh/config 文件设置正确的文件权限:

    [admin@admin ~]$ chmod 600 ~/.ssh/config
其它资源
  • ssh_config(5) 手册页
  • Red Hat Enterprise Linux 7 系统管理员指南中的 OpenSSH 章节

1.1.4. 为 Red Hat Ceph Storage 配置防火墙

Red Hat Ceph Storage(RHCS)使用 firewalld 服务。

Monitor 守护进程使用端口 6789 用于在 Ceph 存储群集内进行通信。

在每个 Ceph OSD 节点上,OSD 守护进程使用 6800-7300 范围内的多个端口:

  • 一个用于通过公共网络与客户端通信和监控器
  • 一个用于通过集群网络发送数据到其他 OSD(如果可用);否则,通过公共网络发送数据
  • 一个用于通过集群网络(如果有)交换心跳数据包;否则,通过公共网络交换。

Ceph 管理器 (ceph-mgr) 守护进程使用范围为 6800-7300 的端口。考虑将 ceph-mgr 守护进程与 Ceph monitor 在同一节点上并置。

Ceph 元数据服务器节点(ceph-mds)使用范围 680 0-7300 中的端口

Ceph 对象网关节点由 Ansible 配置为使用默认端口 8080。但是,您可以更改默认端口,例如端口 80

要使用 SSL/TLS 服务,请打开端口 443

前提条件

  • 网络硬件已连接。

步骤

root 用户身份运行以下命令。

  1. 在所有 RHCS 节点上,启动 firewalld 服务。启用它在引导时运行,并确保它正在运行:

    # systemctl enable firewalld
    # systemctl start firewalld
    # systemctl status firewalld
  2. 在所有监控节点上,打开 公共网络 上的端口 6789:

    [root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp
    [root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp --permanent

    根据源地址限制访问:

    firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
    source address="IP_address/netmask_prefix" port protocol="tcp" \
    port="6789" accept"
    firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
    source address="IP_address/netmask_prefix" port protocol="tcp" \
    port="6789" accept" --permanent
    替换
    • 带有 monitor 节点的网络地址的 ip _address
    • 带有 CIDR 表示法子网掩码的 netmask_prefix

    示例

    [root@monitor ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
    source address="192.168.0.11/24" port protocol="tcp" \
    port="6789" accept"

    [root@monitor ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
    source address="192.168.0.11/24" port protocol="tcp" \
    port="6789" accept" --permanent
  3. 在所有 OSD 节点上,打开公共网络上的端口 6800-7300

    [root@osd ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp
    [root@osd ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent

    如果您有单独的集群网络,请对适当的区重复这些命令。

  4. 在所有 Ceph Manager(ceph-mgr)节点上(通常是与监控器节点相同),在公共网络上打开端口 6800-7300

    [root@monitor ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp
    [root@monitor ~]# firewall-cmd --zone=public --add-port=6800-7300/tcp --permanent

    如果您有单独的集群网络,请对适当的区重复这些命令。

  5. 在所有 Ceph 元数据服务器(ceph-mds)节点上,打开公共网络上的端口 6800

    [root@monitor ~]# firewall-cmd --zone=public --add-port=6800/tcp
    [root@monitor ~]# firewall-cmd --zone=public --add-port=6800/tcp --permanent

    如果您有单独的集群网络,请对适当的区重复这些命令。

  6. 在所有 Ceph 对象网关节点上,打开公共网络上的相关端口或端口。

    1. 打开默认 Ansible 配置的端口 8080:

      [root@gateway ~]# firewall-cmd --zone=public --add-port=8080/tcp
      [root@gateway ~]# firewall-cmd --zone=public --add-port=8080/tcp --permanent

      根据源地址限制访问:

      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="8080" accept"
      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="8080" accept" --permanent
      替换
      • ip_address 带有对象网关节点的网络地址。
      • 带有 CIDR 表示法子网掩码的 netmask_prefix

      示例

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="8080" accept"

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="8080" accept" --permanent
    2. 可选。如果使用 Ansible 安装 Ceph 对象网关,并且更改 Ansible 将 Ceph 对象网关配置为从 8080 使用的默认端口,例如,使用端口 80,打开此端口:

      [root@gateway ~]# firewall-cmd --zone=public --add-port=80/tcp
      [root@gateway ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent

      要根据源地址限制访问,请运行以下命令:

      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="80" accept"
      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="80" accept" --permanent
      替换
      • ip_address 带有对象网关节点的网络地址。
      • 带有 CIDR 表示法子网掩码的 netmask_prefix

      示例

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="80" accept"

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="80" accept" --permanent
    3. 可选。要使用 SSL/TLS,请打开端口 443

      [root@gateway ~]# firewall-cmd --zone=public --add-port=443/tcp
      [root@gateway ~]# firewall-cmd --zone=public --add-port=443/tcp --permanent

      要根据源地址限制访问,请运行以下命令:

      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="443" accept"
      firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="IP_address/netmask_prefix" port protocol="tcp" \
      port="443" accept" --permanent
      替换
      • ip_address 带有对象网关节点的网络地址。
      • 带有 CIDR 表示法子网掩码的 netmask_prefix

      示例

      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="443" accept"
      [root@gateway ~]# firewall-cmd --zone=public --add-rich-rule="rule family="ipv4" \
      source address="192.168.0.31/24" port protocol="tcp" \
      port="443" accept" --permanent

其它资源

1.1.5. 使用 HTTP 代理

如果 Ceph 节点位于 HTTP/HTTPS 代理后面,则需要配置 docker 以访问 registry 中的镜像。执行以下步骤使用 HTTP/HTTPS 代理配置 docker 的访问。

先决条件
  • 正在运行的 HTTP/HTTPS 代理
步骤
  1. 作为 root 用户,为 docker 服务创建一个 systemd 目录:

    # mkdir /etc/systemd/system/docker.service.d/
  2. root 身份,创建 HTTP/HTTPS 配置文件。

    1. 对于 HTTP,创建 /etc/systemd/system/docker.service.d/http-proxy.conf 文件,并将以下几行添加到文件中:

      [Service]
      Environment="HTTP_PROXY=http://proxy.example.com:80/"
    2. 对于 HTTPS,请创建 /etc/systemd/system/docker.service.d/https-proxy.conf 文件,并将以下几行添加到文件中:

      [Service]
      Environment="HTTPS_PROXY=https://proxy.example.com:443/"
  3. root 用户身份,在运行 ceph-ansible playbook 之前,将 HTTP/HTTPS 配置文件复制到存储集群中的所有节点。

1.2. 在容器中安装 Red Hat Ceph Storage 集群

将 Ansible 应用与 ceph-ansible playbook 搭配使用,在容器中安装 Red Hat Ceph Storage 3。

生产环境中使用的 Ceph 集群通常包含十个或更多节点。要将 Red Hat Ceph Storage 作为容器镜像部署,红帽建议使用至少包含三个 OSD 和三个 monitor 节点的 Ceph 集群。

重要

Ceph 可以使用一个监控器运行;但是,为了保证生产环境集群中的高可用性,红帽将仅支持具有至少三个 monitor 节点的部署。

先决条件

  • 在 Ansible 管理节点上使用 root 用户帐户,启用 Red Hat Ceph Storage 3 工具存储库和 Ansible 存储库:

    [root@admin ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms --enable=rhel-7-server-ansible-2.6-rpms
  • 安装 ceph-ansible 软件包:

    [root@admin ~]# yum install ceph-ansible

步骤

除非另有指示,否则从 Ansible 管理节点运行以下命令。

  1. 以 Ansible 用户身份,创建 ceph-ansible-keys 目录,Ansible 存储由 ceph-ansible playbook 生成的临时值。

    [user@admin ~]$ mkdir ~/ceph-ansible-keys
  2. 以 root 用户身份,在 /etc/ansible/ 目录中创建一个指向 /usr/share/ceph-ansible/group_vars 目录的符号链接:

    [root@admin ~]# ln -s /usr/share/ceph-ansible/group_vars /etc/ansible/group_vars
  3. 进入 /usr/share/ceph-ansible/ 目录:

    [root@admin ~]$ cd /usr/share/ceph-ansible
  4. 为 yml .sample 文件创建 新副本:

    [root@admin ceph-ansible]# cp group_vars/all.yml.sample group_vars/all.yml
    [root@admin ceph-ansible]# cp group_vars/osds.yml.sample group_vars/osds.yml
    [root@admin ceph-ansible]# cp site-docker.yml.sample site-docker.yml
  5. 编辑复制的文件。

    1. 编辑 group_vars/all.yml 文件。下表包括了最常见需要的和可选参数以取消注释。请注意,表不包括所有参数。

      重要

      不要将 cluster: ceph 参数设置为 ceph 以外的任何值,因为不支持使用自定义集群名称。

      表 1.1. 常规 Ansible 设置

      选项订阅价值必需备注

      monitor_interface

      monitor 节点侦听的接口

      monitor_interface、monitoring_address 或 monitor_address _block 需要

       

      monitor_address

      monitor 节点侦听的地址

       

      monitor_address_block

      Ceph 公共网络的子网

      当节点的 IP 地址未知时,请使用,但子网是已知的。

      ip_version

      ipv6

      是,如果使用 IPv6 寻址

       

      journal_size

      日志的大小(以 MB 为单位)

       

      public_network

      Ceph 公共网络的 IP 地址和子网掩码

      Red Hat Enterprise Linux 安装指南中验证 Red Hat Ceph Storage的网络配置

      cluster_network

      Ceph 集群网络的 IP 地址和子网掩码

      ceph_docker_image

      rhceph/rhceph-3-rhel7,如果使用本地 Docker registry,则为 cephimageinlocalreg

       

      containerized_deployment

      true

       

      ceph_docker_registry

      registry.access.redhat.com (如果使用本地 Docker registry)或 <local-host-fqdn>

       

      all.yml 文件示例类似如下:

      monitor_interface: eth0
      journal_size: 5120
      public_network: 192.168.0.0/24
      ceph_docker_image: rhceph/rhceph-3-rhel7
      containerized_deployment: true
      ceph_docker_registry: registry.access.redhat.com

      如需了解更多详细信息,请参阅 all.yml 文件。

    2. 编辑 group_vars/osds.yml 文件。下表包括了最常见需要的和可选参数以取消注释。请注意,表不包括所有参数。

      重要

      使用与安装操作系统的设备不同的物理设备安装 OSD。在操作系统和 OSD 之间共享相同的设备会导致性能问题。

      表 1.2. OSD Ansible 设置

      选项订阅价值必需备注

      osd_scenario

      并置 使用同一设备进行 write-ahead logging 和 key/value 数据(BlueStore)或 journal(FileStore)和 OSD 数据

      非并置 使用专用设备,如 SSD 或 NVMe 介质来存储 write-ahead log 和 key/value 数据(BlueStore)或日志数据(FileStore)

      LVM 使用逻辑卷管理器来存储 OSD 数据

      当使用 osd_scenario: non-collocated 时,ceph-ansible 期望 设备和 dedicated_devices 中的变量数匹配。例如,如果您在 设备 中指定 10 个磁盘,您必须在 dedicated_devices 中指定 10 个条目。

      osd_auto_discovery

      True 用于自动发现 OSD

      是,如果使用 osd_scenario: collocated

      使用 设备 设置时无法使用

      devices

      存储 ceph 数据 的设备列表

      yes 指定设备列表

      使用 osd_auto_discovery 设置时无法使用。当使用 lvm 作为 osd_scenario 且设置 devices 选项时,ceph-volume lvm 批处理 模式会创建优化的 OSD 配置。

      dedicated_devices

      存储 ceph 日志 的非并置 OSD 的专用设备列表

      是的,如果 osd_scenario: non-collocated

      应该是非分区的设备

      dmcrypt

      对 OSD 加密为 true

      默认为 false

      lvm_volumes

      FileStore 或 BlueStore 字典列表

      是,如果使用 osd_scenario: lvm 和存储设备没有使用 设备定义

      每一字典必须包含 datajournaldata_vg 键。任何逻辑卷或卷组都必须是名称,而不是完整路径。datajournal 键可以是逻辑卷 (LV) 或分区,但不能将一个日志用于多个 data LV。data_vg 键必须是包含 data LV 的卷组。(可选) journal_vg 键可用于指定包含 journal LV 的卷组(如果适用)。有关各种支持的配置,请参见以下示例。

      osds_per_device

      每个设备要创建的 OSD 数量。

      默认为 1

      osd_objectstore

      OSD 的 Ceph 对象存储类型。

      默认为 蓝色存储。另一个选项是 filestore。升级需要。

      在使用三个 OSD 情境时,以下是 osds.yml 文件示例: collocatednon-collocatedlvm。如果未指定,默认的 OSD 对象存储格式为 BlueStore。

      collocated

      osd_objectstore: filestore
      osd_scenario: collocated
      devices:
        - /dev/sda
        - /dev/sdb

      non-collocated - BlueStore

      osd_objectstore: bluestore
      osd_scenario: non-collocated
      devices:
       - /dev/sda
       - /dev/sdb
       - /dev/sdc
       - /dev/sdd
      dedicated_devices:
       - /dev/nvme0n1
       - /dev/nvme0n1
       - /dev/nvme1n1
       - /dev/nvme1n1

      这个非并置示例将创建四个 BlueStore OSD,每个设备一个。在本例中,传统的硬盘驱动器(sdasdbsdc sdc、sdd)用于对象数据,而固态硬盘(SSD)(SSD)(/dev/nvme0n1 n1)用于 BlueStore 数据库和 write-ahead 日志。此配置对 /dev/sda/dev/sdb 设备与 /dev/nvme0n1 设备对,并使用 /dev/nvme1n1 设备对 /dev/sdc/dev/sdd 设备进行分组。

      non-collocated - FileStore

      osd_objectstore: filestore
      osd_scenario: non-collocated
      devices:
        - /dev/sda
        - /dev/sdb
        - /dev/sdc
        - /dev/sdd
      dedicated_devices:
         - /dev/nvme0n1
         - /dev/nvme0n1
         - /dev/nvme1n1
         - /dev/nvme1n1

      LVM simple

      osd_objectstore: bluestore
      osd_scenario: lvm
      devices:
        - /dev/sda
        - /dev/sdb

      osd_objectstore: bluestore
      osd_scenario: lvm
      devices:
        - /dev/sda
        - /dev/sdb
        - /dev/nvme0n1

      使用这些简单的配置 ceph-ansible 使用批处理模式(ceph-volume lvm batch)来创建 OSD。

      在第一个场景中,如果 devices 是传统的硬盘驱动器或 SSD,则每个设备会创建一个 OSD。

      在第二种情况下,当存在传统硬盘驱动器和 SSD 混合时,其数据将放置到传统硬盘驱动器(sdasdb)和 BlueStore 数据库(block.db)上,会在 SSD 上尽可能创建(nvme0n1)。

      LVM advance

      osd_objectstore: filestore
      osd_scenario: lvm
      lvm_volumes:
         - data: data-lv1
           data_vg: vg1
           journal: journal-lv1
           journal_vg: vg2
         - data: data-lv2
           journal: /dev/sda
           data_vg: vg1

      osd_objectstore: bluestore
      osd_scenario: lvm
      lvm_volumes:
        - data: data-lv1
          data_vg: data-vg1
          db: db-lv1
          db_vg: db-vg1
          wal: wal-lv1
          wal_vg: wal-vg1
        - data: data-lv2
          data_vg: data-vg2
          db: db-lv2
          db_vg: db-vg2
          wal: wal-lv2
          wal_vg: wal-vg2

      使用这些提前方案示例,必须先创建卷组和逻辑卷。它们不会被 ceph-ansible 创建。

      注意

      如果使用所有 NVMe SSDs 设置 osd_scenario: lvmosds_per_device:4 选项。如需更多信息,请参阅 Red Hat Ceph Storage Container Guide为所有 NVMe Storage 配置 OSD Ansible 设置

      如需了解更多详细信息,请参阅 osds.yml 文件中的注释。

  6. 编辑默认位于 /etc/ansible/hosts 的 Ansible 清单文件。记住注释掉示例主机。

    1. [mons] 部分添加 monitor 节点:

      [mons]
      <monitor-host-name>
      <monitor-host-name>
      <monitor-host-name>
    2. [osds] 部分下添加 OSD 节点。如果节点有顺序命名,请考虑使用一个范围:

      [osds]
      <osd-host-name[1:10]>
      注意

      对于新安装的 OSD,默认的对象存储格式为 BlueStore。

      或者,您可以通过在 [mons][osds] 部分中添加相同的节点,将 monitor 与一个节点上的 OSD 守护进程在一起。详情请查看 第 2 章 容器化 Ceph 守护进程的共存

  7. 另外,对于所有部署、裸机或 容器,您可以使用 ansible-playbook 创建自定义 CRUSH 层次结构:

    1. 设置 Ansible 清单文件。使用 osd_crush_location 参数指定您希望 OSD 主机在 CRUSH map 的层次结构中的位置。您必须至少指定两个 CRUSH bucket 类型,以指定 OSD 的位置,一个 bucket 类型 必须是主机。默认情况下,包括 root, datacenter, room, row, pod, pdu, rack, chassishost

      Syntax

      [osds]
      CEPH_OSD_NAME osd_crush_location="{ 'root': ROOT_BUCKET_', 'rack': 'RACK_BUCKET', 'pod': 'POD_BUCKET', 'host': 'CEPH_HOST_NAME' }"

      示例

      [osds]
      ceph-osd-01 osd_crush_location="{ 'root': 'default', 'rack': 'rack1', 'pod': 'monpod', 'host': 'ceph-osd-01' }"

    2. crush_rule_configcreate_crush_tree 参数设置为 True,并至少创建一个 CRUSH 规则(如果您不想使用默认 CRUSH 规则)。例如:如果您使用 HDD 设备,请按如下方式编辑参数:

      crush_rule_config: True
      crush_rule_hdd:
          name: replicated_hdd_rule
          root: root-hdd
          type: host
          class: hdd
          default: True
      crush_rules:
        - "{{ crush_rule_hdd }}"
      create_crush_tree: True

      如果使用 SSD 设备,请按如下所示编辑参数:

      crush_rule_config: True
      crush_rule_ssd:
          name: replicated_ssd_rule
          root: root-ssd
          type: host
          class: ssd
          default: True
      crush_rules:
        - "{{ crush_rule_ssd }}"
      create_crush_tree: True
      注意

      如果未部署 ssdhdd OSD,默认 CRUSH 规则会失败,因为默认规则现在包含类参数,必须定义。

      注意

      按照以下步骤中所述,也将自定义 CRUSH 层次结构添加到 host_vars 目录中的 OSD 文件中,以实现此配置。

    3. 使用在 group_vars/clients.yml 文件中创建的 crush_rules 来创建 pools

      示例

      copy_admin_key: True
      user_config: True
      pool1:
        name: "pool1"
        pg_num: 128
        pgp_num: 128
        rule_name: "HDD"
        type: "replicated"
        device_class: "hdd"
      pools:
        - "{{ pool1 }}"

    4. 查看树。

      [root@mon ~]# ceph osd tree
    5. 验证池。

      # for i in $(rados lspools);do echo "pool: $i"; ceph osd pool get $i crush_rule;done
      
      pool: pool1
      crush_rule: HDD
  8. 对于所有部署、裸机或容器中的,打开 来编辑 Ansible 清单文件,默认为 /etc/ansible/hosts 文件。注释掉示例主机。

    1. [mgrs] 部分下,添加 Ceph Manager (ceph-mgr) 节点。与 monitor 节点并置 Ceph 管理器守护进程。

      [mgrs]
      <monitor-host-name>
      <monitor-host-name>
      <monitor-host-name>
  9. 以 Ansible 用户身份,确保 Ansible 可以访问 Ceph 主机:

    [user@admin ~]$ ansible all -m ping
  10. root 身份,创建 /var/log/ansible/ 目录并为 ansible 用户分配适当的权限:

    [root@admin ~]# mkdir /var/log/ansible
    [root@admin ~]# chown ansible:ansible  /var/log/ansible
    [root@admin ~]# chmod 755 /var/log/ansible
    1. 编辑 /usr/share/ceph-ansible/ansible.cfg 文件,更新 log_path 值,如下所示:

      log_path = /var/log/ansible/ansible.log
  11. 以 Ansible 用户身份,更改到 /usr/share/ceph-ansible/ 目录:

    [user@admin ~]$ cd /usr/share/ceph-ansible/
  12. 运行 ceph-ansible playbook:

    [user@admin ceph-ansible]$ ansible-playbook site-docker.yml
    注意

    如果您将 Red Hat Ceph Storage 部署到 Red Hat Enterprise Linux Atomic Host 主机,请使用 --skip-tags=with_pkg 选项:

    [user@admin ceph-ansible]$ ansible-playbook site-docker.yml --skip-tags=with_pkg
    注意

    要提高部署速度,请在 ansible-playbook 中使用 --forks 选项。默认情况下,ceph-ansible 将 fork 设置为 20。在这个版本中,最多 20 个节点将同时安装。要一次安装最多 30 个节点,请运行 ansible-playbook --forks 30 PLAYBOOK FILE。必须监控管理节点上的资源,以确保它们不会被过度使用。如果是,则减少传递给 --forks 的数字。

  13. 使用 monitor 节点上的 root 帐户,验证 Ceph 集群的状态:

    docker exec ceph-<mon|mgr>-<id> ceph health

    替换:

    • <id> 带有 monitor 节点的主机名:

    例如:

    [root@monitor ~]# docker exec ceph-mon-mon0 ceph health
    HEALTH_OK

1.3. 为所有 NVMe 存储配置 OSD Ansible 设置

要在仅使用非易失性内存表达(NVMe)设备进行存储时优化性能,请在每个 NVMe 设备上配置四个 OSD。通常,每个设备仅配置一个 OSD,这将利用 NVMe 设备的吞吐量。

注意

如果您混合了 SSD 和 HDD,则 SSD 将用于日志或 block.db,而非 OSD。

注意

在测试中,发现在每个 NVMe 设备中配置四个 OSD 来提供最佳性能。建议设置 osds_per_device:4,但这不是必须的。其他值可能会在您的环境中提供更好的性能。

先决条件

  • 满足 Ceph 群集的所有软件和硬件要求。

步骤

  1. 设置 osd_scenario: lvmosds_per_device:4 in group_vars/osds.yml:

    osd_scenario: lvm
    osds_per_device: 4
  2. 列出 devices 中的 NVMe 设备:

    devices:
      - /dev/nvme0n1
      - /dev/nvme1n1
      - /dev/nvme2n1
      - /dev/nvme3n1
  3. group_vars/osds.yml 中的设置类似以下示例:

    osd_scenario: lvm
    osds_per_device: 4
    devices:
      - /dev/nvme0n1
      - /dev/nvme1n1
      - /dev/nvme2n1
      - /dev/nvme3n1
注意

您必须将 devices 用于此配置,而不是使用 lvm_volumes。这是因为 lvm_volumes 通常与预先创建的逻辑卷一起使用,而 osds_per_device 则表示 Ceph 自动创建逻辑卷。

1.4. 在容器中安装 Ceph 对象网关

将 Ansible 应用与 ceph-ansible playbook 搭配使用,在容器中安装 Ceph 对象网关。

先决条件

  • 一个正常工作的 Red Hat Ceph Storage 集群。

步骤

从 Ansible 管理节点运行以下命令,除非另有指定。

  1. root 用户身份,导航到 /usr/share/ceph-ansible/ 目录。

    [root@admin ~]# cd /usr/share/ceph-ansible/
  2. 取消注释 group_vars/all.yml 文件中的 radosgw_interface 参数。

    radosgw_interface: interface

    使用 Ceph 对象网关节点侦听的接口替换 interface

  3. 可选。更改默认变量。

    1. 为位于 group_vars 目录中的 rgws.yml.sample 文件创建一个新副本。

      [root@admin ceph-ansible]# cp group_vars/rgws.yml.sample group_vars/rgws.yml
    2. 编辑 group_vars/rgws.yml 文件。如需了解更多详细信息,请参阅 rgws.yml 文件。
  4. 将 Ceph 对象网关节点的主机名添加到默认位于 /etc/ansible/hosts 的 Ansible 清单文件的 [rgws] 部分。

    [rgws]
    gateway01

    或者,您可以通过在 [osds][rgws] 部分下添加相同的节点,将 Ceph 对象网关与 OSD 守护进程合并到一个节点上。详情请参阅共存容器化 Ceph 守护进程

  5. 以 Ansible 用户身份,运行 ceph-ansible playbook。

    [user@admin ceph-ansible]$ ansible-playbook site-docker.yml --limit rgws
    注意

    如果您将 Red Hat Ceph Storage 部署到 Red Hat Enterprise Linux Atomic Host 主机,请使用 --skip-tags=with_pkg 选项:

    [user@admin ceph-ansible]$ ansible-playbook site-docker.yml --skip-tags=with_pkg
  6. 验证 Ceph 对象网关节点是否已成功部署。

    1. root 用户身份连接到 monitor 节点:

      ssh hostname

      使用 monitor 节点的主机名替换 hostname,例如:

      [user@admin ~]$ ssh root@monitor
    2. 验证 Ceph 对象网关池是否已正确创建:

      [root@monitor ~]# docker exec ceph-mon-mon1 rados lspools
      rbd
      cephfs_data
      cephfs_metadata
      .rgw.root
      default.rgw.control
      default.rgw.data.root
      default.rgw.gc
      default.rgw.log
      default.rgw.users.uid
    3. 在与 Ceph 集群相同的网络中的任何客户端(如 monitor 节点)中,使用 curl 命令利用 Ceph 对象网关主机的 IP 地址在端口 8080 上发送 HTTP 请求:

      curl http://IP-address:8080

      IP-address 替换为 Ceph 对象网关节点的 IP 地址。要确定 Ceph 对象网关主机的 IP 地址,请使用 ifconfigip 命令:

      [root@client ~]# curl http://192.168.122.199:8080
      <?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
    4. 列出存储桶:

      [root@monitor ~]# docker exec ceph-mon-mon1 radosgw-admin bucket list

1.5. 安装元数据服务器

使用 Ansible 自动化应用安装 Ceph 元数据服务器 (MDS)。元数据服务器守护进程是部署 Ceph 文件系统所必需的。

先决条件

  • 一个正常工作的 Red Hat Ceph Storage 集群。

步骤

在 Ansible 管理节点上执行下列步骤。

  1. /etc/ansible/hosts 文件中添加新部分 [mdss]

    [mdss]
    hostname
    hostname
    hostname

    使用您要安装 Ceph 元数据服务器的节点的主机名替换 hostname

    或者,您可以通过在 [osds][mdss] 部分中添加相同的节点,将元数据服务器与 OSD 守护进程合并到一个节点上。详情请参阅共存容器化 Ceph 守护进程

  2. 进入 /usr/share/ceph-ansible 目录:

    [root@admin ~]# cd /usr/share/ceph-ansible
  3. 可选。更改默认变量。

    1. 创建名为 mdss.ymlgroup_vars/mdss.yml 的副本:

      [root@admin ceph-ansible]# cp group_vars/mdss.yml.sample group_vars/mdss.yml
    2. (可选)编辑 mdss .yml 中的参数。详情请查看 mdss.yml
  4. 以 Ansible 用户身份,运行 Ansible playbook:

    [user@admin ceph-ansible]$ ansible-playbook site-docker.yml --limit mdss
  5. 安装元数据服务器后,对其进行配置。详情请参阅 Red Hat Ceph Storage 3 的 Ceph 文件系统指南中的配置 元数据服务器守护进程 一章。

1.6. 安装 NFS-Ganesha 网关

Ceph NFS Ganesha 网关是在 Ceph 对象网关基础上构建的 NFS 接口,为应用提供 POSIX 文件系统接口到 Ceph 对象网关,以便在文件系统内将文件迁移到 Ceph 对象存储。

先决条件

  • 正在运行的 Ceph 存储集群,最好处于 active + clean 状态。
  • 至少一个运行 Ceph 对象网关的节点.
  • 执行 Before Start 步骤。

步骤

在 Ansible 管理节点上执行下列任务:

  1. 从示例文件创建 nfss 文件:

    [root@ansible ~]# cd /usr/share/ceph-ansible/group_vars
    [root@ansible ~]# cp nfss.yml.sample nfss.yml
  2. 将网关主机添加到 [nfss] 组下的 /etc/ansible/hosts 文件中,以识别其组成员资格。如果主机具有连续命名,则使用范围。例如:

    [nfss]
    <nfs_host_name_1>
    <nfs_host_name_2>
    <nfs_host_name[3..10]>
  3. 进入 Ansible 配置目录 /etc/ansible/:

    [root@ansible ~]# cd /usr/share/ceph-ansible
  4. 要将管理员密钥复制到 Ceph 对象网关节点,请取消注释 /usr/share/ceph-ansible/group_vars/nfss.yml 文件中的 copy_admin_key 设置:

    copy_admin_key: true
  5. 配置 /usr/share/ceph-ansible/group_vars/nfss.yml 文件的 FSAL (File System Abstraction Layer) 部分。提供 ID、S3 用户 ID、S3 access key 和 secret。对于 NFSv4,它应如下所示:

    ###################
    # FSAL RGW Config #
    ###################
    #ceph_nfs_rgw_export_id: <replace-w-numeric-export-id>
    #ceph_nfs_rgw_pseudo_path: "/"
    #ceph_nfs_rgw_protocols: "3,4"
    #ceph_nfs_rgw_access_type: "RW"
    #ceph_nfs_rgw_user: "cephnfs"
    # Note: keys are optional and can be generated, but not on containerized, where
    # they must be configered.
    #ceph_nfs_rgw_access_key: "<replace-w-access-key>"
    #ceph_nfs_rgw_secret_key: "<replace-w-secret-key>"
    警告

    访问和密钥是可选的,可以生成。

  6. 运行 Ansible playbook:

    [user@admin ceph-ansible]$ ansible-playbook site-docker.yml --limit nfss

其它资源

1.7. 在容器中安装 Ceph iSCSI 网关

Ansible 部署应用安装所需的守护进程和工具,以在容器中配置 Ceph iSCSI 网关。

先决条件

  • 正常运行的红帽 Ceph 存储集群。

步骤

  1. 以 root 用户身份,打开 并编辑 /etc/ansible/hosts 文件。在 iSCSI 网关组中添加节点名称条目:

    示例

    [iscsigws]
    ceph-igw-1
    ceph-igw-2

  2. 进入 /usr/share/ceph-ansible 目录:

    [root@admin ~]# cd /usr/share/ceph-ansible/
  3. 创建 iscsigws.yml.sample 文件的副本,并将其命名为 iscsigws.yml

    [root@admin ceph-ansible]# cp group_vars/iscsigws.yml.sample group_vars/iscsigws.yml
    重要

    新文件名(iscsigws.yml)和新部分标题([iscsigws]仅适用于 Red Hat Ceph Storage 3.1 或更高版本。从以前的 Red Hat Ceph Storage 版本升级到 3.1,仍将使用旧文件名(iscsi-gws.yml)和旧部分标题([iscsi-gws])。

    重要

    目前,红帽不支持对基于容器的部署使用 ceph-ansible 安装以下选项:

    • gateway_iqn
    • rbd_devices
    • client_connections

    有关手动配置这些选项的说明,请参阅 在容器中配置 Ceph iSCSI 网关

  4. 打开 iscsigws.yml 文件进行编辑。
  5. 使用 IPv4 或 IPv6 地址添加 iSCSI 网关 IP 地址来配置 gateway_ip_list 选项:

    示例

    gateway_ip_list: 192.168.1.1,192.168.1.2

    重要

    您不能混合使用 IPv4 和 IPv6 地址。

  6. (可选)取消注释 trusted_ip_list 选项,如果您想要使用 SSL,则需要相应地添加 IPv4 或 IPv6 地址。您需要 root 访问 iSCSI 网关容器以配置 SSL。要配置 SSL,请执行以下步骤:

    1. 如果需要,在所有 iSCSI 网关容器中安装 openssl 软件包。
    2. 在主 iSCSI 网关容器中,创建一个存放 SSL 密钥的目录:

      # mkdir ~/ssl-keys
      # cd ~/ssl-keys
    3. 在主 iSCSI 网关容器中,创建证书和密钥文件:

      # openssl req -newkey rsa:2048 -nodes -keyout iscsi-gateway.key -x509 -days 365 -out iscsi-gateway.crt
      注意

      系统将提示您输入环境信息。

    4. 在主 iSCSI 网关容器中,创建一个 PEM 文件:

      # cat iscsi-gateway.crt iscsi-gateway.key > iscsi-gateway.pem
    5. 在主 iSCSI 网关容器中,创建一个公钥:

      # openssl x509 -inform pem -in iscsi-gateway.pem -pubkey -noout > iscsi-gateway-pub.key
    6. 在主 iSCSI 网关容器中,将 iscsi-gateway.crtiscsi-gateway.pemiscsi-gateway-pub.keyiscsi-gateway.key 文件复制到其他 iSCSI 网关容器上的 /etc/ceph/ 目录。
  7. 另外,还可相应地查看并取消注释以下 iSCSI 目标 API 服务选项:

    #api_user: admin
    #api_password: admin
    #api_port: 5000
    #api_secure: false
    #loop_delay: 1
    #trusted_ip_list: 192.168.122.1,192.168.122.2
  8. 另外,还可查看并取消注释以下任何资源选项,根据工作负载需求更新它们:

    # TCMU_RUNNER resource limitation
    #ceph_tcmu_runner_docker_memory_limit: 1g
    #ceph_tcmu_runner_docker_cpu_limit: 1
    
    # RBD_TARGET_GW resource limitation
    #ceph_rbd_target_gw_docker_memory_limit: 1g
    #ceph_rbd_target_gw_docker_cpu_limit: 1
    
    # RBD_TARGET_API resource limitation
    #ceph_rbd_target_api_docker_memory_limit: 1g
    #ceph_rbd_target_api_docker_cpu_limit: 1
  9. 以 Ansible 用户身份,运行 Ansible playbook:

    [user@admin ceph-ansible]$ ansible-playbook site-docker.yml --limit iscsigws

    对于 Red Hat Enterprise Linux Atomic,添加 --skip-tags=with_pkg 选项:

    [user@admin ceph-ansible]$ ansible-playbook site-docker.yml --limit iscsigws --skip-tags=with_pkg
  10. Ansible playbook 完成后,打开 iscsigws.yml 文件中指定的 TCP 端口 3260api _ port

    注意

    如果没有指定 api_port 选项,则默认端口为 5000

其它资源

  • 有关在容器中安装 Red Hat Ceph Storage 的更多信息,请参阅容器中安装 Red Hat Ceph Storage 集群 部分。
  • 有关 Ceph iSCSI 网关选项的更多信息,请参阅 Red Hat Ceph Storage Block Device Guide 中的 表 8.1
  • 有关 iSCSI 目标 API 选项的更多信息,请参阅 Red Hat Ceph Storage Block Device Guide 中的 表 8.2
  • 有关 iscsigws.yml 文件示例,请参阅附录 A Red Hat Ceph Storage Block Device Guide。

1.7.1. 在容器中配置 Ceph iSCSI 网关

Ceph iSCSI 网关配置通过 gwcli 命令行实用程序来完成,用于创建和管理 iSCSI 目标、逻辑单元号(LUN)和访问控制列表(ACL)。

先决条件

  • 正常运行的红帽 Ceph 存储集群。
  • 安装 iSCSI 网关软件。

步骤

  1. 作为 root 用户,启动 iSCSI 网关命令行界面:

    # docker exec -it rbd-target-api gwcli
  2. 使用 IPv4 或 IPv6 地址创建 iSCSI 网关:

    Syntax

    >/iscsi-target create iqn.2003-01.com.redhat.iscsi-gw:$TARGET_NAME
    > goto gateways
    > create $ISCSI_GW_NAME $ISCSI_GW_IP_ADDR
    > create $ISCSI_GW_NAME $ISCSI_GW_IP_ADDR

    示例

    >/iscsi-target create iqn.2003-01.com.redhat.iscsi-gw:ceph-igw
    > goto gateways
    > create ceph-gw-1 10.172.19.21
    > create ceph-gw-2 10.172.19.22

    重要

    您不能混合使用 IPv4 和 IPv6 地址。

  3. 添加 RADOS 块设备(RBD):

    Syntax

    > cd /disks
    >/disks/ create $POOL_NAME image=$IMAGE_NAME size=$IMAGE_SIZE[m|g|t] max_data_area_mb=$BUFFER_SIZE

    示例

    > cd /disks
    >/disks/ create rbd image=disk_1 size=50g max_data_area_mb=32

    重要

    池名称或镜像名称中没有任何句点(.)。

    警告

    不要调整 max_data_area_mb 选项,除非红帽支持已指示您这样做。

    max_data_area_mb 选项控制每个镜像可用于在 iSCSI 目标和 Ceph 集群之间传递 SCSI 命令数据的内存量(以兆字节为单位)。如果这个值太小,可能会导致过量队列完全重试,这会影响性能。如果值太大,则可能会导致一个磁盘使用系统内存过多,这可能导致其他子系统的分配失败。默认值为 8。

    可以使用 reconfigure 命令来更改此值。镜像不得由 iSCSI 启动器使用,以便此命令生效。

    Syntax

    >/disks/ reconfigure max_data_area_mb $NEW_BUFFER_SIZE

    示例

    >/disks/ reconfigure max_data_area_mb 64

  4. 创建客户端:

    Syntax

    > goto hosts
    > create iqn.1994-05.com.redhat:$CLIENT_NAME
    > auth chap=$USER_NAME/$PASSWORD

    示例

    > goto hosts
    > create iqn.1994-05.com.redhat:rh7-client
    > auth chap=iscsiuser1/temp12345678

    重要

    禁用 CHAP 仅在 Red Hat Ceph Storage 3.1 或更高版本上被支持。红帽不支持混合客户端,有些情况下启用了 CHAP,一些 CHAP 被禁用。所有客户端都必须启用 CHAP,或者禁用 CHAP。默认的行为是仅通过其启动器名称验证启动器。

    如果启动器无法登录目标,则 CHAP 身份验证可能为某些启动器配置错误。

    示例

    o- hosts ................................ [Hosts: 2: Auth: MISCONFIG]

    hosts 级别上执行以下命令重置所有 CHAP 验证:

    /> goto hosts
    /iscsi-target...csi-igw/hosts> auth nochap
    ok
    ok
    /iscsi-target...csi-igw/hosts> ls
    o- hosts ................................ [Hosts: 2: Auth: None]
      o- iqn.2005-03.com.ceph:esx ........... [Auth: None, Disks: 4(310G)]
      o- iqn.1994-05.com.redhat:rh7-client .. [Auth: None, Disks: 0(0.00Y)]
  5. 向客户端添加磁盘:

    Syntax

    >/iscsi-target..eph-igw/hosts> cd iqn.1994-05.com.redhat:$CLIENT_NAME
    > disk add $POOL_NAME.$IMAGE_NAME

    示例

    >/iscsi-target..eph-igw/hosts> cd iqn.1994-05.com.redhat:rh7-client
    > disk add rbd.disk_1

  6. 运行以下命令来验证 iSCSI 网关配置:

    > ls
  7. (可选)确认 API 正确使用 SSL,在 https/var/log/rbd-target-api.log 文件中查找,例如:

    Aug 01 17:27:42 test-node.example.com python[1879]:  * Running on https://0.0.0.0:5000/
  8. 下一步是配置 iSCSI 启动器。

其它资源

  • 有关在容器中安装 Red Hat Ceph Storage 的更多信息,请参阅容器中安装 Red Hat Ceph Storage 集群 部分。
  • 有关在容器中安装 iSCSI 网关软件的更多信息,请参阅 容器中安装 Ceph iSCSI 网关 部分。
  • 有关连接 iSCSI 启动器的更多信息,请参阅 Red Hat Ceph Storage Block Device Guide 中的配置 iSCSI Initiator 部分。

1.7.2. 在容器中移除 Ceph iSCSI 网关

可以使用 Ansible 删除 Ceph iSCSI 网关配置。

先决条件

  • 正常运行的红帽 Ceph 存储集群。
  • 安装 iSCSI 网关软件。
  • 导出的 RBD 镜像。
  • 对 Red Hat Ceph Storage 集群的 root 级别访问权限。
  • 对 iSCSI 启动器的 root 级别访问权限。
  • 访问 Ansible 管理节点.

步骤

  1. 在清除 iSCSI 网关配置前断开所有 iSCSI 启动器。以下是适当的操作系统的步骤:

    1. Red Hat Enterprise Linux 启动程序:

      root 用户身份运行以下命令:

      Syntax

      iscsiadm -m node -T TARGET_NAME --logout

      TARGET_NAME 替换为配置的 iSCSI 目标名称。

      示例

      # iscsiadm -m node -T iqn.2003-01.com.redhat.iscsi-gw:ceph-igw --logout
      Logging out of session [sid: 1, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.21,3260]
      Logging out of session [sid: 2, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.22,3260]
      Logout of [sid: 1, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.21,3260] successful.
      Logout of [sid: 2, target: iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw, portal: 10.172.19.22,3260] successful.

    2. Windows 启动器:

      详情请查看 Microsoft 文档

    3. VMware ESXi 启动器:

      如需了解更多详细信息,请参阅 VMware 文档

  2. 作为 root 用户,运行 iSCSI 网关命令行工具:

    # gwcli
  3. 删除主机:

    Syntax

    /> cd /iscsi-target/iqn.2003-01.com.redhat.iscsi-gw:_TARGET_NAME_/hosts
    /> /iscsi-target...TARGET_NAME/hosts> delete CLIENT_NAME

    TARGET_NAME 替换为配置的 iSCSI 目标名称,并将 CLIENT_NAME 替换为 iSCSI initiator 名称。

    示例

    /> cd /iscsi-target/iqn.2003-01.com.redhat.iscsi-gw:ceph-igw/hosts
    /> /iscsi-target...eph-igw/hosts> delete iqn.1994-05.com.redhat:rh7-client

  4. 删除磁盘:

    Syntax

    /> cd /disks/
    /disks> delete POOL_NAME.IMAGE_NAME

    POOL_NAME 替换为池的名称,并将 IMAGE_NAME 替换为镜像的名称。

    示例

    /> cd /disks/
    /disks> delete rbd.disk_1

  5. 删除 iSCSI 目标和网关配置:

    /> cd /iscsi-target/
    /iscsi-target> clearconfig confirm=true
  6. 在 Ceph 监控或客户端节点上,以 root 用户身份删除 iSCSI 网关配置对象(gateway.conf):

    [root@mon ~]# rados rm -p pool gateway.conf
  7. 另外,如果不再需要导出的 Ceph RADOS 块设备(RBD),则删除 RBD 镜像。以 root 用户身份在 Ceph Monitor 或 Client 节点上运行以下命令:

    Syntax

    rbd rm IMAGE_NAME

    示例

    [root@mon ~]# rbd rm rbd01

其它资源

1.7.3. 优化 iSCSI 目标的性能

有许多设置控制 iSCSI 目标如何通过网络传输数据。这些设置可用于优化 iSCSI 网关的性能。

警告

只有在由红帽支持团队指示或根据本文档中指定的要求时才更改这些设置。

gwcli reconfigure 子命令

gwcli reconfigure 子命令可控制用于优化 iSCSI 网关性能的设置。

影响 iSCSI 目标性能的设置

  • max_data_area_mb
  • cmdsn_depth
  • immediate_data
  • initial_r2t
  • max_outstanding_r2t
  • first_burst_length
  • max_burst_length
  • max_recv_data_segment_length
  • max_xmit_data_segment_length

其它资源

1.8. 了解 limit 选项

本节包含有关 Ansible --limit 选项的信息。

Ansible 支持 --limit 选项,允许您将 站点和 site-docker Ansible playbook 用于清单文件的特定部分。

$ ansible-playbook site.yml|site-docker.yml --limit osds|rgws|clients|mdss|nfss|iscsigws

例如,若要仅重新部署容器上的 OSD,请以 Ansible 用户身份运行以下命令:

$ ansible-playbook /usr/share/ceph-ansible/site-docker.yml --limit osds

1.9. 其它资源

第 2 章 容器化 Ceph 守护进程的共存

本节描述:

2.1. colocation 如何工作及其优点

您可以在同一个节点上并置容器化 Ceph 守护进程。以下是合并某些 Ceph 服务的优点:

  • 以小规模显著提高总拥有成本 (TCO)
  • 对于最小配置,可以将六个节点减少到三个
  • 更轻松地升级
  • 更好的资源隔离

Colocation 工作方式

您可以将以下列表中的一个守护进程和 OSD 守护进程在一起,方法是将相同的节点添加到 Ansible 清单文件中的适当部分。

  • Ceph 对象网关(radosgw)
  • 元数据服务器(MDS)
  • RBD 镜像(rbd-mirror)
  • 监控和 Ceph 管理器守护进程(ceph-mgr)
  • NFS Ganesha

以下示例演示了如何使用 colocated 守护进程的清单文件类似:

例 2.1. 带有并置守护进程的 Ansible 清单文件

[mons]
<hostname1>
<hostname2>
<hostname3>

[mgrs]
<hostname1>
<hostname2>
<hostname3>

[osds]
<hostname4>
<hostname5>
<hostname6>

[rgws]
<hostname4>
<hostname5>

图 2.1 “colocated Daemons”图 2.2 “非并置守护进程” 镜像显示具有 colocated 和非并置守护进程的集群之间的区别。

图 2.1. colocated Daemons

容器并置守护进程

图 2.2. 非并置守护进程

非并置守护进程的容器

在同一节点上并置两个容器化的 Ceph 守护进程时,ceph-ansible playbook 会为每个节点保留专用 CPU 和 RAM 资源。默认情况下,ceph-ansible 使用 Red Hat Ceph Storage Hardware Selection Guide 3 中的推荐最低硬件 章节中列出的值。要了解如何更改默认值,请参阅 Colocated Daemons 的 Setting Dedicated Resources 部分。

2.2. 为 Colocated Daemons 设置 Dedicated 资源

当在同一节点上并置两个 Ceph 守护进程时,ceph-ansible playbook 会为每个守护进程保留 CPU 和 RAM 资源。ceph-ansible 使用的默认值在 Red Hat Ceph Storage 硬件选择指南中的推荐的最下硬件章节中列出。若要更改默认值,可在部署 Ceph 守护进程时设置所需的参数。

步骤

  1. 若要更改守护进程的默认 CPU 限值,可在部署守护进程时设置适当 .yml 配置文件中的 ceph_daemon-type_docker_cpu_limit 参数。详情请查看下表。

    Daemon参数配置文件

    OSD

    ceph_osd_docker_cpu_limit

    osds.yml

    MDS

    ceph_mds_docker_cpu_limit

    mdss.yml

    RGW

    ceph_rgw_docker_cpu_limit

    rgws.yml

    例如,要将 Ceph 对象网关的默认 CPU 限值更改为 2,请按以下方式编辑 /usr/share/ceph-ansible/group_vars/rgws.yml 文件:

    ceph_rgw_docker_cpu_limit: 2
  2. 要更改 OSD 守护进程的默认 RAM,请在部署守护进程时设置 /usr/share/ceph-ansible/group_vars/all.yml 文件中的 osd_memory_target。例如,将 OSD RAM 限制为 6 GB:

    ceph_conf_overrides:
      osd:
        osd_memory_target=6000000000
    重要

    在超融合基础架构(HCI)配置中,建议使用 osd_memory_target 参数来限制 OSD 内存。ceph_osd_docker_memory_limit 参数不应必要,但如果您想要使用它,然后将 ceph_osd_docker_memory_limit 设置为高于 osd_memory_target 的 50%,以便 CGroup 限制比 HCI 配置的默认限制更大。例如,如果 osd_memory_target 设置为 6 GB,则将 ceph_osd_docker_memory_limit 设置为 9 GB:

    ceph_osd_docker_memory_limit: 9g
警告

ceph_osd_docker_memory_limit 参数用于设置硬限制。如果超过该值,OSD 可使用它停止运行。osd_memory_target 参数设置软限制,因此如果超过该值,容器将不会停止运行和中断服务。

其它资源

  • /usr/share/ceph-ansible/group_vars/ 目录中的配置文件示例

2.3. 其它资源

第 3 章 管理在容器中运行的 Ceph 集群

本章论述了在容器中运行的 Ceph 集群上执行的基本管理任务,例如:

3.1. 启动、停止和重启在容器中运行的 Ceph 守护进程

使用 systemctl 命令启动、停止或重启在容器中运行的 Ceph 守护进程。

步骤

  1. 要启动、停止或重启在容器中运行的 Ceph 守护进程,以 root 用户身份运行 systemctl 命令,其格式由以下格式组成:

    systemctl action ceph-daemon@ID

    其中:

    • action 是要执行的操作; 启动停止restart
    • 守护进程是守护进程 ;osd mon mds 或 rgw
    • ID

      • ceph-monceph-mdsceph-rgw 守护进程的短主机名正在运行
      • osd_scenario 参数设置为 lvm,则 ceph-osd 守护进程的 ID
      • 如果 ceph-osd 守护进程使用的设备名称与 osd_scenario 参数设置为 collocatednon-collocated即可。

    例如,要重启 ID osd01ceph-osd 守护进程:

    # systemctl restart ceph-osd@osd01

    要启动在 ceph-monitor01 主机上运行的 ceph-mon demon:

    # systemctl start ceph-mon@ceph-monitor01

    停止在 ceph-rgw 01 主机上运行的 ceph-rgw 守护进程:

    # systemctl stop ceph-radosgw@ceph-rgw01
  2. 验证操作是否已成功完成。

    systemctl status ceph-daemon@_ID

    例如:

    # systemctl status ceph-mon@ceph-monitor01

其它资源

3.2. 查看在容器中运行的 Ceph 守护进程的日志文件

使用容器主机中的 journald 守护进程查看来自容器的 Ceph 守护进程的日志文件。

步骤

  1. 要查看整个 Ceph 日志文件,请使用以下格式以 root 用户身份运行 journalctl 命令:

    journalctl -u ceph-daemon@ID

    其中:

    • 守护进程是 Ceph 守护进程;osd mon 或 rgw
    • ID

      • ceph-monceph-mdsceph-rgw 守护进程的短主机名正在运行
      • osd_scenario 参数设置为 lvm,则 ceph-osd 守护进程的 ID
      • 如果 ceph-osd 守护进程使用的设备名称与 osd_scenario 参数设置为 collocatednon-collocated即可。

    例如,查看 ID osd01ceph-osd 守护进程的整个日志:

    # journalctl -u ceph-osd@osd01
  2. 要只显示最近的日志条目,请使用 -f 选项。

    journalctl -fu ceph-daemon@ID

    例如,要仅查看 ceph-monitor01 主机上运行的 ceph-mon 守护进程的最新日志条目:

    # journalctl -fu ceph-mon@ceph-monitor01
注意

您还可以使用 sosreport 查看 journald 日志。有关 SOS 报告的详情,请查看 sosreport 是什么以及如何在红帽客户门户网站中创建 Red Hat Enterprise Linux 4.6 及更新的版本? 解决方案。

其它资源

  • journalctl(1) 手册页

3.3. 使用命令行界面添加 Ceph OSD

以下是手动添加 OSD 到 Red Hat Ceph Storage 的高级别工作流:

  1. 安装 ceph-osd 软件包并创建新的 OSD 实例
  2. 准备并挂载 OSD 数据和日志驱动器
  3. 将新 OSD 节点添加到 CRUSH map
  4. 更新所有者和组权限
  5. 启用并启动 ceph-osd 守护进程
重要

ceph-disk 命令已弃用。ceph-volume 命令现在是从命令行界面部署 OSD 的首选方法。目前,ceph-volume 命令只支持 lvm 插件。红帽将在本指南中将两个命令作为参考提供示例,以便存储管理员有时间将依赖 ceph-disk 的任何自定义脚本转换为 ceph-volume

有关使用 ceph-volume 命令的更多信息,请参见《红帽 Ceph 存储管理指南》

注意

对于自定义存储集群名称,在 cephceph-osd 命令中使用 --cluster $CLUSTER_NAME 选项。

先决条件

步骤

  1. 启用 Red Hat Ceph Storage 3 OSD 软件存储库。

    Red Hat Enterprise Linux

    [root@osd ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-osd- els-rpms

  2. 创建 /etc/ceph/ 目录:
  3. 在新 OSD 节点上,从其中一个 Ceph Monitor 节点上复制 Ceph 管理密钥环和配置文件:
  4. 在新的 Ceph OSD 节点上安装 ceph-osd 软件包:

    Red Hat Enterprise Linux

    [root@osd ~]# yum install ceph-osd

  5. 决定您要并置日志还是将专用日志用于新的 OSD。

    注意

    需要 --filestore 选项。

    1. 对于带有并置日志的 OSD:

      Syntax

      [root@osd ~]# docker exec $CONTAINER_ID ceph-disk --setuser ceph --setgroup ceph prepare  --filestore /dev/$DEVICE_NAME

      Example:

      [root@osd ~]# docker exec ceph-osd-osd1 ceph-disk --setuser ceph --setgroup ceph prepare  --filestore /dev/sda

    2. 对于带有专用日志的 OSD:

      Syntax

      [root@osd ~]# docker exec $CONTAINER_ID ceph-disk --setuser ceph --setgroup ceph prepare  --filestore /dev/$DEVICE_NAME /dev/$JOURNAL_DEVICE_NAME

      [root@osd ~]# docker exec $CONTAINER_ID ceph-volume lvm prepare  --filestore --data /dev/$DEVICE_NAME --journal /dev/$JOURNAL_DEVICE_NAME

      示例

      [root@osd ~]# docker exec ceph-osd-osd1 ceph-disk --setuser ceph --setgroup ceph prepare  --filestore /dev/sda /dev/sdb

      [root@osd ~]# docker exec ceph-osd-osd1 ceph-volume lvm prepare  --filestore --data /dev/vg00/lvol1 --journal /dev/sdb
  6. 设置 noup 选项:

    [root@osd ~]# ceph osd set noup
  7. 激活新的 OSD:

    Syntax

    [root@osd ~]# docker exec $CONTAINER_ID ceph-disk activate /dev/$DEVICE_NAME

    [root@osd ~]# docker exec $CONTAINER_ID ceph-volume lvm activate --filestore $OSD_ID $OSD_FSID

    示例

    [root@osd ~]# docker exec ceph-osd-osd1 ceph-disk activate /dev/sda

    [root@osd ~]# docker exec ceph-osd-osd1 ceph-volume lvm activate --filestore 0 6cc43680-4f6e-4feb-92ff-9c7ba204120e
  8. 将 OSD 添加到 CRUSH map:

    Syntax

    ceph osd crush add $OSD_ID $WEIGHT [$BUCKET_TYPE=$BUCKET_NAME ...]

    示例

    [root@osd ~]# ceph osd crush add 4 1 host=node4

    注意

    如果您指定多个存储桶,该命令将将 OSD 放置到最具体的存储桶中,它将 OSD 移到您指定的其它存储桶中。

    注意

    您还可以手动编辑 CRUSH map。请参阅 Red Hat Ceph Storage 3 的存储策略指南中的 编辑 CRUSH map 部分。

    重要

    如果仅指定 root bucket,则 OSD 将直接附加到 root,但 CRUSH 规则期望 OSD 在主机 bucket 内。

  9. 取消设置 noup 选项:

    [root@osd ~]# ceph osd unset noup
  10. 为新创建的目录更新所有者和组权限:

    Syntax

    chown -R $OWNER:$GROUP $PATH_TO_DIRECTORY

    示例

    [root@osd ~]# chown -R ceph:ceph /var/lib/ceph/osd
    [root@osd ~]# chown -R ceph:ceph /var/log/ceph
    [root@osd ~]# chown -R ceph:ceph /var/run/ceph
    [root@osd ~]# chown -R ceph:ceph /etc/ceph

  11. 如果您使用带有自定义名称的集群,请在适当的文件中添加以下行:

    Red Hat Enterprise Linux

    [root@osd ~]# echo "CLUSTER=$CLUSTER_NAME" >> /etc/sysconfig/ceph

    $CLUSTER_NAME 替换为自定义集群名称。

  12. 要确保新 OSD 已启动 并准备好接收数据,请启用并启动 OSD 服务:

    Syntax

    systemctl enable ceph-osd@$OSD_ID
    systemctl start ceph-osd@$OSD_ID

    示例

    [root@osd ~]# systemctl enable ceph-osd@4
    [root@osd ~]# systemctl start ceph-osd@4

3.4. 使用命令行界面删除 Ceph OSD

从存储集群中移除 OSD 涉及更新 cluster map、移除其身份验证密钥、从 OSD map 中删除 OSD,并从 ceph.conf 文件中删除 OSD。如果节点有多个驱动器,您可能需要重复这个过程为每个驱动器删除 OSD。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 有足够的 OSD,以便存储集群没有处于 接近满 比率。
  • 具有对 OSD 节点的 root 访问权限。

步骤

  1. 禁用并停止 OSD 服务:

    Syntax

    systemctl disable ceph-osd@$DEVICE_NAME
    systemctl stop ceph-osd@$DEVICE_NAME

    示例

    [root@osd ~]# systemctl disable ceph-osd@sdb
    [root@osd ~]# systemctl stop ceph-osd@sdb

    OSD 停止后,它 将被关闭

  2. 从存储集群中移除 OSD:

    Syntax

    ceph osd out $DEVICE_NAME

    示例

    [root@osd ~]# ceph osd out sdb

    重要

    OSD 超时后,Ceph 将开始重新平衡数据并将其复制到存储集群中的其他 OSD 中。红帽建议在继续下一步前等待存储集群变为 active+clean。要观察数据迁移,请运行以下命令:

    [root@monitor ~]# ceph -w
  3. 从 CRUSH map 移除 OSD,使其不再接收数据。

    Syntax

    ceph osd crush remove $OSD_NAME

    示例

    [root@osd ~]# ceph osd crush remove osd.4

    注意

    您还可以解译 CRUSH map,从设备列表中删除 OSD,将设备作为主机存储桶中的项目删除,或者移除主机存储桶。如果它位于 CRUSH map 中,并且计划移除主机,然后重新编译 map 并设置它。详情请参阅 存储策略指南

  4. 删除 OSD 身份验证密钥:

    Syntax

    ceph auth del osd.$DEVICE_NAME

    示例

    [root@osd ~]# ceph auth del osd.sdb

  5. 删除 OSD:

    Syntax

    ceph osd rm $DEVICE_NAME

    示例

    [root@osd ~]# ceph osd rm sdb

  6. 编辑存储集群的配置文件,默认为 /etc/ceph.conf,如果存在,请删除 OSD 条目:

    示例

    [osd.4]
    host = $HOST_NAME

  7. 如果手动添加 OSD,则移除对 /etc/fstab 文件中的 OSD 的引用。
  8. 将更新后的配置文件复制到存储集群中所有其他节点的 /etc/ceph/ 目录中。

    Syntax

    scp /etc/ceph/$CLUSTER_NAME.conf $USER_NAME@$HOST_NAME:/etc/ceph/

    示例

    [root@osd ~]# scp /etc/ceph/ceph.conf root@node4:/etc/ceph/

3.5. 在保留 OSD ID 时替换 OSD 驱动器

在替换故障 OSD 驱动器时,您可以保留原始 OSD ID 和 CRUSH map 条目。

注意

ceph-volume lvm 命令默认为 OSD 的 BlueStore。要使用 FileStore OSD,然后使用 --filestore、--data--journal 选项。

如需了解更多详细信息 ,请参阅准备 OSD 数据和 Journal Drives 部分。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 失败的磁盘。

步骤

  1. 销毁 OSD:

    ceph osd destroy $OSD_ID --yes-i-really-mean-it

    示例

    $ ceph osd destroy 1 --yes-i-really-mean-it

  2. 另外,如果之前使用了替换磁盘,则需要 缩小 该磁盘:

    docker exec $CONTAINER_ID ceph-volume lvm zap $DEVICE

    示例

    $ docker exec ceph-osd-osd1 ceph-volume lvm zap /dev/sdb

  3. 使用现有 OSD ID 创建新 OSD:

    docker exec $CONTAINER_ID ceph-volume lvm create --osd-id $OSD_ID --data $DEVICE

    示例

    $ docker exec ceph-osd-osd1 ceph-volume lvm create --osd-id 1 --data /dev/sdb

3.6. 清除由 Ansible 部署的集群

如果您不再希望使用 Ceph 集群,请使用 purge-docker-cluster.yml playbook 来清除集群。在安装过程失败时,清除集群也很有用,并且想要重新开始。

警告

在清除 Ceph 集群后,OSD 上的所有数据都会丢失。

先决条件

  • 确保 /var/log/ansible.log 文件可写入。

步骤

使用 Ansible 管理节点中的下列命令。

  1. root 用户身份,导航到 /usr/share/ceph-ansible/ 目录。

    [root@admin ~]# cd /usr/share/ceph-ansible
  2. /usr/share/infrastructure-playbooks/ 目录的 purge-docker-cluster.yml playbook 复制到当前目录中:

    [root@admin ceph-ansible]# cp infrastructure-playbooks/purge-docker-cluster.yml .
  3. 以 Ansible 用户身份,使用 purge-docker-cluster.yml playbook 清除 Ceph 集群。

    1. 要删除所有软件包、容器、配置文件和 ceph-ansible playbook 创建的所有数据:

      [user@admin ceph-ansible]$ ansible-playbook purge-docker-cluster.yml
    2. 要指定不同于默认清单文件(/etc/ansible/hosts),请使用 -i 参数:

      ansible-playbook purge-docker-cluster.yml -i inventory-file

      使用清单文件的路径替换 inventory-file

      例如:

      [user@admin ceph-ansible]$ ansible-playbook purge-docker-cluster.yml -i ~/ansible/hosts
    3. 要跳过移除 Ceph 容器镜像,请使用 --skip-tags=”remove_img” 选项:

      [user@admin ceph-ansible]$ ansible-playbook --skip-tags="remove_img" purge-docker-cluster.yml
    4. 要跳过删除在安装过程中安装的软件包的过程,请使用 --skip-tags="with_pkg" 选项:

      [user@admin ceph-ansible]$ ansible-playbook --skip-tags="with_pkg" purge-docker-cluster.yml

第 4 章 在容器内升级 Red Hat Ceph Storage

Ansible 应用程序会预先了解容器中运行的红帽 Ceph 存储的升级。

4.1. 先决条件

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

4.2. 升级在容器中运行的 Red Hat Ceph Storage 集群

本节论述了如何升级到 Red Hat Ceph Storage 容器镜像的较新次要版本或主要版本。

使用位于管理节点的 /usr/share/ceph-ansible/infrastructure-playbooks/ 目录中的 Ansible rolling_update.yml playbook,以便在 Red Hat Ceph Storage 的两个主版本或次要版本之间升级。

Ansible 按照以下顺序升级 Ceph 节点:

  • 监控节点
  • MGR 节点
  • OSD 节点
  • MDS 节点
  • Ceph 对象网关节点
  • 所有其他 Ceph 客户端节点
注意

Red Hat Ceph Storage 3 在位于 /usr/share/ceph-ansible/group_vars/ 目录中的 Ansible 配置文件中引入了几个更改;某些参数已重命名或删除。因此,请在升级到版本 3 后从 all.yml.sample 和 osds.sample 文件创建新副本前,进行 all .yml 和 osds. yml.yml 文件的备份副本。有关更改的详情,请参考 附录 A, 版本 2 和 3 之间的 Ansible 变量更改

注意

Red Hat Ceph Storage 3.1 及更高版本引入了新的 Ansible playbook,以便在使用对象网关和基于 NVMe SSD(和 SATA SSD)时优化性能的存储。playbook 通过将日志和存储桶索引放在 SSD 上,这可以提高与在一个设备上的所有日志不同的性能。这些 playbook 设计为在安装 Ceph 时使用。现有的 OSD 继续工作,升级期间不需要额外的步骤。无法升级 Ceph 集群,同时重新配置 OSD 以优化存储。若要将不同的设备用于日志或 bucket 索引,需要重新调配 OSD。有关更多信息,请参阅在 Ceph 对象网关对生产环境使用 NVMe 及 LVM

重要

rolling_update.yml playbook 包含 serial 变量,用于调整要同时更新的节点数量。红帽强烈建议使用默认值 (1),以确保 Ansible 逐一升级集群节点。

重要

当使用 rolling_update.yml playbook 升级到任何 Red Hat Ceph Storage 3.x 版本时,使用 Ceph 文件系统(CephFS)集群的用户必须手动更新元数据服务器(MDS)集群。这是因为一个已知问题。

在使用 ceph-ansible rolling_update.yml 升级整个集群之前,请注释掉 /etc/ansible/hosts 中的 MDS 主机,然后手动升级 MDS。在 /etc/ansible/hosts 文件中:

 #[mdss]
 #host-abc

有关此已知问题的更多详细信息,包括如何更新 MDS 集群,请参阅 Red Hat Ceph Storage 3.0 发行注记

重要

当将 Red Hat Ceph Storage 集群从以前的版本升级到 3.2 时,Ceph Ansible 配置将对象存储类型默认为 BlueStore。如果您仍然希望将 FileStore 用作 OSD 对象存储,则明确将 Ceph Ansible 配置设置为 FileStore。这可确保新部署和替换的 OSD 使用 FileStore。

重要

当使用 rolling_update.yml playbook 来升级到任何 Red Hat Ceph Storage 3.x 版本时,如果使用多站点 Ceph 对象网关配置,则不必手动更新 all.yml 文件来指定多站点配置。

先决条件

  • root 用户身份登录存储集群中的所有节点。
  • 在存储集群中的所有节点上,启用 rhel-7-server-extras-rpms 存储库。

    # subscription-manager repos --enable=rhel-7-server-extras-rpms
  • 如果从 Red Hat Ceph Storage 2.x 升级到 3.x,在 Ansible 管理节点和 RBD 镜像节点上,启用 Red Hat Ceph Storage 3 Tools 软件仓库:

    # subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
  • 在 Ansible 管理的节点上启用 Ansible 存储库:

    [root@admin ~]# subscription-manager repos --enable=rhel-7-server-ansible-2.6-rpms
  • 在 Ansible 管理节点上,确保安装了最新版本的 ansibleceph-ansible 软件包。

    [root@admin ~]# yum update ansible ceph-ansible

4.3. 升级存储集群

步骤

使用 Ansible 管理节点中的下列命令。

  1. root 用户身份,导航到 /usr/share/ceph-ansible/ 目录:

    [root@admin ~]# cd /usr/share/ceph-ansible/
  2. 从 Red Hat Ceph Storage 版本 3.x 升级到最新版本时跳过这一步。备份 group_vars/all.ymlgroup_vars/osds.yml 文件。

    [root@admin ceph-ansible]# cp group_vars/all.yml group_vars/all_old.yml
    [root@admin ceph-ansible]# cp group_vars/osds.yml group_vars/osds_old.yml
    [root@admin ceph-ansible]# cp group_vars/clients.yml group_vars/clients_old.yml
  3. 从 Red Hat Ceph Storage 版本 3.x 升级到最新版本时跳过这一步。当从 Red Hat Ceph Storage 2.x 升级到 3.x 时,创建 group_vars/all.yml.samplegroup_vars/osds.yml.samplegroup_vars/clients.yml.sample 文件的新副本,并将它们分别重命名为 group_vars/all.ymlgroup_vars/osds.ymlgroup_vars/clients.yml 文件。打开 并相应地编辑它们。详情请查看 附录 A, 版本 2 和 3 之间的 Ansible 变量更改第 1.2 节 “在容器中安装 Red Hat Ceph Storage 集群”

    [root@admin ceph-ansible]# cp group_vars/all.yml.sample group_vars/all.yml
    [root@admin ceph-ansible]# cp group_vars/osds.yml.sample group_vars/osds.yml
    [root@admin ceph-ansible]# cp group_vars/clients.yml.sample group_vars/clients.yml
  4. 从 Red Hat Ceph Storage 版本 3.x 升级到最新版本时跳过这一步。当从 Red Hat Ceph Storage 2.x 升级到 3.x 时,打开 group_vars/clients.yml 文件,取消注释以下行:

    keys:
      - { name: client.test, caps: { mon: "allow r", osd: "allow class-read object_prefix rbd_children, allow rwx pool=test" },  mode: "{{ ceph_keyring_permissions }}" }
    1. 使用实际客户端名称替换 client.test,并在客户端定义行中添加客户端密钥,例如:

      key: "ADD-KEYRING-HERE=="

      现在,整行示例类似如下:

      - { name: client.test, key: "AQAin8tUMICVFBAALRHNrV0Z4MXupRw4v9JQ6Q==", caps: { mon: "allow r", osd: "allow class-read object_prefix rbd_children, allow rwx pool=test" },  mode: "{{ ceph_keyring_permissions }}" }
      注意

      要获取客户端密钥,请运行 ceph auth get-or-create 命令来查看指定客户端的密钥。

  5. 当从 2.x 升级到 3.x 时,在 group_vars/all.yml 文件中,将 ceph_docker_image 参数更改为指向 Ceph 3 容器版本。

    ceph_docker_image: rhceph/rhceph-3-rhel7
  6. fetch_directory 参数添加到 group_vars/all.yml 文件。

    fetch_directory: <full_directory_path>

    替换:

    • <full_directory_path> 带有可写位置,如 Ansible 用户的主目录。提供用于初始存储集群安装的现有路径。

    如果现有路径丢失或缺失,请首先执行以下操作:

    1. 在现有 group_vars/all.yml 文件中添加以下选项:

      fsid: <add_the_fsid>
      generate_fsid: false
    2. 运行 take-over-existing-cluster.yml Ansible playbook:

      [user@admin ceph-ansible]$ cp infrastructure-playbooks/take-over-existing-cluster.yml .
      [user@admin ceph-ansible]$ ansible-playbook take-over-existing-cluster.yml
  7. 如果要升级的集群包含任何 Ceph Object Gateway 节点,请将 radosgw_interface 参数添加到 group_vars/all.yml 文件中。

    radosgw_interface: <interface>

    替换:

    • <interface> 带有 Ceph Object Gateway 节点侦听的接口。
  8. 从 Red Hat Ceph Storage 3.2 开始,默认的 OSD 对象存储是 BlueStore。要保留传统的 OSD 对象存储,您必须将 osd_objectstore 选项明确设置为 group_vars/all.yml 文件中的 filestore

    osd_objectstore: filestore
    注意

    osd_objectstore 选项设置为 filestore 时,替换 OSD 将使用 FileStore,而不是 BlueStore。

  9. 在位于 /etc/ansible/hosts 的 Ansible 清单文件中,将 Ceph Manager(ceph-mgr)节点添加到 [mgrs] 部分下。与 monitor 节点并置 Ceph 管理器守护进程。从版本 3.x 升级到最新版本时跳过这一步。

    [mgrs]
    <monitor-host-name>
    <monitor-host-name>
    <monitor-host-name>
  10. rolling_update.ymlinfrastructure-playbooks 目录复制到当前目录。

    [root@admin ceph-ansible]# cp infrastructure-playbooks/rolling_update.yml .
  11. 创建 /var/log/ansible/ 目录并为 ansible 用户分配适当的权限:

    [root@admin ceph-ansible]# mkdir /var/log/ansible
    [root@admin ceph-ansible]# chown ansible:ansible  /var/log/ansible
    [root@admin ceph-ansible]# chmod 755 /var/log/ansible
    1. 编辑 /usr/share/ceph-ansible/ansible.cfg 文件,更新 log_path 值,如下所示:

      log_path = /var/log/ansible/ansible.log
  12. 以 Ansible 用户身份,运行 playbook:

    [user@admin ceph-ansible]$ ansible-playbook rolling_update.yml

    要将 playbook 用于 Ansible 清单文件上的一组特定的节点,请使用 --limit 选项。详情请查看 第 1.8 节 “了解 limit 选项”

  13. 在 RBD 镜像守护进程节点上以 root 用户身份登录时,手动升级 rbd-mirror

    # yum upgrade rbd-mirror

    重启守护进程:

    # systemctl restart  ceph-rbd-mirror@<client-id>
  14. 验证集群健康状况是 OK。

    1. root 用户身份登录 monitor 节点,再列出所有正在运行的容器。

      [root@monitor ~]# docker ps
    2. 验证集群运行正常。

      [root@monitor ~]# docker exec ceph-mon-<mon-id> ceph -s

      替换:

      • <mon-id>,第一个步骤中找到的 Monitor 容器的名称。

      例如:

      [root@monitor ~]# docker exec ceph-mon-monitor ceph -s
  15. 如果在 OpenStack 环境中工作,请更新所有 cephx 用户,以将 RBD 配置文件用于池。以下命令必须以 root 用户身份运行:

    • Glance 用户

      ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=<glance-pool-name>'

      示例

      [root@monitor ~]# ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=images'

    • Cinder 用户

      ceph auth caps client.cinder mon 'profile rbd' osd 'profile rbd pool=<cinder-volume-pool-name>, profile rbd pool=<nova-pool-name>, profile rbd-read-only pool=<glance-pool-name>'

      示例

      [root@monitor ~]# ceph auth caps client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images'

    • OpenStack 常规用户

      ceph auth caps client.openstack mon 'profile rbd' osd 'profile rbd-read-only pool=<cinder-volume-pool-name>, profile rbd pool=<nova-pool-name>, profile rbd-read-only pool=<glance-pool-name>'

      示例

      [root@monitor ~]# ceph auth caps client.openstack mon 'profile rbd' osd 'profile rbd-read-only pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images'

      重要

      在执行任何实时客户端迁移前,进行这些 CAPS 更新。这使得客户端能够使用内存中运行的新库,从而导致旧 CAPS 设置从缓存中丢弃并应用新的 RBD 配置集设置。

4.4. 升级 Red Hat Ceph Storage 仪表板

以下过程概述了将 Red Hat Ceph Storage Dashboard 从版本 3.1 升级到 3.2 的步骤。

在升级前,请确保 Red Hat Ceph Storage 从版本 3.1 升级到 3.2。请参阅 4.1。根据说明升级存储集群

警告

升级过程将删除历史存储仪表板数据。

步骤

  1. root 用户身份,从 Ansible 管理节点更新 cephmetrics-ansible 软件包:

    [root@admin ~]# yum update cephmetrics-ansible
  2. 进入 /usr/share/cephmetrics-ansible 目录:

    [root@admin ~]# cd /usr/share/cephmetrics-ansible
  3. 安装更新的 Red Hat Ceph Storage 仪表板:

    [root@admin cephmetrics-ansible]# ansible-playbook -v playbook.yml

第 5 章 使用 Red Hat Ceph Storage 仪表板监控容器中运行的 Ceph 集群

Red Hat Ceph Storage Dashboard 提供了一个监控仪表板,用于视觉化 Ceph Storage 集群的状态。另外,Red Hat Ceph Storage Dashboard 架构提供了一个框架,用于向存储集群添加功能的其他模块。

先决条件

  • 在容器中运行的 Red Hat Ceph Storage 集群

5.1. Red Hat Ceph Storage 仪表板

Red Hat Ceph Storage Dashboard 提供了一个监控仪表板,供 Ceph 集群用于视觉化存储集群状态。控制面板可通过 Web 浏览器访问,并且提供有关集群状态、监控、OSD、池或网络状态的多个指标和图形。

在以前的 Red Hat Ceph Storage 版本中,监控数据通过 collectd 插件提供,该插件将数据发送到 Graphite 监控实用程序的实例。从 Red Hat Ceph Storage 3.3 开始,使用 ceph-mgr Prometheus 插件直接从 ceph-mgr 守护进程提供监控数据。

Prometheus 的引入为监控数据源,简化了 Red Hat Ceph Storage Dashboard 解决方案的部署和操作管理,并降低了总体硬件要求。通过直接提供 Ceph 监控数据,Red Hat Ceph Storage Dashboard 解决方案可以更好地支持容器中部署的 Ceph 集群。

注意

在架构中这种变化,没有从 Red Hat Ceph Storage 2.x 和 3.0 到 Red Hat Ceph Storage 3.3 的监控数据的迁移路径。

Red Hat Ceph Storage 仪表板使用以下工具:

  • 用于部署的 Ansible 自动化应用程序。
  • 嵌入的 Prometheus ceph-mgr 插件。
  • Prometheus node-exporter 守护进程在存储集群的每个节点中运行。
  • 用于提供用户界面和警报的 Grafana 平台。

Red Hat Ceph Storage Dashboard 支持以下功能:

常规功能
  • 支持 Red Hat Ceph Storage 3.1 或更高版本
  • SELinux 支持
  • 支持 FileStore 和 BlueStore OSD 后端
  • 支持加密和未加密的 OSD
  • 支持 monitor、OSD、Ceph 对象网关和 iSCSI 角色
  • 元数据服务器(MDS)的初始支持.
  • 深入和仪表板链接
  • 15 秒粒度
  • 支持硬盘驱动器(HDD)、Solid-state Drives(SSD)、Non-volatile Memory Express(NVMe)接口和 Intel® Cache Acceleration Software(Intel® CAS)
节点指标
  • CPU 和 RAM 使用量
  • 网络负载
可配置警报
集群概述
  • OSD 配置概述
  • OSD FileStore 和 BlueStore 总结
  • 集群版本按角色划分
  • 磁盘大小概述
  • 按容量和磁盘计数划分的主机大小
  • 放置组(PG)状态分类
  • 池计数
  • 设备类别摘要, HDD 与.SSD
集群详情
  • 集群标志状态(nooutnodown 及其他)
  • OSD 或 Ceph 对象网关主机 updown 状态
  • 每个池容量使用量
  • 原始容量使用率
  • 活跃清理和恢复过程的指示符
  • 增长跟踪和预测(原始容量)
  • 有关处于 downnear full 或 near full 的 OSD 的信息,包括 OSD 主机和磁盘
  • 每个 OSD 的 PG 分布
  • OSD 按 PG 数量计算,突出显示超过或正在使用的 OSD
OSD 性能
  • 按池大约每秒 I/O 操作的信息(IOPS)和吞吐量
  • OSD 性能指示器
  • 每个 OSD 磁盘统计信息
  • 集群范围的磁盘吞吐量
  • 读取/写入比率(客户端 IOPS)
  • 磁盘利用率 heat 映射
  • Ceph 角色的网络负载
Ceph 对象网关详情
  • 聚合负载视图
  • 每台主机延迟和吞吐量
  • HTTP 操作的工作负载分类
Ceph iSCSI 网关详情
  • 聚合视图
  • Configuration
  • 性能
  • 每个网关资源使用
  • 根据客户端载入和配置
  • 每个 Ceph 块设备镜像性能

5.2. 安装 Red Hat Ceph Storage 仪表板

Red Hat Ceph Storage 仪表板提供了一个可视化仪表板,以监控正在运行的 Ceph Storage 集群中的各种指标。

注意

有关升级 Red Hat Ceph Storage Dashboard 的详情,请参考 Red Hat Enterprise Linux 安装指南中的升级 Red Hat Ceph Storage Dashboard

先决条件

  • 使用 Ansible 自动化应用部署的容器中运行的 Ceph 存储集群。
  • 存储节点使用 Red Hat Enterprise Linux 7。

    详情请查看 第 1.1.1 节 “将 Red Hat Ceph Storage 节点注册到 CDN 和附加订阅”

  • 单独的节点 Red Hat Ceph Storage Dashboard 节点,用于从集群节点接收数据并提供 Red Hat Ceph Storage 仪表板。
  • 准备 Red Hat Ceph Storage Dashboard 节点:

    • 在红帽 Content Delivery Network(CDN)注册系统,附加订阅并启用 Red Hat Enterprise Linux 软件仓库。详情请查看 第 1.1.1 节 “将 Red Hat Ceph Storage 节点注册到 CDN 和附加订阅”
    • 在所有节点上启用 Tools 软件仓库。

      详情请参阅 Red Hat Ceph Storage 3 安装指南中的 启用 Red Hat Ceph Storage Repositories 部分。

    • 如果使用防火墙,请确保打开以下 TCP 端口:

      表 5.1. TCP 端口要求

      端口使用在哪里?

      3000

      Grafana

      Red Hat Ceph Storage Dashboard 节点。

      9090

      基本 Prometheus 图表

      Red Hat Ceph Storage Dashboard 节点。

      9100

      Prometheus 的 node-exporter 守护进程

      所有存储节点。

      9283

      收集 Ceph 数据

      所有 ceph-mgr 节点.

      9287

      Ceph iSCSI 网关数据

      所有 Ceph iSCSI 网关节点。

      详情请查看 Red Hat Enterprise Linux 7 安全指南中的 使用 防火墙 章节。

步骤

root 用户身份在 Ansible 管理节点上运行以下命令。

  1. 安装 cephmetrics-ansible 软件包。

    [root@admin ~]# yum install cephmetrics-ansible
  2. 将 Ceph Ansible 清单用作基础,将 Red Hat Ceph Storage Dashboard 节点添加到 Ansible 清单文件中的 [ceph-grafana] 部分下,默认为位于 /etc/ansible/hosts

    [ceph-grafana]
    $HOST_NAME

    替换:

    • $HOST_NAME 带有 Red Hat Ceph Storage Dashboard 节点的名称

    例如:

    [ceph-grafana]
    node0
  3. 更改到 /usr/share/cephmetrics-ansible/ 目录。

    [root@admin ~]# cd /usr/share/cephmetrics-ansible
  4. 运行 Ansible playbook。

    [root@admin cephmetrics-ansible]# ansible-playbook -v playbook.yml
    重要

    每次更新集群配置时,例如,您要添加或删除 MON 或 OSD 节点,您必须重新运行 cephmetrics Ansible playbook。

    注意

    cephmetrics Ansible playbook 执行以下操作:

    • 更新 ceph-mgr 实例,以启用 prometheus 插件并打开 TCP 端口 9283。
    • 将 Prometheus node-exporter 守护进程部署到存储集群中的每个节点。

      • 打开 TCP 端口 9100。
      • 启动 node-exporter 守护进程。
    • 在 Red Hat Ceph Storage Dashboard 节点上的 Docker/systemd 上部署 Grafana 和 Prometheus 容器。

      • Prometheus 配置为从 ceph-mgr 节点以及每个 ceph 主机上运行的 node-exporters 收集数据
      • 打开 TCP 端口 3000。
      • 仪表板、主题和用户帐户都在 Grafana 中创建。
      • 输出管理员的 Grafana 的 URL。

5.3. 访问 Red Hat Ceph Storage 仪表板

通过访问 Red Hat Ceph Storage Dashboard,您可以访问基于 Web 的管理工具,以便管理 Red Hat Ceph Storage 集群。

先决条件

步骤

  1. 输入 web 浏览器的以下 URL:

    http://$HOST_NAME:3000

    替换:

    • $HOST_NAME 带有 Red Hat Ceph Storage Dashboard 节点的名称

    例如:

    http://cephmetrics:3000
  2. 输入 admin 用户的密码。如果您在安装过程中没有设置密码,请使用 admin,这是默认密码。

    登录后,将自动在 Ceph 上放置一个 Glance 仪表板。Ceph At a Glance 仪表板提供容量、性能和节点级性能信息的高级概述。

    示例

    RHCS Dashboard Grafana Ceph At a Glance page

其它资源

5.4. 更改默认 Red Hat Ceph Storage 仪表板密码

访问 Red Hat Ceph Storage Dashboard 的默认用户名和密码设置为 adminadmin。出于安全考虑,您可能需要在安装后更改密码。

注意

要防止密码重置到默认值,请更新 /usr/share/cephmetrics-ansible/group_vars/all.yml 文件中的自定义密码。

步骤

  1. 点左上角的 Grafana 图标。
  2. 将鼠标悬停在您要修改密码的用户名上。本例中为 admin
  3. Profile
  4. Change Password
  5. 输入新密码两次,然后单击 更改密码

其他资源

  • 如果您忘记了密码,请按照 Grafana 网页上的 重置 admin 密码 步骤进行。

5.5. Red Hat Ceph Storage 的 Prometheus 插件

作为存储管理员,您可以收集性能数据、使用 Prometheus 插件模块为 Red Hat Ceph Storage 仪表板导出数据,然后对此数据执行查询。Prometheus 模块允许 ceph-mgr 向 Prometheus 服务器公开 Ceph 相关状态和性能数据。

5.5.1. 先决条件

  • 运行红帽 Ceph 存储 3.1 或更高版本。
  • 安装 Red Hat Ceph Storage 仪表板.

5.5.2. Prometheus 插件

Prometheus 插件提供了一个 exporter,用于从 ceph-mgr 中的集合点传递 Ceph 性能计数器。Red Hat Ceph Storage Dashboard 接收来自所有 MgrClient 进程(如 Ceph Monitor 和 OSD)的 MMgrReport 消息。最后一个样本数的循环缓冲包含性能计数器模式数据和实际计数器数据。此插件创建 HTTP 端点,并在轮询时检索每个计数器的最新示例。HTTP 路径和查询参数将被忽略;所有报告实体的所有 extant 计数器都以文本组成格式返回。

其它资源

5.5.3. 管理 Prometheus 环境

要使用 Prometheus 监控 Ceph 存储集群,您可以配置并启用 Prometheus 导出器,以便收集 Ceph 存储集群的元数据信息。

先决条件

  • 正在运行的 Red Hat Ceph Storage 3.1 集群
  • 安装 Red Hat Ceph Storage 仪表板

步骤

  1. root 用户身份,打开 并编辑 /etc/prometheus/prometheus.yml 文件。

    1. global 部分下,将 scrape_intervalevaluation_interval 选项设置为 15 秒。

      示例

      global:
        scrape_interval:     15s
        evaluation_interval: 15s

    2. scrape_configs 部分下,添加 honor_labels: true 选项,然后编辑每个 ceph-mgr 节点 的目标以及实例 选项。

      示例

      scrape_configs:
        - job_name: 'node'
          honor_labels: true
          static_configs:
          - targets: [ 'node1.example.com:9100' ]
            labels:
              instance: "node1.example.com"
          - targets: ['node2.example.com:9100']
            labels:
              instance: "node2.example.com"

      注意

      使用 honor_labels 选项可让 Ceph 正确输出与 Ceph 存储集群中任何节点相关的正确标记的数据。这使得 Ceph 能够在没有 Prometheus 覆盖的情况下导出正确的 实例 标签。

    3. 要添加新节点,只需以以下格式添加 目标、和 实例 选项:

      示例

      - targets: [ 'new-node.example.com:9100' ]
        labels:
          instance: "new-node"

      注意

      instance 标签必须与 Ceph 的 OSD 元数据 实例 字段中显示的内容匹配,这是节点的短主机名。这有助于将 Ceph 统计信息与节点的统计数据相关联。

  2. 以以下格式将 Ceph 目标添加到 /etc/prometheus/ceph_targets.yml 文件中。

    示例

    [
        {
            "targets": [ "cephnode1.example.com:9283" ],
            "labels": {}
        }
    ]

  3. 启用 Prometheus 模块:

    # ceph mgr module enable prometheus

5.5.4. 使用 Prometheus 数据和查询

统计信息名称与 Ceph 名称完全相同,使 illegal 字符转换为下划线,ceph_ 为所有名称加上前缀。所有 Ceph 守护进程统计数据都有一个 ceph_daemon 标签,用于标识它们所来自的守护进程的类型和 ID,例如: osd.123。某些统计数据可以来自不同类型的守护进程,因此当查询需要过滤自 osd 开头的 Ceph 守护进程时,以避免 Ceph Monitor 和 RocksDB stats 中的混合。全局 Ceph 存储集群统计数据中具有相应的标签,适用于它们所报告的内容。例如,与池相关的指标具有 pool_id 标签。代表 Ceph 内核 Ceph 的直方图的长运行平均值由一对和计数性能指标来表示。

以下示例查询可以在 Prometheus 表达式浏览器中使用:

显示 OSD 的物理磁盘使用

(irate(node_disk_io_time_ms[1m]) /10) and on(device,instance) ceph_disk_occupation{ceph_daemon="osd.1"}

显示从操作系统中看到的 OSD 的物理 IOPS

irate(node_disk_reads_completed[1m]) + irate(node_disk_writes_completed[1m]) and on (device, instance) ceph_disk_occupation{ceph_daemon="osd.1"}

池和 OSD 元数据系列

特殊数据系列是输出,可以在某些元数据字段上启用显示和查询。池有一个 ceph_pool_metadata 字段,例如:

ceph_pool_metadata{pool_id="2",name="cephfs_metadata_a"} 1.0

OSD 具有 ceph_osd_metadata 字段,例如:

ceph_osd_metadata{cluster_addr="172.21.9.34:6802/19096",device_class="ssd",ceph_daemon="osd.0",public_addr="172.21.9.34:6801/19096",weight="1.0"} 1.0

将驱动器统计信息与 node_exporter关联

Ceph 的 Prometheus 输出设计为可与 Prometheus 节点 导出器中的通用节点监控一起使用。将 Ceph OSD 统计与通用节点监控驱动器统计关联,特殊数据系列为输出:

ceph_disk_occupation{ceph_daemon="osd.0",device="sdd", exported_instance="node1"}

要通过 OSD ID 获取磁盘统计信息,请在 Prometheus 查询中使用 operator 或星号(*)操作器。所有元数据指标都具有值 1,因此它们与星号运算符保持中立。使用星号运算符允许使用 group_leftgroup_right 分组修饰符,以便生成的指标具有查询两侧的额外标签。例如:

rate(node_disk_bytes_written[30s]) and on (device,instance) ceph_disk_occupation{ceph_daemon="osd.0"}

使用 label_replace

label_replace 函数可以添加标签,或更改查询中的指标标签。要关联 OSD 及其磁盘写入率,可以使用以下查询:

label_replace(rate(node_disk_bytes_written[30s]), "exported_instance", "$1", "instance", "(.*):.*") and on (device,exported_instance) ceph_disk_occupation{ceph_daemon="osd.0"}

其它资源

5.5.5. 使用 Prometheus 表达式浏览器

使用内置的 Prometheus 表达式浏览器对收集的数据运行查询。

先决条件

  • 正在运行的 Red Hat Ceph Storage 3.1 集群
  • 安装 Red Hat Ceph Storage 仪表板

步骤

  1. 输入 web 浏览器的 URL:

    http://$DASHBOARD_SEVER_NAME:9090/graph

    replace…​

    • $DASHBOARD_SEVER_NAME 带有 Red Hat Ceph Storage Dashboard 服务器的名称。
  2. Graph,键入,或者将查询粘贴到查询窗口,然后按 Execute 按钮。

    1. 在控制台窗口中查看结果。
  3. 点击 Graph 查看呈现的数据。

其它资源

5.5.6. 其它资源

5.6. Red Hat Ceph Storage Dashboard 警报

本节介绍 Red Hat Ceph Storage 仪表板中警报的信息。

5.6.1. 先决条件

5.6.2. 关于警报

Red Hat Ceph Storage Dashboard 支持由 Grafana 平台提供的警报机制。当您要到达特定值的指标时,您可以将仪表板配置为向您发送通知。此类指标位于 Alert Status 仪表板中。

默认情况下,Alert Status 已包含特定的指标,如 Overall Ceph HealthOSD DownPool Capacity。您可以添加您对此仪表板感兴趣的指标,或更改其触发器值。

以下是 Red Hat Ceph Storage 仪表板中包含的预定义警报的列表:

  • 总体 Ceph 健康状态
  • 磁盘 Near Full(>85%)
  • OSD Down
  • OSD Host Down
  • PG 的 Stuck Inactive
  • OSD 主机更少 - 空闲容量检查
  • OSD 的响应时间
  • 网络错误
  • 池容量高
  • monitor Down
  • 整体集群容量低
  • 带有 High PG Count 的 OSD

5.6.3. 访问 Alert Status 仪表板

Alert Status 仪表板中默认配置某些 Red Hat Ceph Storage Dashboard 警报。本节演示了使用两种方式来访问它。

步骤

访问仪表板:

  • 在 Glance 控制面板的 main 中,单击右上角的 Active Alerts 面板。

或.

  • 点 Grafana 图标旁边的左上角的仪表板菜单。选择 Alert Status

5.6.4. 配置通知目标

安装过程中会自动创建名为 cephmetrics 的通知频道。所有预先配置的警报都引用 cephmetrics 频道,但然后才能接收警报,通过选择所需的通知频道类型来完成通知频道定义。Grafana 平台支持多种不同的通知类型,如电子邮件、Slack 和 PagerDuty。

步骤
  • 要配置通知频道,请按照 Grafana 网页上的 Alert Notifications 部分的说明进行操作。

5.6.5. 更改默认警报和添加新实例

本节介绍如何在已经配置的警报中更改触发器值以及如何向 Alert Status 仪表板添加新警报。

步骤
  • 要更改警报上的触发器值或添加新警报,请在 Grafana 网页上遵循 Alerting Engine & Rules 指南

    重要

    为防止覆盖自定义警报,在更改触发器值或添加新警报时,在升级 Red Hat Ceph Storage Dashboard 时不会更新 Alert Status 仪表板。

其它资源

附录 A. 版本 2 和 3 之间的 Ansible 变量更改

使用 Red Hat Ceph Storage 3 时,位于 /usr/share/ceph-ansible/group_vars/ 目录中的某些变量已更改或已被删除。下表列出了所有更改。升级到版本 3 后,再次复制 all.yml.sampleosds.yml.sample 文件,以反映这些更改。详情请参阅升级容器中运行的 Red Hat Ceph Storage 集群。

旧选项新的选项File

mon_containerized_deployment

containerized_deployment

all.yml

ceph_mon_docker_interface

monitor_interface

all.yml

ceph_rhcs_cdn_install

ceph_repository_type: cdn

all.yml

ceph_rhcs_iso_install

ceph_repository_type: iso

all.yml

ceph_rhcs

ceph_origin: repositoryceph_repository: rhcs (默认启用)

all.yml

journal_collocation

osd_scenario: collocated

osds.yml

raw_multi_journal

osd_scenario: non-collocated

osds.yml

raw_journal_devices

dedicated_devices

osds.yml

dmcrytpt_journal_collocation

dmcrypt: true + osd_scenario: collocated

osds.yml

dmcrypt_dedicated_journal

dmcrypt: true + osd_scenario: non-collocated

osds.yml