跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Enterprise Storage 7.1 文档 / 部署指南 / 部署 Ceph 集群 / 使用 cephadm 部署其余核心服务
适用范围 SUSE Enterprise Storage 7.1

8 使用 cephadm 部署其余核心服务

部署基本 Ceph 集群之后,请将核心服务部署到更多集群节点。为使客户端能够访问集群数据,还需要部署额外的服务。

目前,我们支持使用 Ceph orchestrator(ceph orch 子命令)在命令行上部署 Ceph 服务。

8.1 ceph orch 命令

Ceph orchestrator 命令 ceph orch 是 cephadm 模块的接口,它负责列出集群组件并在新的集群节点上部署 Ceph 服务。

8.1.1 显示 orchestrator 状态

以下命令会显示当前模式和 Ceph orchestrator 的状态。

cephuser@adm > ceph orch status

8.1.2 列出设备、服务和守护进程

要列出所有磁盘设备,请运行以下命令:

cephuser@adm > ceph orch device ls
Hostname   Path      Type  Serial  Size   Health   Ident  Fault  Available
ses-master /dev/vdb  hdd   0d8a... 10.7G  Unknown  N/A    N/A    No
ses-min1   /dev/vdc  hdd   8304... 10.7G  Unknown  N/A    N/A    No
ses-min1   /dev/vdd  hdd   7b81... 10.7G  Unknown  N/A    N/A    No
[...]
提示
提示:服务和守护进程

服务是表示特定类型的 Ceph 服务的一种通用术语,例如 Ceph Manager。

守护进程表示服务的特定实例,例如在名为 ses-min1 的节点上运行的进程 mgr.ses-min1.gdlcik

要列出 cephadm 已知的所有服务,请运行:

cephuser@adm > ceph orch ls
NAME  RUNNING  REFRESHED  AGE  PLACEMENT  IMAGE NAME                  IMAGE ID
mgr       1/0  5m ago     -    <no spec>  registry.example.com/[...]  5bf12403d0bd
mon       1/0  5m ago     -    <no spec>  registry.example.com/[...]  5bf12403d0bd
提示
提示

您可以使用可选的 -–host 参数使列表仅显示特定节点上的服务,也可使用可选的 --service-type 参数使列表仅显示特定类型的服务。可接受的类型有 monosdmgrmdsrgw

要列出由 cephadm 部署的所有运行中守护进程,请运行:

cephuser@adm > ceph orch ps
NAME            HOST     STATUS   REFRESHED AGE VERSION    IMAGE ID     CONTAINER ID
mgr.ses-min1.gd ses-min1 running) 8m ago    12d 15.2.0.108 5bf12403d0bd b8104e09814c
mon.ses-min1    ses-min1 running) 8m ago    12d 15.2.0.108 5bf12403d0bd a719e0087369
提示
提示

要查询某个特定守护进程的状态,请使用 --daemon_type--daemon_id。对于 OSD,ID 为数字 OSD ID。对于 MDS,ID 为文件系统名称:

cephuser@adm > ceph orch ps --daemon_type osd --daemon_id 0
cephuser@adm > ceph orch ps --daemon_type mds --daemon_id my_cephfs

8.2 服务和归置规范

指定 Ceph 服务部署的推荐方法是创建一个 YAML 格式的文件,其中包含所要部署服务的规范。

8.2.1 创建服务规范

您可以为每种类型的服务创建单独的规范文件,例如:

root@master # cat nfs.yml
service_type: nfs
service_id: EXAMPLE_NFS
placement:
  hosts:
  - ses-min1
  - ses-min2
spec:
  pool: EXAMPLE_POOL
  namespace: EXAMPLE_NAMESPACE

或者,您可以在一个描述哪些节点将运行特定服务的文件(例如 cluster.yml)中指定多个(或所有)服务类型。请记得用三个破折号 (---) 分隔各个服务类型:

cephuser@adm > cat cluster.yml
service_type: nfs
service_id: EXAMPLE_NFS
placement:
  hosts:
  - ses-min1
  - ses-min2
spec:
  pool: EXAMPLE_POOL
  namespace: EXAMPLE_NAMESPACE
---
service_type: rgw
service_id: REALM_NAME.ZONE_NAME
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3
---
[...]

上述属性的含义如下:

service_type

服务的类型。它可以是 Ceph 服务(monmgrmdscrashosdrbd-mirror)、网关(nfsrgw)或部分监控堆栈(alertmanagergrafananode-exporterprometheus)。

service_id

服务的名称。monmgralertmanagergrafananode-exporterprometheus 类型的规范不需要 service_id 属性。

placement

指定哪些节点将运行服务。有关更多详细信息,请参见第 8.2.2 节 “创建归置规范”

spec

与服务类型相关的其他规范。

提示
提示:应用特定服务

Ceph 集群服务通常具有许多专属属性。有关各个服务规范的示例和详细信息,请参见第 8.3 节 “部署 Ceph 服务”

8.2.2 创建归置规范

要部署 Ceph 服务,cephadm 需要知道要在其上部署这些服务的节点。请使用 placement 属性并列出要应用服务的节点的主机名简短名称:

cephuser@adm > cat cluster.yml
[...]
placement:
  hosts:
  - host1
  - host2
  - host3
[...]

8.2.3 应用集群规范

创建包含所有服务及其归置的规范的完整 cluster.yml 文件之后,您便可通过运行以下命令来应用集群:

cephuser@adm > ceph orch apply -i cluster.yml

要查看集群的状态,请运行 ceph orch status 命令。有关细节,请参见第 8.1.1 节 “显示 orchestrator 状态”

8.2.4 导出运行中集群的规范

虽然您使用如第 8.2 节 “服务和归置规范”中所述的规范文件将服务部署到 Ceph 集群,但在实际操作过程中集群的配置可能会偏离原始规范。另外,您也可能会无意间删除规范文件。

要检索运行中集群的完整规范,请运行:

cephuser@adm > ceph orch ls --export
placement:
  hosts:
  - hostname: ses-min1
    name: ''
    network: ''
service_id: my_cephfs
service_name: mds.my_cephfs
service_type: mds
---
placement:
  count: 2
service_name: mgr
service_type: mgr
---
[...]
提示
提示

您可以追加 --format 选项以更改默认的 yaml 输出格式。您可以从 jsonjson-prettyyaml 中进行选择。例如:

ceph orch ls --export --format json

8.3 部署 Ceph 服务

在运行基本集群之后,您可以将 Ceph 服务部署到其他节点。

8.3.1 部署 Ceph Monitor 和 Ceph Manager

Ceph 集群的不同节点之间部署了三个或五个 MON。如果集群中有五个或更多节点,则建议部署五个 MON。好的做法是,将 MGR 部署在与 MON 相同的节点上。

重要
重要:包含引导 MON

在部署 MON 和 MGR 时,请记得包含在第 7.2.5 节 “指定第一个 MON/MGR 节点”中配置基本集群时添加的第一个 MON。

要部署 MON,请应用以下规范:

service_type: mon
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3
注意
注意

如果需要添加另一个节点,请在同一 YAML 列表中追加主机名。例如:

service_type: mon
placement:
 hosts:
 - ses-min1
 - ses-min2
 - ses-min3
 - ses-min4

同样,要部署 MGR,请应用以下规范:

重要
重要

确保您的部署在每个部署中至少有三个 Ceph Manager。

service_type: mgr
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3
提示
提示

如果 MON 或 MGR 在同一子网中,则需要追加子网地址。例如:

service_type: mon
placement:
  hosts:
  - ses-min1:10.1.2.0/24
  - ses-min2:10.1.5.0/24
  - ses-min3:10.1.10.0/24

8.3.2 部署 Ceph OSD

重要
重要:当存储设备可用时

如果满足以下所有条件,则存储设备将被视为可用

  • 设备没有分区。

  • 设备没有任何 LVM 状态。

  • 设备未挂载。

  • 设备不包含文件系统。

  • 设备不包含 BlueStore OSD。

  • 设备大于 5 GB。

如果不符合上述条件,Ceph 将拒绝供给此类 OSD。

可以使用以下两种方式来部署 OSD:

  • 告知 Ceph 使用所有可用和未使用的存储设备:

    cephuser@adm > ceph orch apply osd --all-available-devices
  • 使用 DriveGroups(参见第 13.4.3 节 “使用 DriveGroups 规范添加 OSD。”)创建 OSD 规范,该规范描述了将根据设备属性(例如设备类型(SSD 或 HDD)、设备型号名称、大小或设备所在的节点)部署的设备。然后通过运行以下命令应用规范:

    cephuser@adm > ceph orch apply osd -i drive_groups.yml

8.3.3 部署元数据服务器

CephFS 需要一个或多个元数据服务器 (MDS) 服务。要创建 CephFS,首先要通过应用以下规范来创建 MDS 服务器:

注意
注意

在应用以下规范之前,请确保至少创建了两个存储池,一个用于存储 CephFS 数据,另一个用于存储 CephFS 元数据。

service_type: mds
service_id: CEPHFS_NAME
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3

MDS 正常运行后,创建 CephFS:

ceph fs new CEPHFS_NAME metadata_pool data_pool

8.3.4 部署对象网关

cephadm 会将对象网关部署为管理特定领域区域的守护进程的集合。

您可以将对象网关服务与现有的领域和区域相关联(有关更多详细信息,请参见第 21.13 节 “多站点对象网关”),也可以指定不存在的 REALM_NAMEZONE_NAME,应用以下配置后会自动创建相应领域和区域:

service_type: rgw
service_id: REALM_NAME.ZONE_NAME
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3
spec:
  rgw_realm: RGW_REALM
  rgw_zone: RGW_ZONE

8.3.4.1 使用安全 SSL 访问

要使用到对象网关的安全 SSL 连接,您需要一对有效的 SSL 证书和密钥文件(有关更多详细信息,请参见第 21.7 节 “为对象网关启用 HTTPS/SSL”)。您需要启用 SSL,指定 SSL 连接的端口号以及 SSL 证书和密钥文件。

要启用 SSL 并指定端口号,请在规范中包含以下内容:

spec:
  ssl: true
  rgw_frontend_port: 443

要指定 SSL 证书和密钥,可以将其内容直接粘贴到 YAML 规范文件中。行末的竖线符号 (|) 告知分析程序预期的值为多行字符串。例如:

spec:
  ssl: true
  rgw_frontend_port: 443
  rgw_frontend_ssl_certificate: |
   -----BEGIN CERTIFICATE-----
   MIIFmjCCA4KgAwIBAgIJAIZ2n35bmwXTMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNV
   BAYTAkFVMQwwCgYDVQQIDANOU1cxHTAbBgNVBAoMFEV4YW1wbGUgUkdXIFNTTCBp
   [...]
   -----END CERTIFICATE-----
   rgw_frontend_ssl_key: |
   -----BEGIN PRIVATE KEY-----
   MIIJRAIBADANBgkqhkiG9w0BAQEFAASCCS4wggkqAgEAAoICAQDLtFwg6LLl2j4Z
   BDV+iL4AO7VZ9KbmWIt37Ml2W6y2YeKX3Qwf+3eBz7TVHR1dm6iPpCpqpQjXUsT9
   [...]
   -----END PRIVATE KEY-----
提示
提示

您可以省略 rgw_frontend_ssl_certificate:rgw_frontend_ssl_key: 关键字,并将它们上载到配置数据库,而不是粘贴 SSL 证书和密钥文件的内容:

cephuser@adm > ceph config-key set rgw/cert/REALM_NAME/ZONE_NAME.crt \
 -i SSL_CERT_FILE
cephuser@adm > ceph config-key set rgw/cert/REALM_NAME/ZONE_NAME.key \
 -i SSL_KEY_FILE
8.3.4.1.1 将对象网关配置为同时侦听端口 443 和 80

要将对象网关配置为同时侦听端口 443 (HTTPS) 和 80 (HTTP),请执行以下步骤:

注意
注意

该过程中的命令使用 default 领域和区域。

  1. 提供规范文件以部署对象网关。有关对象网关规范的更多详细信息,请参见第 8.3.4 节 “部署对象网关”。使用以下命令:

    cephuser@adm > ceph orch apply -i SPEC_FILE
  2. 如果规范文件中未提供 SSL 证书,请使用以下命令添加证书:

    cephuser@adm > ceph config-key set rgw/cert/default/default.crt -i certificate.pem
    cephuser@adm > ceph config-key set rgw/cert/default/default.key -i key.pem
  3. 更改 rgw_frontends 选项的默认值:

    cephuser@adm > ceph config set client.rgw.default.default rgw_frontends \
     "beast port=80 ssl_port=443"
  4. 删除 cephadm 创建的特定配置。运行以下命令标识 rgw_frontends 选项是为哪个目标配置的:

    cephuser@adm > ceph config dump | grep rgw

    例如,目标是 client.rgw.default.default.node4.yiewdu。删除 rgw_frontends 当前的具体值:

    cephuser@adm > ceph config rm client.rgw.default.default.node4.yiewdu rgw_frontends
    提示
    提示

    您也可以不删除 rgw_frontends 的值,而是指定其值。例如:

    cephuser@adm > ceph config set client.rgw.default.default.node4.yiewdu \
     rgw_frontends "beast port=80 ssl_port=443"
  5. 重启动对象网关:

    cephuser@adm > ceph orch restart rgw.default.default

8.3.4.2 使用子集群部署

子集群可帮助您组织集群中的节点,以分隔工作负载,让弹性缩放更轻松。如果使用子集群进行部署,请应用以下配置:

service_type: rgw
service_id: REALM_NAME.ZONE_NAME.SUBCLUSTER
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3
spec:
  rgw_realm: RGW_REALM
  rgw_zone: RGW_ZONE
  subcluster: SUBCLUSTER

8.3.5 部署 iSCSI 网关

cephadm 可部署 iSCSI 网关,它是一种存储区域网络 (SAN) 协议,可让客户端(称作发起程序)将 SCSI 命令发送到远程服务器上的 SCSI 存储设备(目标)。

应用以下配置进行部署。确保 trusted_ip_list 包含所有 iSCSI 网关和 Ceph Manager 节点的 IP 地址(请参见下面的输出示例)。

注意
注意

请确保在应用以下规范之前创建存储池。

service_type: iscsi
service_id: EXAMPLE_ISCSI
placement:
  hosts:
  - ses-min1
  - ses-min2
  - ses-min3
spec:
  pool: EXAMPLE_POOL
  api_user: EXAMPLE_USER
  api_password: EXAMPLE_PASSWORD
  trusted_ip_list: "IP_ADDRESS_1,IP_ADDRESS_2"
注意
注意

请确保针对 trusted_ip_list 列出的 IP 在逗号分隔后没有空格。

8.3.5.1 安全 SSL 配置

要在 Ceph Dashboard 和 iSCSI 目标 API 之间使用安全 SSL 连接,您需要一对有效的 SSL 证书和密钥文件。它们可以是 CA 颁发的,也可以是自我签名的(参见第 10.1.1 节 “创建自我签名证书”)。要启用 SSL,请在您的规范文件中包含 api_secure: true 设置:

spec:
  api_secure: true

要指定 SSL 证书和密钥,可以将其内容直接粘贴到 YAML 规范文件中。行末的竖线符号 (|) 告知分析程序预期的值为多行字符串。例如:

spec:
  pool: EXAMPLE_POOL
  api_user: EXAMPLE_USER
  api_password: EXAMPLE_PASSWORD
  trusted_ip_list: "IP_ADDRESS_1,IP_ADDRESS_2"
  api_secure: true
  ssl_cert: |
    -----BEGIN CERTIFICATE-----
    MIIDtTCCAp2gAwIBAgIYMC4xNzc1NDQxNjEzMzc2MjMyXzxvQ7EcMA0GCSqGSIb3
    DQEBCwUAMG0xCzAJBgNVBAYTAlVTMQ0wCwYDVQQIDARVdGFoMRcwFQYDVQQHDA5T
    [...]
    -----END CERTIFICATE-----
  ssl_key: |
    -----BEGIN PRIVATE KEY-----
    MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC5jdYbjtNTAKW4
    /CwQr/7wOiLGzVxChn3mmCIF3DwbL/qvTFTX2d8bDf6LjGwLYloXHscRfxszX/4h
    [...]
    -----END PRIVATE KEY-----

8.3.6 部署 NFS Ganesha

重要
重要

NFS Ganesha 支持 NFS 4.1 和更高版本,不支持 NFS 3 版本。

cephadm 可使用预定义的 RADOS 存储池和可选的名称空间部署 NFS Ganesha。要部署 NFS Ganesha,请应用以下规范:

注意
注意

您需要有一个预定义的 RADOS 存储池,否则 ceph orch apply 操作将失败。有关创建存储池的详细信息,请参见第 18.1 节 “创建存储池”

service_type: nfs
service_id: EXAMPLE_NFS
placement:
  hosts:
  - ses-min1
  - ses-min2
spec:
  pool: EXAMPLE_POOL
  namespace: EXAMPLE_NAMESPACE
  • EXAMPLE_NFS,包含用于标识 NFS 导出项的任意字符串。

  • EXAMPLE_POOL,包含将存储 NFS Ganesha RADOS 配置对象的存储池的名称。

  • EXAMPLE_NAMESPACE(可选),包含所需的对象网关 NFS 名称空间(例如,ganesha)。

8.3.7 部署 rbd-mirror

rbd-mirror 服务负责在两个 Ceph 集群之间同步 RADOS 块设备映像(有关更多详细信息,请参见第 20.4 节 “RBD 映像镜像”)。要部署 rbd-mirror,请使用以下规范:

service_type: rbd-mirror
service_id: EXAMPLE_RBD_MIRROR
placement:
  hosts:
  - ses-min3

8.3.8 部署监控堆栈

监控堆栈包含 Prometheus、Prometheus 导出程序、Prometheus 告警管理器和 Grafana。Ceph Dashboard 使用这些组件来存储并直观呈现有关集群使用率和性能的详细度量。

提示
提示

如果您的部署需要监控堆栈服务的自定义或本地提供的容器映像,请参见第 16.1 节 “配置自定义或本地映像”

要部署监控堆栈,请执行以下步骤:

  1. 在 Ceph Manager 守护进程中启用 prometheus 模块。这将公开内部 Ceph 度量,以便 Prometheus 可以读取这些信息:

    cephuser@adm > ceph mgr module enable prometheus
    注意
    注意

    请确保在部署 Prometheus 之前运行此命令。如果部署前未运行该命令,则必须重新部署 Prometheus 才能更新 Prometheus 的配置:

    cephuser@adm > ceph orch redeploy prometheus
  2. 创建包含如下内容的规范文件(例如 monitoring.yaml):

    service_type: prometheus
    placement:
      hosts:
      - ses-min2
    ---
    service_type: node-exporter
    ---
    service_type: alertmanager
    placement:
      hosts:
      - ses-min4
    ---
    service_type: grafana
    placement:
      hosts:
      - ses-min3
  3. 通过运行以下命令应用监控服务:

    cephuser@adm > ceph orch apply -i monitoring.yaml

    部署监控服务可能需要一到两分钟。

重要
重要

Prometheus、Grafana 和 Ceph Dashboard 全都会自动配置为相互通讯,因而如上面所述进行部署时,Ceph Dashboard 中将实现功能完备的 Grafana 集成。

但使用 RBD 映像进行监控时不适用于此规则。有关更多信息,请参见第 16.5.4 节 “启用 RBD 映像监控”