我有一个2节点的apache cassandra(2.0.3)集群,其rep因子为1.我在cqlsh中使用以下命令将rep因子更改为2
ALTER KEYSPACE "mykeyspace" WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 2 };
Run Code Online (Sandbox Code Playgroud)
然后我尝试在执行此类alter之后运行推荐的"nodetool repair".
问题是这个命令有时会很快完成.当它完成时,通常会说"丢失通知......"并且退出代码不为零.
所以我只重复这个'nodetool repair'直到它完成没有错误.我还检查'nodetool status'是否报告了每个节点的预期磁盘空间.(使用rep因子1,每个节点都说大约7GB,我希望在nodetool修复之后每个节点都是14GB,假设平均时间没有集群使用)
在这种情况下,是否有更正确的方法来确定'nodetool repair'已完成?
Cassandra nodetool 更新 OpenJDK 后抛出错误
nodetool status
nodetool: Failed to connect to '127.0.0.1:7199' - URISyntaxException: 'Malformed IPv6 address at index 7: rmi://[127.0.0.1]:7199'.
Run Code Online (Sandbox Code Playgroud)
这也会影响当前官方 Docker-Hub 镜像https://hub.docker.com/_/cassandra版本 3.11.12
我该如何修复这个错误?
最近,我开始使用Cassandra的Java驱动程序(cassandra-driver-core-2.0.2)开发Grails与Cassandra的集成.所以我很想知道我们如何知道我们的表在cassandra DB中存储数据的大小.
我创建了一个名为Customkeyspace的键空间和一个名为Movie的列族.所以我很想知道我必须使用哪个工具/命令来了解keypace/Column系列的大小?
我无法在cassandra.yaml中找到它,也许nodetool可以获得我的集群配置的复制因子?
复制因子的默认值是多少?
从文档:
使用nodetool repair -pr(-partitioner-range)选项仅修复该节点的主要范围,该范围的其他副本仍然必须执行Merkle树计算,从而导致验证压缩.因为所有副本同时是压缩的,所以所有节点对于该部分数据的响应可能很慢.
可能从来没有一个时间我可以接受所有节点对于某一部分数据来说速度慢.但我想知道:为什么会这样做(或者可能只是在文档中使用"-par"选项混合?!),当时nodetool repair
看起来更聪明:
默认情况下,repair命令会立即获取每个副本的快照,然后从快照中按顺序修复每个副本.例如,如果您有RF = 3且A,B和C代表三个副本,则此命令立即获取每个副本的快照,然后从快照中顺序修复每个副本(A < - > B,A < - > C, B - - C)而不是一次修复A,B和C. 这允许动态snitch通过其他副本维护应用程序的性能,因为快照中至少有一个副本没有进行修复.
但是,datastax博客解决了这个问题:
然而,第一阶段可能在磁盘上密集.您可以通过压缩限制在某种程度上缓解这种情况(因为这个阶段就是我们所说的验证压缩.)有时候这还不够,有些人试图通过使用-pr(-partitioner-range)来进一步缓解这种情况. nodetool repair的选项,仅修复该节点的主要范围.不幸的是,该范围的其他副本仍然必须执行Merkle树计算,从而导致验证压缩.这可能是一个问题,因为所有副本都将同时执行此操作,可能使它们对于您的数据部分的响应速度都很慢.幸运的是,通过使用-snapshot选项可以解决这个问题.
这可能很好,但实际上,没有-snapshot
选项nodetool repair
(参见联机帮助页或文档)(已删除此选项?!)
总的来说,
nodetool repair -pr
似乎无法使用,因为我总是至少需要让系统保持足够的响应能力来读取/写入一致性ONE,而不会有明显的延迟.(注意:我们只有一个数据中心.)或者我错过/误解了什么?nodetool repair
智能的,保持一个节点响应,同时nodetool repair -pr
使一部分数据的所有节点变慢?-snapshot
选项在哪里:它已被删除,从未实现过,或者它现在可能会自动运行,也可以在使用时自动运行nodetool repair -pr
?要在AWS中从2节点集群中删除节点,我运行了
nodetool removenode <Host ID>
此后,我应该让我的集群回来,如果我把所有的cassandra.yaml
和cassandra-rackdc.properties
正确的.我做了但仍然,我无法恢复我的群集.
nodetool status
只显示一个节点.
cassandra上的重要system.log是:
INFO [main] 2017-08-14 13:03:46,409 StorageService.java:553 - Cassandra version: 3.9
INFO [main] 2017-08-14 13:03:46,409 StorageService.java:554 - Thrift API version: 20.1.0
INFO [main] 2017-08-14 13:03:46,409 StorageService.java:555 - CQL supported versions: 3.4.2 (default: 3.4.2)
INFO [main] 2017-08-14 13:03:46,445 IndexSummaryManager.java:85 - Initializing index summary manager with a memory pool size of 198 MB and a resize interval of 60 minutes
INFO [main] 2017-08-14 13:03:46,459 MessagingService.java:570 - Starting Messaging Service on …
Run Code Online (Sandbox Code Playgroud) 通过ops-center和nodetool cfstats,我能够发现密钥空间表的一个分区是560 Mb,但无法找出哪个分区.我们如何追踪表的哪个分区是那么大?
如果我们向 C* 环添加了新节点,是否需要运行“nodetool cleanup”来清除现在已分配到其他地方的数据?或者在正常压缩期间无论如何都会发生这种情况?在正常压缩期间,C* 是否会删除不再属于该节点的数据,或者我们是否需要为此运行“nodetoool cleanup”?询问是因为“清理”需要永远并且在完成之前使节点崩溃。
如果我们需要运行“nodetool cleanup”,有没有办法找出哪些节点现在拥有它们不应再拥有的数据?(即现在属于新节点的数据,但仍然存在于旧节点上,因为没有人删除它。这是“nodetool cleanup”将删除的数据。)我们有 RF=3 和两个数据中心,每个数据中心它具有数据的完整副本。我假设我们需要在我们添加节点的数据中心的所有节点上运行清理,因为新节点上的每一行过去都在另一个节点(主节点)上,再加上其他两个节点上的两个副本(副本)。
此命令在使用 SizeTieredCompactionStrategy 和 DateTieredCompactionStrategy 的表上启动压缩过程。您可以指定用于压缩的键空间。
但是它对 DateTieredCompactionStrategy 有什么作用呢?
附带问题:什么是-s, --split-output
参数?解释为:Use -s to not create a single big file
。我很困惑 - 这不是目的nodetool compact
吗?