ZooKeeper 搭建 solr 集羣

什麼是 ZooKeeper ?

ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,它是集羣的管理者,監視着集羣中各個節點的狀態根據節點提交的反饋進行下一步合理操做。java

ZooKeeper 功能

  • 集羣管理 主從的管理、負載均衡、高可用的管理。集羣的入口。Zookeeper必須是集羣才能保證高可用。Zookeeper有選舉和投票的機制。集羣中至少應該有三個節點。web

  • 配置文件集中管理 搭建solr集羣時,須要把Solr的配置文件上傳zookeeper,讓zookeeper統一管理。每一個節點都到zookeeper上取配置文件。shell

集羣配置

  • zookeeper 3 臺
  • solr 4 臺

集羣搭建

搭建 zookeeper 集羣

  • 下載 ZooKeeperapache

  • 上傳 ZooKeeper 到服務器(sftp 或 lrzsz 工具)瀏覽器

  • 將 ZooKeeper 解壓tomcat

  • 把 zookeeper 向 /usr/local/solr-cloud 下複製三份,分別命名爲 zookeeper0一、zookeeper0二、zookeeper03。bash

  • 配置 zookeeper。服務器

    • 在 zookeeper01 目錄下建立一個 data 文件夾負載均衡

    • 在 data 目錄下建立一個 myid 文件分佈式

    • myid 的內容 爲 1。(02 對應 「2」,03 對應 「3」)。

    • zookeeper0二、03 以此類推。

    • 進入 conf ,將 zoo_sample.cfg 改名爲 zoo.cfg。

    • 修改 zoo.cfg

      • 將 dataDir= 指定爲剛建立的文件夾。
      • clientPort 指定爲不衝突的端口號(01:2181,02:2182,03:2183)
      • 添加以下內容:
        server.1=192.168.126.128: 2881:3881
        server.2=192.168.126.128: 2882:3882
        server.3=192.168.126.128: 2883:3883
        複製代碼

  • 啓動 zookeeper 使用 zookeeper 目錄中 bin 目錄下的 zkServer.sh,分別啓動三個 zookeeper。 啓動: ./zkServer.sh start 中止:./zkServer.sh stop 查看狀態 ./zkServer.sh status

搭建 solr 集羣

  • 安裝4個 tomcat,編輯 server.xml,修改端口 8081-8084。

  • 向 tomcat 部署 solr。(細節可參考以前的博客)

  • 爲每個 solr 實例建立 solrhome。

  • 編輯 web.xml ,將每一個 solr 實例和對應的 solrhome 關聯

<env-entry>
      <env-entry-name>solr/home</env-entry-name>
      <env-entry-value>/usr/local/solr-cloud/solrhome1</env-entry-value>
      <env-entry-type>java.lang.String</env-entry-type>
   </env-entry>
複製代碼
  • 編輯每一個 solrhome 下 solr.xml,指定對應 host 和 port
<solrcloud>
    <str name="host">${host:192.168.126.128}</str>
    <int name="hostPort">${jetty.port:8081}</int>
    <str name="hostContext">${hostContext:solr}</str>
    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>
    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>
  </solrcloud>
複製代碼
  • 上傳配置文件到 zookeeper. 須要使用/root/solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh命令上傳配置文件。(其餘 solrhome 的配置文件也能夠。)
./zkcli.sh -zkhost 192.168.126.128:2181,192.168.126.128:2182,192.168.126.128:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome1/collection1/conf -confname myconf
複製代碼
  • 查看是否上傳成功 使用 zookeeper bin 目錄下的 zkCli.sh 命令。
./zkCli.sh #便可鏈接上 zookeeper 集羣
複製代碼

而後就能夠查看集羣上文件

  • 告訴 solr 實例 zookeeper 的位置。須要編輯 tomcat catalina.sh,添加:
JAVA_OPTS="-DzkHost=192.168.126.128:2181,192.168.126.128:2182,192.168.126.128:2183"
複製代碼

每一個節點都要添加。

  • 分別啓動每一個 solr 實例

  • 集羣分片 將集羣分爲兩片,每片兩個副本。在瀏覽器地址欄訪問:

http://192.168.126.128:8081/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
複製代碼

獲得以下結果,則分片成功。

刷新 solr cloud 頁面。

  • 刪除不用的 collection1.
http://192.168.126.128:8081/solr/admin/collections?action=DELETE&name=collection1
複製代碼

使用 Solrj 鏈接集羣

@Test
	public void testSolrClout() throws Exception {
		//建立一個SolrServer對象
		CloudSolrServer solrServer = new CloudSolrServer("192.168.126.128:2181,192.168.126.128:2182,192.168.126.128:2183");
		//設置默認的collection
		solrServer.setDefaultCollection("collection2");
		//建立一個文檔對象
		SolrInputDocument document = new SolrInputDocument();
		document.addField("id", "test01");
		document.addField("item_title", "title1");
		//添加文檔
		solrServer.add(document);
		//提交
		solrServer.commit();
	}
複製代碼

Spring 中切換到集羣

<bean id ="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
	<constructor-arg name="zkHost" value="192.168.126.128:2181,192.168.126.128:2182,192.168.126.128:2183"/>
	<property name="defaultCollection" value="collection2"/>
</bean>
複製代碼
相關文章
相關標籤/搜索