Linux下部署solrCloud

jopen 9年前發布 | 14K 次閱讀 Solr 搜索引擎 SolrCloud

 

1. 準備工作

這里我只是把我的師兄教我的關于Solrcloud搭建的過程,以及需要注意的地方文檔化了。感謝他教會了我很多。

1.機子IP

三臺安裝linux系統的機子的IP地址為:

172.24.133.11

172.24.133.21

172.24.133.31

2.軟件版本

使用的tomcat的版本是:apache-tomcat-8.0.26

使用的solr的版本是:solr-5.3.0

使用的zookeeper的版本是:zookeeper-3.4.6

3.軟件解壓目錄

tomcat、zookeeper已經solr的解壓后放置的目錄為:/usr/local/apache/,如下圖所示:

Linux下部署solrCloud

2. solr部署到tomcat

1.找到solr工程

solr實際上是一個web服務,所以我們需要將solr部署到tomcat下。我們需要找到solr.war這個文件。solr不同版本之間solr.war的目錄是不同的。為了方便展示目錄,使用win7下的目錄結構,相對路徑和linux上是一樣的。

在win7的D盤目錄下有solr5.2.1的解壓包,如下圖是solr5.2.1下solr.war所在的目錄:

Linux下部署solrCloud

我們需要將這個solr.war解壓出來,例如:

Linux下部署solrCloud

如果是solr5.3.0那么我們是找不到solr.war的,但是我們能夠找到webapp,我們要做的就是將這個文件夾重命名為solr即可。

擁有文件夾solr之后我們需要做的事情是復制必要的jar包到這個文件夾中,具體的操作如下:找到如下的jar包

Linux下部署solrCloud

將這些jar包復制到

Linux下部署solrCloud

還需要復制log4j.properties文件到solr工程,具體目錄如下:

Linux下部署solrCloud

將log4j.properties復制到如下目錄:

Linux下部署solrCloud

2. 拷貝solr工程到tomcat

好吧,現在我們需要將solr這個文件放置到tomcat下,具體的目錄如下所示:

Linux下部署solrCloud

在linux上的目錄結構也是一樣的。最后solr要存放到tomcat目錄下即可:

Linux下部署solrCloud

3.建立solrhome文件夾

solrhome文件夾是用于存放solr的索引的,也就是全文檢索的數據。solrhome這個文件夾需要自己手動創建,位置可以任意并且名稱是任意的。例如:

Linux下部署solrCloud

你需要在solr5.3.0里邊找到以下兩個文件并復制到multicore文件夾下:

Linux下部署solrCloud

Linux下部署solrCloud

4.修改solr工程的web.xml

雖然放置索引的位置已經找到,但是需要告訴solr項目,solrhome的目錄在哪里,要不然它就找不到了。

Linux下部署solrCloud

linux下使用的代碼:

Linux下部署solrCloud

修改web.xml文件中的如下紅框中內容:

Linux下部署solrCloud

注意得要把注釋的給去除:

Linux下部署solrCloud

啟動tomcat輸入地址localhost:8080/solr,能夠看到如下的界面,說明你成功了:

Linux下部署solrCloud

如果你需要部署zookeeper集群那么你還需要進行如下的操作:

修改solrhome中的solr.xml文件,本文使用的路徑為:/solr/solrhome/multicore/。添加或修改solr.xml文件中的內容:

Linux下部署solrCloud

3. zookeeper

通過上面的介紹你已經成功將solr部署到tomcat上了,但是往往需要使用zookeeper配合solr一起使用。簡單講 zookeeper可以很好的管理solr服務器中的數據,可以讓多個solr服務器中的數據保持同步。分別在那三臺linux系統中部署 zookeeper。

1.修改zoo.cfg文件中的配置

找到zoo_sample.cfg文件,重命名為:zoo.cfg,或者復制一份然后重命名為zoo.cfg。

Linux下部署solrCloud

按照一下所示對zoo.cfg文件進行添加或修改參數:

Linux下部署solrCloud

server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號服務器,最好是使用本機ip地址的后幾位數字,這樣不易重復;B 是這個服務器的 ip 地址;C 表示的是這個服務器與集群中的 Leader 服務器交換信息的端口;D 表示的是萬一集群中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通信的端口。如果是偽集群的配置方式,由于 B 都是一樣,所以不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號。

initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集群中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度后 Zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗。總的時間長度就是 10*2000=20 秒。syncLimit:這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 5*2000=10 秒。

tickTime:這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每隔tickTime 時間就會發送一個心跳。dataDir:顧名思義就是 Zookeeper 保存數據的目錄,data目錄得要自己創建,具體操作看下一步

clientPort:這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。

2. 建立data目錄

建立data目錄用于存放zookeeper的數據,例如:

Linux下部署solrCloud

在data文件夾中建立myid文件。

Linux下部署solrCloud

myid中的值必須與server.A=B:C:D 中的A是一樣的。根據zoo.cfg中胡配置信息。

server.11=172.24.133.11:6888:8888

server.21=172.24.133.21:6888:8888

server.31=172.24.133.31:6888:8888

myid在172.24.133.11這個機子上的值為11;myid在172.24.133.21這個機子上的值為21;myid在172.24.133.31這個機子上的值為31

實際上zookeeper集群的配置也只有myid中的內容是不一樣的,它的作用就是用于表示不同的zookeeper的機子。

4. 上傳schema.xml和solrconfig.xml

首先需要在任意的目錄構建一個,比如:

Linux下部署solrCloud

schema.xml里邊定義了solr服務器中的索引;solrconfig.xml則是solr的相關配置;其他的文件里邊是沒有內容的,只要創建就好。

上傳E:\111\schemaless_search\conf中內容到/ configs / solrcloud /schemaless_search。

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

// zookeeperIP地址和端口號

String zkServerAddress = "127.0.0.1:2181";

String schemeless = "schemaless_search";

// E:\111\schemaless_search\conf

File config = new File("E:/111/" + schemeless + "/conf");

System.out.println(config.exists());

SolrZkClient client = new SolrZkClient(zkServerAddress, 1000, 1000, new OnReconnect() {

@Override

public void command() {}

});

ZkConfigManager configManager = new ZkConfigManager(client);

// 默認添加路徑:/configs 云端目錄為:/configs/solrcloud/schemaless_search

configManager.uploadConfigDir(Paths.get("E:/111/" + schemeless + "/conf"), "solrcloud/" + schemeless);

client.close();

System.out.println("結束");

}

使索引生效:

public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    String collectionName = "schemaless_search";
    // solr服務器的IP
    CloudSolrClient client = new CloudSolrClient("172.24.133.13");
    CollectionAdminRequest.Delete delete = new CollectionAdminRequest.Delete();
    // 如果存在schemaless_search文件夾則先刪除
    delete.setCollectionName(collectionName);
    CollectionAdminResponse response;
    try {
      response = delete.process(client);
      System.out.println(response);
    } catch (Exception e) {
      e.printStackTrace();
    }
    CollectionAdminRequest.Create create = new CollectionAdminRequest.Create();
    create.setCollectionName(collectionName);
    // 目錄/configs/solrcloud/schemaless_search下找到文件并加載
    create.setConfigName("solrcloud/" + collectionName);
    create.setNumShards(2);
    create.setMaxShardsPerNode(2);
    create.setReplicationFactor(2);
    response = create.process(client);
    client.close();
  }

到目前為止所有的配置都完成了,訪問solr服務器的可以看到下圖。

Linux下部署solrCloud

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!