gpt4 book ai didi

Cassandra 键空间不会传播到新添加的节点(在之前成功添加和删除之后)

转载 作者:行者123 更新时间:2023-12-03 14:30:19 25 4
gpt4 key购买 nike

我正在测试通过 4 节点集群轮换,以循环方式添加和删除节点,因此集群成员遵循以下重复序列

1 2 3
2 3
2 3 4
3 4
1 3 4
1 4
1 2 4
1 2
1 2 3
2 3
2 3 4
3 4
1 3 4
1 4
...

通过停止 cassandra、删除 /var/lib/cassandra/* 来执行节点添加,并重新启动 cassandra(使用相同的 cassandra.yaml 文件,其中将节点 1 和 2 列为种子)。节点删除是通过停止 cassandra 然后发出 nodetool removenode $nodeId 来执行的。从另一个节点。在所有情况下,直到前一个操作完成后才开始下一个操作。

上面的节点成员序列重复了几次,直到大约 4 次迭代后,我才执行“添加节点”操作以从节点 {1, 2} 集群转换到节点 {1, 2, 3} 集群。在这次迭代中,我的自定义键空间未能传播到节点 3。Nodetool 状态看起来很好:
$ nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 192.168.12.206 164.88 KB 256 66.2% 7018ef8a-af08-40e9-b3d3-065f4ba6eb0d rack1
UN 192.168.12.207 60.85 KB 256 63.2% ff18b636-6287-4c70-bf23-0a1a1814b864 rack1
UN 192.168.12.205 217.19 KB 256 70.6% 2bc38fa8-42a1-457f-84d7-35b3b46e1daa rack1

但是 cqlsh在节点 3 上不知道我的 key 空间。我试图运行 nodetool repair ,它似乎无限循环,同时在日志中喷出以下几个堆栈:
WARN [Thread-9781] 2014-09-16 19:34:30,081 IncomingTcpConnection.java (line 83) UnknownColumnFamilyException reading from socket; closing
org.apache.cassandra.db.UnknownColumnFamilyException: Couldn't find cfId=08768b1d-97a1-3528-8191-9acee7b08ef4
at org.apache.cassandra.db.ColumnFamilySerializer.deserializeCfId(ColumnFamilySerializer.java:178)
at org.apache.cassandra.db.ColumnFamilySerializer.deserialize(ColumnFamilySerializer.java:103)
at org.apache.cassandra.service.paxos.Commit$CommitSerializer.deserialize(Commit.java:145)
at org.apache.cassandra.service.paxos.Commit$CommitSerializer.deserialize(Commit.java:134)
at org.apache.cassandra.net.MessageIn.read(MessageIn.java:99)
at org.apache.cassandra.net.IncomingTcpConnection.receiveMessage(IncomingTcpConnection.java:153)
at org.apache.cassandra.net.IncomingTcpConnection.handleModernVersion(IncomingTcpConnection.java:130)
at org.apache.cassandra.net.IncomingTcpConnection.run(IncomingTcpConnection.java:74)
ERROR [Thread-9782] 2014-09-16 19:34:31,484 CassandraDaemon.java (line 199) Exception in thread Thread[Thread-9782,5,main]
java.lang.NullPointerException
at org.apache.cassandra.db.RangeSliceCommandSerializer.deserialize(RangeSliceCommand.java:247)
at org.apache.cassandra.db.RangeSliceCommandSerializer.deserialize(RangeSliceCommand.java:156)
at org.apache.cassandra.net.MessageIn.read(MessageIn.java:99)
at org.apache.cassandra.net.IncomingTcpConnection.receiveMessage(IncomingTcpConnection.java:153)
at org.apache.cassandra.net.IncomingTcpConnection.handleModernVersion(IncomingTcpConnection.java:130)
at org.apache.cassandra.net.IncomingTcpConnection.run(IncomingTcpConnection.java:74)

任何想法发生了什么以及如何解决这个问题(理想情况下,可靠的工作修复和避免首先进入这种状态的方法)?

最佳答案

如果存在模式版本不一致,您可以通过运行 nodetool describecluster 来判断

如果您在一个节点中看到不同的版本,请执行以下版本错误的节点:

停止 Cassandra 服务/进程,通常通过运行:nodetool drainsudo service cassandra stopkill <pid> .
在此过程结束时,提交日志目录 (/var/lib/cassandra/commitlog) 应仅包含一个小文件。

删除系统键空间内的 Schema* 和 Migration* sstables(/var/lib/cassandra/data/system,如果您使用默认值)。

再次启动 Cassandra 后,该节点会注意到缺失的信息并从其他节点之一拉入正确的模式。在版本 1.0.X 中,并且在一次应用架构之前一次更改。当它被应用时,节点可能会记录无法找到列族的消息,例如下面的消息。这些消息可以忽略。

ERROR [MutationStage:1] 2012-05-18 16:23:15,664 RowMutationVerbHandler.java (line 61) Error in row mutation
org.apache.cassandra.db.UnknownColumnFamilyException: Couldn't find cfId=1012
To confirm everything is on the same schema, verify that 'describe cluster;' only returns one schema version.

来源: https://wiki.apache.org/cassandra/FAQ

关于Cassandra 键空间不会传播到新添加的节点(在之前成功添加和删除之后),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25881382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com