Ceph 服务管理之守护进程

对于部署服务的编排器,它需要知道在哪里部署守护进程,以及部署多少。这是放置规范的作用。放置规范既可以作为命令行参数传递,也可以在 YAML 文件中传递。

笔记:cephadm 不会在带有_no_schedule标签的主机上部署守护进程;请参阅特殊主机标签。

笔记:apply命令可能会令人困惑。因此,我们建议使用 YAML 规范。

每个ceph orch apply 命令都取代它之前的命令。如果您不使用正确的语法,您将在进行时破坏您的工作。

例如:

ceph orch apply mon host1
ceph orch apply mon host2
ceph orch apply mon host3

这导致只有一个主机应用了监视器:host3。

(第一个命令在 host1 上创建一个监视器。然后第二个命令破坏 host1 上的监视器并在 host2 上创建一个监视器。然后第三个命令破坏 host2 上的监视器并在 host3 上创建一个监视器。在这种情况下,此时,仅在 host3 上有一个监视器。)

要确保将监视器应用于这三个主机中的每一个,请运行如下命令:

ceph orch apply mon "host1,host2,host3"

还有另一种方法可以将监视器应用到多个主机:可以使用一个yaml文件。不要使用“ceph orch apply mon”命令,而是运行以下形式的命令:

ceph orch apply -i file.yaml

这是一个示例file.yaml文件

service_type: mon
placement:
  hosts:
   - host1
   - host2
   - host3

显式展示位置

守护进程可以通过简单地指定它们显式地放置在主机上:

orch apply prometheus --placement="host1 host2 host3"

或者在 YAML 中:

service_type: prometheus
placement:
  hosts:
    - host1
    - host2
    - host3

MON 和其他服务可能需要一些增强的网络规范:

orch daemon add mon --placement="myhost:[v2:1.2.3.4:3300,v1:1.2.3.4:6789]=name"

其中[v2:1.2.3.4:3300,v1:1.2.3.4:6789]是监视器的网络地址,并指定新监视器的名称name。

按标签放置

可以将守护程序放置限制在与特定标签匹配的主机上。要为适当的主机设置标签mylabel,请运行以下命令:

ceph orch host label add *<hostname>* mylabel

要查看当前主机和标签,请运行以下命令:

ceph orch host ls

例如:

ceph orch host label add host1 mylabel
ceph orch host label add host2 mylabel
ceph orch host label add host3 mylabel
ceph orch host ls
HOST   ADDR   LABELS  STATUS
host1         mylabel
host2         mylabel
host3         mylabel
host4
host5

现在,通过运行以下命令告诉 cephadm 根据标签部署守护进程:

orch apply prometheus --placement="label:mylabel"

或者在 YAML 中:

service_type: prometheus
placement:
  label: "mylabel"

请参阅主机标签。

通过模式匹配放置

守护进程也可以放置在主机上:

orch apply prometheus --placement='myhost[1-3]'

或者在 YAML 中:

service_type: prometheus
placement:
  host_pattern: "myhost[1-3]"

要在所有主机上放置服务,请使用"*":

orch apply node-exporter --placement='*'

或者在 YAML 中:

service_type: node-exporter
placement:
  host_pattern: "*"

改变守护进程的数量

通过指定count,只会创建指定数量的守护进程:

orch apply prometheus --placement=3

要在主机子集上部署守护程序,请指定计数:

orch apply prometheus --placement="2 host1 host2 host3"

如果计数大于主机数量,cephadm 会为每个主机部署一个:

orch apply prometheus --placement="3 host1 host2"

上面的命令会产生两个 Prometheus 守护进程。

YAML 也可用于指定限制,方式如下:

service_type: prometheus
placement:
  count: 3

YAML 也可用于指定主机限制:

service_type: prometheus
placement:
  count: 2
  hosts:
    - host1
    - host2
    - host3

守护进程的协同定位

Cephadm 支持在同一主机上部署多个守护进程:

service_type: rgw
placement:
  label: rgw
  count-per-host: 2

每个主机部署多个守护程序的主要原因是在同一主机上运行多个 RGW 和 MDS 守护程序的额外性能优势。

也可以看看:

此功能是在pacific引入的。

算法描述

Cephadm 的声明状态由包含放置规范的服务规范列表组成。

Cephadm 不断将集群中实际运行的守护进程列表与服务规范中的列表进行比较。Cephadm 添加新的守护进程并根据需要删除旧的守护进程,以符合服务规范。

Cephadm 执行以下操作以保持对服务规范的遵守。

Cephadm 首先选择一个候选主机列表。Cephadm 寻找明确的主机名并选择它们。如果 cephadm 没有找到明确的主机名,它会查找标签规范。如果规范中没有定义标签,cephadm 会根据主机模式选择主机。如果没有定义主机模式,作为最后的手段,cephadm 选择所有已知的主机作为候选。

Cephadm 知道现有的守护进程正在运行服务,并试图避免移动它们。

Cephadm 支持部署特定数量的服务。考虑以下服务规范:

service_type: mds
service_name: myfs
placement:
  count: 3
  label: myfs

此服务规范指示 cephadm 在跨集群标记myfs的主机上部署三个守护进程。

如果候选主机上部署的守护进程少于三个,cephadm 会随机选择要部署新守护进程的主机。

如果候选主机上部署了三个以上的守护进程,cephadm 将删除现有的守护进程。

最后,cephadm 删除候选主机列表之外的主机上的守护进程。

笔记:cephadm 必须考虑一种特殊情况。
如果放置规范选择的主机数count少于所需的主机数,则 cephadm 将仅部署在选定的主机上。

posted @ 2022-03-03 21:43  Varden  阅读(489)  评论(0)    收藏  举报