cassandra - 新节点引导程序的问题
问题描述
我们使用的是 Cassandra 3.11.2,当尝试引导一个新节点时,流式传输需要很多时间。该集群是一个三节点,我们正在添加第四个节点。其他三个节点上可用的数据接近 190GB,实例大小为 5 核,5GB 在旋转驱动器上运行。
nodetool netstats
在新节点上说流文件,在 106 个文件中,有 15 个是从节点 A 收到的。但netstats
在节点 A 上同样声称所有 106 个文件都已发送。
此外,我们遇到了一些与保持活动相关的问题,我们确实在新节点上增加了相同的问题。这是我们的第二次尝试,在第一次尝试中,bootstrap 一直失败,我们要么恢复它,要么在新节点上重新启动 Cassandra,数据增长到接近 500GB,然后发生压缩并下降到 236GB。
但随后引导程序一直失败。所以我们放弃了它,重新开始。这一次,正如硬件选择文档中所建议的那样,我们使用不同的物理磁盘来存储提交日志和数据,以查看 iops 是否是问题所在。
这个过程永远不会结束。意思是,它在对等或 IO 异常重置连接之间失败,我们已经为此苦苦挣扎了将近一周。
您认为引导一个数据接近 190GB 的节点理想情况下需要多少?任何建议/建议都会有很大帮助。新节点启动时将 auto_bootstrap 标志设置为 true。
解决方案
您认为引导一个数据接近 190GB 的节点理想情况下需要多少?
不幸的是,没有简单的方法来回答这个问题。很多因素都决定了新节点的引导速度,本质上是非常特定于底层基础设施的。
我们正在使用 Cassandra 3.11.2
我建议(至少)升级到 3.11.4。这是一个简单的二进制升级,不需要运行nodetool upgradesstables
. 原因是 3.11.4 有一个特性,它允许失败的引导从中断的地方继续。至少到那时,您不必每次都完全重新开始。
数据增长到接近 500GB,然后发生压缩并下降到 236GB。
所以有一些原因会发生这种情况。机架定义 (cassandra-rackdc.properties) 是相同还是不同?如果您将节点引导为新的逻辑机架,您可能会看到一个新节点负责拥有 100% 的可用令牌范围。然而,如果您加入一个与其他节点具有相同逻辑机架的新节点,所有权百分比(和磁盘占用空间)将会下降。
任何建议/建议都会有很大帮助。
在将节点引导到新的物理数据中心时,我也遇到过类似的问题。我取得成功的一件事是设置auto_bootstrap: false
并运行nodetool rebuild
从远程 DC 流式传输的流。当然,如果您没有另一个 DC 可以从中流式传输,那将是行不通的。
您也可以在不启用引导的情况下启动节点,并在nodetool repair
它出现后运行。这有一些缺点,即新节点仍将尝试为客户端请求提供服务,而不管它是否实际拥有数据。但它至少可以让您加入节点,并以更渐进的方式流式传输数据。
这就是为什么升级到 3.11.4可能是您的最佳选择。然后,您可以在流失败时重新启动节点,它会从中断的地方重新开始,并且在数据流完成之前不会接受客户端请求。
推荐阅读
- mysql - Mysql left join 从结果中删除重复值
- laravel - VueJS + element.eleme.io 如何为 el-select 设置默认选项值
- ios - 将 [String:AnyObject] 类型的字典分配给 [String: String] 给出零错误
- ruby-on-rails - ActiveAdmin 和动态 Rails 命名空间
- core-data - 核心数据 NSManagedObject 转换为 json 格式
- python - 无法在 codechef 上解决 Python 中的 NZEC 错误,尽管它在 IDE 上给出了正确的输出
- ios - iOS - 大标题隐藏了我的身体顶部
- r - 将数据框的列转换为因子
- android - 当我单击 TabLayout 的选项卡或通过 viewpager 移动时,我想加载片段
- php - 更多按钮在wordpress帖子中重复相同的值