我们一直在向Cassandra集群添加节点时遇到麻烦,我的团队想知道是否有人能发现我们可能做错的任何事情,或者分享他们的最佳实践。这些节点以前是集群的成员,但已被删除,现在我们正在尝试再次添加它们。节点似乎已被适当删除:nodetool removenode成功完成,现有节点上的nodetool状态仅显示预期节点,而没有新节点。在尝试再次添加节点之前,群集可以使用一到两周。
在再次将这些节点添加到群集之前,所有数据目录都被清除干净。然后我们添加了第一个带有autobootstrap的新节点,它似乎很好地加入了集群,从加入状态移动到正常状态。到目前为止一直这么好......“描述集群”似乎表明一切都是一致的,我们即将对现有节点进行清理,然后在添加更多节点之前进行修复。
然而事情开始出错了。不知何故,这个新节点似乎知道其他先前删除的节点,显示它们已关闭且无法访问(这是真的,但现在关于它们是怎么做的?)。对新节点的读取请求经常失败,主要是因为找不到数据。为了避免灾难,新节点被淘汰并最终被暗杀。我的集群(和应用程序)再次感到高兴。
我们可能错过了添加(或删除节点)的前后步骤吗?我已经遵循了关于添加和删除Cassandra节点的许多其他问题的建议。在尝试再次将其添加为节点之前,我是否应该在机器上执行完整的osreload?
我很感谢你的建议。同样,这里的许多其他问题对我有很大帮助,但并不是这个特殊情况。
答案 0 :(得分:0)
我相信要调试此问题,请执行以下检查清单:
问题:
不知怎的,这个新节点之前似乎已经了解了另一个节点 删除节点,将它们显示为已关闭且无法访问(这是真的, 但现在关于他们的怎么样?)
cassandra.yaml
配置不旧,描述的问题是因为它知道上一个节点意味着Yaml未使用群集的当前节点列表进行更新。答案 1 :(得分:0)
经过一番争吵后,我的团队终于成功地将新节点添加到我们的Cassandra集群中。我想分享我们在这里学到的东西(而不是让人们挂起)。
最大的问题是system_auth表上的复制因子。添加新节点后,我们的申请客户端请求(可能是连接到新节点的请求)将失败,并显示'User userid1 has no SELECT permission on <table xyz.data> or any of its parents'
之类的错误。答案是将我们的用户和角色专门插入新节点的system_auth表中,使用复制器因子增加到覆盖所有节点。在添加新节点时,Cassandra不会立即复制system_auth表,这似乎很奇怪。
所以......要添加一个先前已添加和删除的节点,我们就是这样做的:
nodetool drain
nodetool decommission
和nodetool assassinate
正确停用。nodetool status
和nodetool describecluster
以确保结果一致nodetool cleanup
我们的部署代码也存在一些自身问题,这导致我们的节点无法与其他节点闲聊。它涉及访问TLS信任库的问题,因为我们加密每个节点之间的流量。显然,如果节点无法通信,那就非常糟糕。
感谢所有提供帮助的人,我希望我们的经验能够帮助他人。