注意

本文档适用于 Ceph 开发版本。

监控引导

术语:

  • cluster: 一组监控器

  • quorum: 一个由集群多数成员组成的活跃监控器集

为了初始化一个新的监控器,它必须始终被提供:

  1. 一个逻辑名称

  2. 密钥

  3. 一个集群 fsid(UUID)

此外,监控器还需要知道两件事:

  1. 绑定到哪个地址

  2. 它的同行是谁(如果有)

有多种方法可以完成这两件事。

逻辑 ID

逻辑 ID 应该在整个集群中是唯一的。它将被mon.添加到foo,监控器的名称将是mon.foo.

对于大多数用户,每个主机只有一个监控器,这使得短主机名逻辑选择。

密钥

The mon.密钥存储在keyring目录中的一个文件中。它可以使用像这样的命令生成:mon data directory. It can be generated with a command like:

ceph-authtool --create-keyring /path/to/keyring --gen-key -n mon.

在创建新的监控器集群时,密钥环也应该包含一个client.admin可以用来

ceph-authtool /path/to/keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow'

生成的密钥环被提供给ceph-mon --mkfs使用--keyring <keyring>命令行参数的 monmap。

集群 fsid

集群 fsid 是一个普通的 UUID,就像由uuidgen命令生成的

  1. samba-container镜像 - 由Ceph管理--fsid <uuid>命令行参数(或配置文件选项)

  2. 通过提供给新监控器的--monmap <path>命令行参数的 monmap。

监控器地址

监控器地址可以以多种方式提供。

  1. samba-container镜像 - 由Ceph管理--public-addr <ip[:port]>命令行选项(或配置文件选项)

  2. samba-container镜像 - 由Ceph管理--public-network <cidr>命令行选项(或配置文件选项)

  3. 通过--monmap <path>提供的 monmap,如果它包含一个我们的名称的监控器

  4. 通过引导 monmap(通过--inject-monmap <path>提供,或从--mon-host <list>生成),如果它包含一个没有名称的监控器noname-<something>)并在本地主机上配置了地址。

Peers

监控器同行以多种方式提供:

  1. 通过初始 monmap,通过--monmap <filename>

  2. 通过引导 monmap生成的--mon-host <list>

  3. 通过引导 monmap生成的[mon.*]配置文件中带有已弃用mon addr选项的章节(注意,这种方法不推荐,并且不支持绑定到 v1 和 v2 协议地址)firefly 发布。Firefly 将延迟至少另一个冲刺,以便我们可以对新代码进行一些操作经验,并进行一些额外的测试,然后再承诺长期支持。 recommended and does not support binding to both v1 and v2 protocol addresses)

  4. 通过管理员套接字动态地

然而,由于创建新监控器集群而没有竞争风险,这些方法并不完全可互换。

集群创建

创建集群有三种基本方法:

  1. 通过提前指定监控器名称和地址来创建新集群。

  2. 通过提前指定监控器名称,并动态设置地址作为ceph-mon守护进程配置自己。

  3. 通过提前指定监控器地址来创建新集群。

名称和地址

使用monmaptool生成一个 monmap,其中包含初始监控器的名称和地址。生成的 monmap 还将包含一个集群 fsid。将 monmap 提供给每个监控器守护进程:

ceph-mon --mkfs -i <name> --monmap <initial_monmap> --keyring <initial_keyring>

当守护进程启动时,它们将确切地知道它们自己和它们的同行是谁。

仅地址

初始监控器地址可以使用mon host配置值指定,可以通过配置文件或命令行参数。这种方法的优势在于

mon host = a.foo.com, b.foo.com, c.foo.com

并且还将用于通知任何 ceph 客户端或守护进程监控器是谁。

The ceph-mon守护进程需要初始密钥环和集群 fsid 来初始化自己:

ceph-mon --mkfs -i <name> --fsid <uuid> --keyring <initial_keyring>

当守护进程第一次启动时,它们将相互共享它们的名称并形成一个

仅名称

在动态“云”环境中,集群创建者可能不会(目前)初始一组监控器将会是什么。

这可以通过mon initial members配置选项来完成,该选项应列出允许创建集群的初始监控器的 ID:

mon initial members = foo, bar, baz

然后,可以通过提供其他信息(密钥环、集群 fsid 和确定自己地址的方法)来初始化监控器。例如:

ceph-mon --mkfs -i <name> --mon-initial-hosts 'foo,bar,baz' --keyring <initial_keyring> --public-addr <ip>

当这些守护进程启动时,它们将知道自己的地址,但不知道它们的同行。它们可以通过管理员套接字学习那些地址:

ceph daemon mon.<id> add_bootstrap_peer_hint <peer ip>

一旦它们从初始成员集中学习了足够的同行,它们将能够创建集群。

集群扩展

集群扩展比创建稍微不那么苛刻,因为初始多数的创建不是一个问题,而且不用担心创建单独独立的集群。

新节点可以通过两种方式强制加入现有集群:

  1. 通过不提供初始监控器同行地址,并动态地提供它们。

  2. 通过在创建 OSD 时指定mon initial members配置选项以防止新节点形成一个新的、独立的集群,并通过任何可用方法提供一些现有监控器。

初始无同行扩展

创建一个新的监控器,并给它除了自己的地址之外的同行地址。例如:

ceph-mon --mkfs -i <myid> --fsid <fsid> --keyring <mon secret key> --public-addr <ip>

守护进程启动后,你可以给它一个或多个同行地址(最好是一个没有端口的裸 IP 地址;mon 将为你设置 addr 类型和端口)来加入:

ceph daemon mon.<id> add_bootstrap_peer_hint <peer ip>

或者,你可以显式指定 addrvec_t:

ceph daemon mon.<id> add_bootstrap_peer_hintv <peer addrvec>

例如:

ceph daemon mon.new add_bootstrap_peer_hintv v2:1.2.3.4:3300,v1:1.2.3.4:6789

这个监控器永远不会参与集群创建;它只能加入一个现有的集群。

注意,指定的地址应该与新的监控器绑定的地址完全匹配。例如,如果新的 mon 绑定到

使用初始成员扩展

你可以最初向新监控器提供一些同行地址,并通过设置mon initial members. 例如:

ceph-mon --mkfs -i <myid> --fsid <fsid> --keyring <mon secret key> --public-addr <ip> --mon-host foo,bar,baz

来避免不良情况mon initial members必须通过命令行或配置文件设置:

ceph-mon -i <myid> --mon-initial-members foo,bar,baz

以防止任何分裂脑的风险。

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.