我有兴趣加快引导集群和添加/删除节点的过程(当然,在节点删除的情况下,大部分时间都会耗费节点)。我在源代码中看到,作为种子的节点没有自举,因此在等待八卦稳定时不会睡30秒。因此,如果所有节点都被声明为种子,则创建群集的过程将快30秒。我的问题是这样好吗?这有什么缺点?在cassandra中是否存在隐藏的要求,我们至少有一个非种子节点来执行引导程序(如以下question的答案中所建议的那样)?我知道我可以通过修改RING_DELAY
来缩短/etc/cassandra/cassandra-env.sh
,但如果简单地将所有节点设置为种子会以某种方式更好或更快,那可能会更好。 (直观地说,将所有节点设置为种子必然存在缺点,因为它似乎可以严格改善启动时间。)
答案 0 :(得分:3)
好问题。不建议制作所有节点种子。您希望在关闭后出现的新节点和节点自动迁移正确的数据。 Bootstrapping就是这么做的。初始化没有数据的新群集时,请关闭自举。为了数据一致性,需要在其他时间启动引导。一个新的启动选项-Dcassandra.auto_bootstrap = false被添加到Cassandra 2.1:你启动Cassandra时可以选择将auto_bootstrap = false暂时生效,直到节点发生故障。当节点恢复时,默认的auto_bootstrap = true重新生效。在创建集群后,没有引导的人不太可能无限期地继续 - 不需要在每个节点上来回配置yaml。
在多个数据中心群集中,种子列表应包括每个数据中心的至少一个节点。要防止八卦通信中的分区,请在群集中的所有节点中使用相同的种子节点列表。这在节点第一次启动时至关重要。
这些建议在2.1 Cassandra文档的几个不同页面上提及:http://www.datastax.com/documentation/cassandra/2.1/cassandra/gettingStartedCassandraIntro.html。