当每个节点都宕机时,如何恢复 cockroachdb 集群?

How do you recover a cockroachdb cluster when every nodes goes down?

我有一个由 3 个节点组成的 cockroachdb 集群,它们位于 3 台不同的机器上,由 Docker Swarm 编排。

出于与 cockroachdb 无关的 link 原因,我的整个集群都崩溃了,每个 cockroachdb 容器都停止了。现在,我需要恢复并重新启动集群。

问题是,在启动过程中,cockroach 想要在启动之前到达其他节点:

* WARNING: The server appears to be unable to contact the other nodes in the cluster. Please try:
* 
* - starting the other nodes, if you haven't already;
* - double-checking that the '--join' and '--listen'/'--advertise' flags are set up correctly;
* - running the 'cockroach init' command if you are trying to initialize a new cluster.

问题是,在没有其他可用容器的情况下如何启动第一个容器?还是我需要启动一个新集群?

蟑螂节点需要能够相互联系才能再次启动。在大多数情况下,节点的地址不会改变,节点会自动尝试以前看到的地址(这与 cockroach 数据一起保存到本地磁盘)。 如果地址在两次调用之间发生了变化,您需要将新地址告知节点。

给定三个节点,您可以指定 --join 上的所有节点地址:

# on node 1:
cockroach <flags> --join=node1address,node2address,node3address
# on node 2:
cockroach <flags> --join=node1address,node2address,node3address
# on node 3:
cockroach <flags> --join=node1address,node2address,node3address

您还可以指定任何子集(例如:--join=node1address 在所有节点上,或所有其他节点的地址)。

一定不要再运行init了。它只需要初始化第一个节点,并且在集群的生命周期中只完成一次。