问题标签 [crush]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
983 浏览

rules - ceph 粉碎图 - 复制

仍然有些困惑 Ceph 迷恋地图的工作原理,并希望有人能提供一些启示。这是我的 osd 树:

我只是想确保在复制值为 2 或更大的情况下,一个对象的所有副本都不在同一个数据中心。我的规则(取自互联网)是:

但是,如果我转储归置组,我会直接看到来自同一个数据中心的两个 osd。osd的5,0

如何确保至少一个副本始终在另一个 dc 中?

0 投票
1 回答
1684 浏览

ceph - 有人能解释一下 Ceph CRUSH 图中奇怪的剩余 OSD 设备——从 osd.N 重命名为 deviceN 吗?

不久前,我们从 Ceph 集群中移除了两个损坏的 OSD,osd.0 和 osd.8。它们现在已从大多数 Ceph 命令中消失,但仍以奇怪的设备名称出现在 CRUSH 地图中:

有人可以解释为什么 device0 和 device8 仍然存在,如果它们对集群有任何影响,以及我们是否应该删除它们?

device0 和 device8 不会出现在 CRUSH 地图的其他任何地方。

我们在这里使用了网站上的程序:

http://docs.ceph.com/docs/jewel/rados/operations/add-or-rm-osds/#removing-osds-manual

基本上:

我主要是问,因为我们正在处理一些卡住的 PG(不完整),它们仍在各个地方引用 id “8”。想知道这是否相关?

否则,“ceph osd 树”看起来是我所期望的(没有 osd.8 也没有 osd.0):

谢谢,

——丹

0 投票
1 回答
858 浏览

kubernetes - Rookv1.2 没有在 CrushMap 上添加标签

我目前正在使用 Rook v1.2.2 在我的 Kubernetes 集群(v1.16.3)上创建一个 Ceph 集群,但我未能在我的 CrushMap 上添加机架级别。

我想从:

类似于:

就像官方 rook 文档 ( https://rook.io/docs/rook/v1.2/ceph-cluster-crd.html#osd-topology ) 中解释的那样。

我遵循的步骤:

我有一个 v1.16.3 Kubernetes 集群,其中有 1 个主服务器(test-m1)和两个工作人员(test-w1 和 test-w2)。我使用 Kubespray 的默认配置(https://kubespray.io/#/docs/getting-started)安装了这个集群。

我将我的节点标记为:

我添加了标签role=storage-node和污点storage-node=true:NoSchedule以强制 Rook 在特定存储节点上执行,以下是一个存储节点的标签和污点的完整示例:

我开始部署 Rook 的 common.yml :https://github.com/rook/rook/blob/master/cluster/examples/kubernetes/ceph/common.yaml

我应用了一个自定义的 operator.yml 文件,以便能够在标记为“role=storage-node”的节点上运行操作员、csi-plugin 和代理:

然后我应用了我自己的自定义 ceph-cluster.yml 文件以允许 pod 在标记为“role=storage-node”的节点上运行

使用此配置,Rook 不会在 Crush Map 上应用标签。如果我安装 toolbox.yml ( https://rook.io/docs/rook/v1.2/ceph-toolbox.html ),进入并运行

我有以下输出:

如您所见,没有定义机架。即使我正确标记了我的节点。

令人惊讶的是,pod prepare-osd 可以检索以下日志第一行的信息:

您知道问题出在哪里,我该如何解决?

0 投票
1 回答
94 浏览

ceph - 为什么 Ceph 通过对象哈希而不是 CRUSH 算法计算 PG ID?

Ceph 使用 CRUSH 算法进行 PG->OSD 映射,它适用于增加/减少 OSD 节点。

但是对于 obj->PG 映射,Ceph 仍然使用传统的哈希,即pgid = hash(obj_name) % pg_num. 如果我们改变 PG 的数量,这种方法可能会导致大量的数据迁移,甚至会降低系统的可用性。

为什么 Ceph 不使用 CRUSH algirhtm(比如稻草 2)进行 obj->PG 映射,当 PG 的数量发生变化时,它可能具有最佳的数据迁移量?

0 投票
1 回答
52 浏览

linux - ceph crushtool 管道命令不起作用

我在 ceph 监视器容器中运行此命令

它向我展示了反编译的粉碎贴图的输出。当我尝试

我收到错误,输入文件 - 未找到

有什么想法可以让我完成这项工作吗?

0 投票
1 回答
358 浏览

linux - 了解ceph中crush规则的机制

我想知道这两条规则之间的区别:

据我了解,第一条规则 rack_rule 将 rack 作为故障域,因此在每个 PG 中,我们都会有来自不同机架的 osd。例如,如果我有 2 个机架并且复制大小 = 2,我将有一个 PG [osd.1,osd.2],这 2 个 osd 应该来自不同的机架。

在第二条规则中,我认为它应该选择 2 个不同的机架,并且对于每个机架,它将选择 2 个不同的主机。所以,如果我有 2 个机架并且复制大小 = 2,我将有一个 PG [osd.1,osd.2],这 2 个 osd 应该来自不同的机架。

这在理论上是我所理解的,但我在实践中看不到这些预期的结果。使用这两个规则,我在同一个机架中为 PG 在复制大小为 2 的池中设置了 osd

0 投票
0 回答
64 浏览

swift - 有时 layoutIfNeeded 会导致 UITableView 内部不一致

Firebase 日志告诉我,有时应用程序在第一个 layoutIfNeeded() 上崩溃,UITableView 内部不一致:_visibleRows 和 _visibleCells 必须具有相同的长度。_visibleRows: {0, 2}; _visibleCells.count:4

我花了很多时间来重现这个错误,但没有结果。任何人都可以建议我找到问题的方法吗?没有任何 beginUpdates()/endUpdates() 调用。但是表格通过分页加载数据。