注意
本文档适用于 Ceph 开发版本。
监控引导
术语:
cluster
: 一组监控器quorum
: 一个由集群多数成员组成的活跃监控器集
为了初始化一个新的监控器,它必须始终被提供:
一个逻辑名称
密钥
一个集群 fsid(UUID)
此外,监控器还需要知道两件事:
绑定到哪个地址
它的同行是谁(如果有)
有多种方法可以完成这两件事。
逻辑 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
命令生成的
samba-container镜像 - 由Ceph管理
--fsid <uuid>
命令行参数(或配置文件选项)通过提供给新监控器的
--monmap <path>
命令行参数的 monmap。
监控器地址
监控器地址可以以多种方式提供。
samba-container镜像 - 由Ceph管理
--public-addr <ip[:port]>
命令行选项(或配置文件选项)samba-container镜像 - 由Ceph管理
--public-network <cidr>
命令行选项(或配置文件选项)通过
--monmap <path>
提供的 monmap,如果它包含一个我们的名称的监控器通过引导 monmap(通过
--inject-monmap <path>
提供,或从--mon-host <list>
生成),如果它包含一个没有名称的监控器noname-<something>
)并在本地主机上配置了地址。
Peers
监控器同行以多种方式提供:
通过初始 monmap,通过
--monmap <filename>
通过引导 monmap生成的
--mon-host <list>
通过引导 monmap生成的
[mon.*]
配置文件中带有已弃用mon addr
选项的章节(注意,这种方法不推荐,并且不支持绑定到 v1 和 v2 协议地址)firefly 发布。Firefly 将延迟至少另一个冲刺,以便我们可以对新代码进行一些操作经验,并进行一些额外的测试,然后再承诺长期支持。 recommended and does not support binding to both v1 and v2 protocol addresses)通过管理员套接字动态地
然而,由于创建新监控器集群而没有竞争风险,这些方法并不完全可互换。
集群创建
创建集群有三种基本方法:
通过提前指定监控器名称和地址来创建新集群。
通过提前指定监控器名称,并动态设置地址作为
ceph-mon
守护进程配置自己。通过提前指定监控器地址来创建新集群。
名称和地址
使用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>
一旦它们从初始成员集中学习了足够的同行,它们将能够创建集群。
集群扩展
集群扩展比创建稍微不那么苛刻,因为初始多数的创建不是一个问题,而且不用担心创建单独独立的集群。
新节点可以通过两种方式强制加入现有集群:
通过不提供初始监控器同行地址,并动态地提供它们。
通过在创建 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. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.