Linux下部署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/,如下圖所示:
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所在的目錄:
我們需要將這個solr.war解壓出來,例如:
如果是solr5.3.0那么我們是找不到solr.war的,但是我們能夠找到webapp,我們要做的就是將這個文件夾重命名為solr即可。
擁有文件夾solr之后我們需要做的事情是復制必要的jar包到這個文件夾中,具體的操作如下:找到如下的jar包
將這些jar包復制到
還需要復制log4j.properties文件到solr工程,具體目錄如下:
將log4j.properties復制到如下目錄:
2. 拷貝solr工程到tomcat
好吧,現在我們需要將solr這個文件放置到tomcat下,具體的目錄如下所示:
在linux上的目錄結構也是一樣的。最后solr要存放到tomcat目錄下即可:
3.建立solrhome文件夾
solrhome文件夾是用于存放solr的索引的,也就是全文檢索的數據。solrhome這個文件夾需要自己手動創建,位置可以任意并且名稱是任意的。例如:
你需要在solr5.3.0里邊找到以下兩個文件并復制到multicore文件夾下:
4.修改solr工程的web.xml
雖然放置索引的位置已經找到,但是需要告訴solr項目,solrhome的目錄在哪里,要不然它就找不到了。
linux下使用的代碼:
修改web.xml文件中的如下紅框中內容:
注意得要把注釋的給去除:
啟動tomcat輸入地址localhost:8080/solr,能夠看到如下的界面,說明你成功了:
如果你需要部署zookeeper集群那么你還需要進行如下的操作:
修改solrhome中的solr.xml文件,本文使用的路徑為:/solr/solrhome/multicore/。添加或修改solr.xml文件中的內容:
3. zookeeper
通過上面的介紹你已經成功將solr部署到tomcat上了,但是往往需要使用zookeeper配合solr一起使用。簡單講 zookeeper可以很好的管理solr服務器中的數據,可以讓多個solr服務器中的數據保持同步。分別在那三臺linux系統中部署 zookeeper。
1.修改zoo.cfg文件中的配置
找到zoo_sample.cfg文件,重命名為:zoo.cfg,或者復制一份然后重命名為zoo.cfg。
按照一下所示對zoo.cfg文件進行添加或修改參數:
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的數據,例如:
在data文件夾中建立myid文件。
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
首先需要在任意的目錄構建一個,比如:
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服務器的可以看到下圖。