群集中的Cassandra主机ID为空

byqmnocz  于 2022-09-27  发布在  Cassandra
关注(0)|答案(1)|浏览(211)

注意:我们在Cassandra 2.1.12.1047(DSE 4.8.4)集群中看到了这个问题,该集群有6个节点,跨越3个区域(每个区域2个)。
最近尝试更新集群上的架构时,我们发现更新失败。我们怀疑集群中的一个节点不接受更改。
在us-east-1中检查我们的一台服务器的system.peers表时,发现它有一个异常,它似乎有一个不存在的主机的完整条目。

cassandra@cqlsh> SELECT peer, host_id FROM system.peers WHERE peer IN ('54.158.22.187', '54.196.90.253');

peer          | host_id
---------------+--------------------------------------
54.158.22.187 | 8ebb7f2c-8f81-44af-814b-a537b84834e0

由于该主机不存在,我尝试使用nodetool removenode删除它,但失败了error: Cannot remove self -- StackTrace -- java.lang.UnsupportedOperationException: Cannot remove self
我们知道,.187服务器几周前因EC2问题突然终止。
我们曾多次尝试使服务器正常运行,但最终只终止了在system.peers中报告此.187主机的服务器,从其他服务器之一运行了一个nodetool removenode,然后使新服务器联机。
新服务器上线了,一个小时左右的时间内,似乎已经赶上了将其与其他服务器联机所需的积压活动(完全基于CPU监控的假设)。
然而,现在情况非常奇怪,因为当我们从集群中的任何服务器运行nodetool status时,system.peers表中报告的.187都会出现,而不是我们刚刚联机的新服务器。

$ nodetool status
Datacenter: DC1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address         Load       Tokens  Owns    Host ID                               Rack
DN  54.158.22.187   ?          256     ?       null                                  r1
Datacenter: cassandra-ap-southeast-1-A
======================================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address         Load       Tokens  Owns    Host ID                               Rack
UN  54.255.xx.xx    7.9 GB     256     ?       a0c45f3f-8479-4046-b3c0-b2dd19f07b87  ap-southeast-1a
UN  54.255.xx.xx    8.2 GB     256     ?       b91c5863-e1e1-4cb6-b9c1-0f24a33b4baf  ap-southeast-1b
Datacenter: cassandra-eu-west-1-A
=================================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address         Load       Tokens  Owns    Host ID                               Rack
UN  176.34.xx.xxx   8.51 GB    256     ?       30ff8d00-1ab6-4538-9c67-a49e9ad34672  eu-west-1b
UN  54.195.xx.xxx   8.4 GB     256     ?       f00dfb85-6099-40fa-9eaa-cf1dce2f0cd7  eu-west-1c
Datacenter: cassandra-us-east-1-A
=================================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address         Load       Tokens  Owns    Host ID                               Rack
UN  54.225.xx.xxx   8.17 GB    256     ?       0e0adf3d-4666-4aa4-ada7-4716e7c49ace  us-east-1e
UN  54.224.xx.xxx   3.66 GB    256     ?       1f9c6bef-e479-49e8-a1ea-b1d0d68257c7  us-east-1d

因为我不知道如何删除没有主机ID的节点,所以我很困惑。
我该怎么做才能摆脱这个无赖节点?
注意:这是describecluster的结果

$ nodetool describecluster
Cluster Information:
  Name: XXX
  Snitch: org.apache.cassandra.locator.DynamicEndpointSnitch
  Partitioner: org.apache.cassandra.dht.Murmur3Partitioner
  Schema versions:
    d140bc9b-134c-3dbe-929f-7a84c2cd4532: [54.255.17.28, 176.34.207.151, 54.225.11.249, 54.195.174.72, 54.224.182.94, 54.255.64.1]

    UNREACHABLE: [54.158.22.187]
egmofgnx

egmofgnx1#

我自己从来没有这样做过,但可能留给您的唯一事情就是assassinate端点。在Cassandra 2.2中,这是一个nodetool命令(nodetool assassinate)。但在该版本之前,唯一的方法是通过JMX。这是一个Gist with detailed instructions(由Justen Walker编写的指令和代码)。
先决条件
1.登录到现有群集活动节点
1.下载JMX Term
wget公司

$ wget -q -O jmxterm.jar
> http://downloads.sourceforge.net/cyclops-group/jmxterm-1.0-alpha-4-uber.jar
> curl

$ curl -s -o jmxterm.jar
 http://downloads.sourceforge.net/cyclops-group/jmxterm-1.0-alpha-4-uber.jar

1.运行jmxterm

$ java -jar ./jmxterm.jar
Welcome to JMX terminal. Type "help" for available commands.
$>

刺杀节点
错误节点示例:10.0.0.100

  • 连接到本地群集
  • 选择Gossiper MBean使用坏节点的ip运行unsafeAssassinateEndpoint
$>open
localhost:7199

# Connection to localhost:7199 is opened

$>bean org.apache.cassandra.net:type=Gossiper

# bean is set to org.apache.cassandra.net:type=Gossiper

$>run unsafeAssassinateEndpoint 10.0.0.100

# calling operation unsafeAssassinateEndpoint of mbean org.apache.cassandra.net:type=Gossiper

# operation returns: null

$>quit

更新20160308:

我从来没有自己做过
只是必须自己做。完全抬起头来,也跟着我自己的答案走。

20220925年更新:

从Cassandra 3.0开始,您只需运行以下命令即可完成此任务:

nodetool assassinate 10.0.0.100

相关问题