1. 程式人生 > >Solr6與Zookeeper的SolrCloud叢集

Solr6與Zookeeper的SolrCloud叢集

為什麼多個Zookeeper例項

Zookeeper被用來監控你的叢集,啟動的多個Zookeeper中有一個被稱為overseer節點,負責總管你的叢集。如果這個節點掛了,其他的Zookeeper會被任命為overseer,繼續處理叢集事務。

為什麼多個Solr例項

叢集中至少擁有和shard一樣多的Solr例項充當leader,之後增加的Solr例項被充當為replica,如果有leader掛了之後,其replica會被任命為leader。一個collection下的所有leader中的資料應該不是一樣的,leader對應的replica中的資料與之是相同的。

偽叢集

基於Zookeeper,我們可以做到在單個例項版的Zookeeper例項執行SolrCloud;單機版(IP相同)多Zookeeper例項的偽SolrCloud叢集;真實的生產環境通常會包含多臺物理伺服器或是虛擬機器(IP不同),所以還有生產環境下的SolrCloud叢集。

Node和Core

對於SolrCloud,node可以理解為執行Solr的JVM程序,一般稱之為server。每一個 Solr core都可看作是一個node,任何的node都可以擁有一個Solr例項和其他資料。一個Solr core 主要是一些索引資料和文件欄位。一個Solr例項可以包含多個cores,他們彼此獨立。

叢集

叢集是一系列由Zookeeper管理的Solr nodes,如果你擁有一個叢集,你可以傳送請求到任何一個可達節點,你不會丟失資料。資料的更改可以被立刻感知到。
一般認為,一個Solr例項被註冊到Zookeeper之後,這個叢集就被建立了。

Leader和Replica

這個Leader有點像以前master-slave模式中的master,負責確保replica節點中的資料與其保持一致。每一個shard中都必須存在一個leader,而replica是可選的。如果shard的leader不可用,replica就會充當leader角色。

SolrCloud叢集分析

一個叢集可能擁有如下檢視:
這裡寫圖片描述

collection collection為core0,預設就是core的名稱。
shard 該core有兩個shard,分別是shard1,shard2,是預設的名字,如果再加一個就是shard3
leader 有兩個leader,8080埠和8081埠(黑色實心小圓點)
replica

有兩個replica,8082埠和8083埠(空心小圓圈)
在搭建SolrCloud的時候,我先啟動ZooKeeper,然後啟動了8080埠,並指定了引數-DnumShards=2,也就是叢集的shard是2,後臺報錯,因為此時叢集中shard是1。我啟動了8081埠,它會自動被新增到shard2,作為leader,此時叢集可以正常工作。我又啟動了8082埠,其配置與8081埠的配置完全相同,但是叢集中所有shard都有leader,因此就會被順序新增到shard1作為replica。再啟動8083埠,就會被順序新增到shard2作為replica。
8080埠必須被首先啟動,因為它配置了-DnumShards=2等資訊,其他的節點如果啟動順序不一樣,會有完全不同的分配情況。例如,在啟動8080埠以後,先啟動8083埠,那它就成了shard2的leader。