当集群中只有一个节点在运行时,意味着会有一个单点故障问题——没有冗余。幸运的是,我们只需要再启动一个节点即可防止数据丢失。

启动第二个节点

为了测试第二个节点启动后的情况,你可以在同一个目录内,完全依照启动第一个节点的方式来启动一个新节点(参考安装并运行 Elasticsearch)。多个节点可以共享同一个目录

当你在同一台机器上启动了第二个节点时,只要他和第一个节点有同样的cluster.name 配置,他就会自动发现集群并加入到其中。但是在不同机器上启动节点的时候,为了加入到同一集群,你需要配置一个可连接到的单播主机列表。详细信息请查看最好使用单播代替组播

如果启动了第二个节点,我们的集群将会如Figure 3, “拥有两个节点的集群——所有主分片和副本分片都已被分配”所示。
添加故障转移 - 图1
Figure 3. 拥有两个节点的集群——所有主分片和副本分片都已被分配

当第二个节点加入到集群后,3个副本分片将会分配到这个节点上——每个主分片对应一个副本分片。这意味着当集群内任何一个节点出现问题时,我们的数据都是完好无损。

所有新近被索引的文档都将会保存在主分片上,然后被并行的复制到对应的副本分片上。这就保证了我们既可以从主分片又可以从副本分片上获得文档。

cluster-health 现在展示的状态为green,这表示所有6个分片(包括3个主分片 和 3个副本分片)都在正常运行。

  1. {
  2. "cluster_name": "elasticsearch",
  3. "status": "green",
  4. "timed_out": false,
  5. "number_of_nodes": 2,
  6. "number_of_data_nodes": 2,
  7. "active_primary_shards": 3,
  8. "active_shards": 6,
  9. "relocating_shards": 0,
  10. "initializing_shards": 0,
  11. "unassigned_shards": 0,
  12. "delayed_unassigned_shards": 0,
  13. "number_of_pending_tasks": 0,
  14. "number_of_in_flight_fetch": 0,
  15. "task_max_waiting_in_queue_millis": 0,
  16. "active_shards_percent_as_number": 100
  17. }

集群status 值为green

我们的集群现在不仅仅是正常运行的,并且还处于始终可用的状态。