Cassandra:节点添加/删除是否要求所有集群节点都存在?
当添加新节点时,由于新令牌的均匀分布, 环的当前节点应将数据迁移到此新节点 那么,它是否要求所有节点都存在?如果不是,则如果某些节点 如果出现故障,则将错过这些部件的数据迁移,以及 什么时候修理?那些节点什么时候回来 类似地,删除节点会将其数据迁移到其他节点,因此 似乎所有其他节点都必须存在,否则它将丢失Cassandra:节点添加/删除是否要求所有集群节点都存在?,cassandra,Cassandra,当添加新节点时,由于新令牌的均匀分布, 环的当前节点应将数据迁移到此新节点 那么,它是否要求所有节点都存在?如果不是,则如果某些节点 如果出现故障,则将错过这些部件的数据迁移,以及 什么时候修理?那些节点什么时候回来 类似地,删除节点会将其数据迁移到其他节点,因此 似乎所有其他节点都必须存在,否则它将丢失 数据?Cassandra要求所有节点都存在。当另一个节点关闭时,我尝试添加一个节点,但收到以下错误: Exception (java.lang.RuntimeException) encoun
数据?Cassandra要求所有节点都存在。当另一个节点关闭时,我尝试添加一个节点,但收到以下错误:
Exception (java.lang.RuntimeException) encountered during startup: A node required to move the data consistently is down (/172.17.0.2). If you wish to move the data from a potentially inconsistent replica, restart the node with -Dcassandra.consistent.rangemovement=false
java.lang.RuntimeException: A node required to move the data consistently is down (/172.17.0.2). If you wish to move the data from a potentially inconsistent replica, restart the node with -Dcassandra.consistent.rangemovement=false
at org.apache.cassandra.dht.RangeStreamer.getAllRangesWithStrictSourcesFor(RangeStreamer.java:275)
at org.apache.cassandra.dht.RangeStreamer.addRanges(RangeStreamer.java:158)
at org.apache.cassandra.dht.BootStrapper.bootstrap(BootStrapper.java:83)
at org.apache.cassandra.service.StorageService.bootstrap(StorageService.java:1212)
at org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:891)
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:657)
at org.apache.cassandra.service.StorageService.initServer(StorageService.java:570)
at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:346)
at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:569)
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:697)
ERROR 09:53:37 Exception encountered during startup
当我尝试在不同的dc中添加节点时,也会发生同样的情况
至于删除节点。Decomission仅在所有副本都已启动时才起作用。解算将首先将所有数据流传输到新副本,如果流传输失败,则解算失败
$ nodetool decommission
error: Stream failed
-- StackTrace --
org.apache.cassandra.streaming.StreamException: Stream failed
...
您仍然可以通过关闭节点并执行nodetool removenode
来强制删除。这不会流式传输数据,但会从集群中删除节点。小心使用
如果decomission或removenode都不起作用,也会有nodetool assasinate。谢谢您的信息!如果节点添加/删除要求其他节点处于活动状态,那么集群的可行性似乎很差。“你这样认为吗?”金洛说,其实不是。只要Cassandra中的节点停机,集群就会处于不良状态。要安全地添加或删除节点,集群需要在所有节点都启动的情况下处于良好状态。但是,正如有
removenode
命令用于在集群处于坏状态时删除节点一样,也有方法添加处于坏状态的节点。如果您只关闭了一个节点,并且希望替换该节点,则可以将cassandra-env.sh中的-Dcassandra.replace_address
变量设置为false。您还可以添加一个节点,而无需流式传输任何数据(但请注意,此节点仍将接受请求)。之后,您必须运行“修复”。但这没有任何意义,因为在修复完成之前,这将危及一致性auto_bootstrap
仅在初始化没有数据的新集群时使用。当然,根据您的用例,它可能有其他用途。