solr安裝及詳解

###說明:
1. solr已內置jetty服務,默認端口8983,可以很方便的在web端操作,不用安裝tomcat。
2. 安裝完成後,建議使用谷歌瀏覽器訪問,有的瀏覽器可能會報錯。
3. 開放zk要用到的端口或關閉防火牆
4. solr自帶zk,一般不使用,而是自定義安裝

一.環境準備

二.安裝jdk

此處略

三.安裝zk

  • 上傳zookeeper-3.4.8.tar.gz到60.35的/home目錄下
  • 在/home下解壓zk
[root@app4 home]# tar -zxvf zookeeper-3.4.8.tar.gz
  • 1
  • 配置zk

    重命名配置文件爲zoo.cfg

    [root@app1 conf]# pwd
    /home/zookeeper-3.4.8/conf
    [root@app1 conf]# mv zoo_sample.cfg zoo.cfg

    修改zoo.cfg內容

    
    #存儲數據的目錄
    
    dataDir=/home/zookeeper-3.4.8/data/  
    
    #存儲日誌的目錄
    
    dataLogDir=/home/zookeeper-3.4.8/log/
    
    #分佈式配置,1、2、3對應每臺機器的myid
    
    server.1=192.168.60.35:28881:3881
    server.2=192.168.60.38:28881:3881
    server.3=192.168.60.41:28881:3881
  • 遠程拷貝zk目錄到另兩臺機器

    [root@app4 home]# scp -r zookeeper-3.4.8 [email protected]:/home/
    [root@app4 home]# scp -r zookeeper-3.4.8 [email protected]:/home/
  • 創建myid
    在dataDir目錄下創建myid,內容是zoo.cfg中配置的:60.35的myid內容爲1,60.38的myid內容爲2,60.41的myid內容爲3

    [root@app1 data]# pwd
    /home/zookeeper-3.4.8/data
    [root@app1 data]# vi myid
  • 每臺機器分別啓動zk

    [root@app4 zookeeper-3.4.8]# cd bin
    [root@app4 bin]# ./zkServer.sh start
    ZooKeeper JMX enabled by default
    Using config: /home/zookeeper-3.4.8/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
  • 查看zk啓動情況,查看端口和狀態

    如果啓動失敗,可以嘗試修改zoo.cfg中配置的端口,查看zk的bin目錄下的日誌zookeeper.out

60.35,結果是leader

[root@app1 bin]# netstat -anp|grep 28881
tcp        0      0 ::ffff:192.168.60.35:28881  :::*                        LISTEN      29970/java          
tcp        0      0 ::ffff:192.168.60.35:28881  ::ffff:192.168.60.41:33793  ESTABLISHED 29970/java          
tcp        0      0 ::ffff:192.168.60.35:28881  ::ffff:192.168.60.38:41405  ESTABLISHED 29970/java          
[root@app1 bin]# netstat -anp|grep 3881
tcp        0      0 ::ffff:192.168.60.35:3881   :::*                        LISTEN      29970/java          
tcp        0      0 ::ffff:192.168.60.35:3881   ::ffff:192.168.60.41:33566  ESTABLISHED 29970/java          
tcp        0      0 ::ffff:192.168.60.35:3881   ::ffff:192.168.60.38:46208  ESTABLISHED 29970/java          
[root@app1 bin]# 
[root@app1 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: leader

60.38,結果是follower

[root@app4 bin]# netstat -anp|grep 3881
tcp        0      0 ::ffff:192.168.60.38:3881   :::*                        LISTEN      21101/java          
tcp        0      0 ::ffff:192.168.60.38:3881   ::ffff:192.168.60.41:41058  ESTABLISHED 21101/java          
tcp        0      0 ::ffff:192.168.60.38:46208  ::ffff:192.168.60.35:3881   ESTABLISHED 21101/java          
[root@app4 bin]# netstat -anp|grep 28881
tcp        0      0 ::ffff:192.168.60.38:41405  ::ffff:192.168.60.35:28881  ESTABLISHED 21101/java 
[root@app4 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: follower

60.41,結果是follower

[root@localhost bin]# netstat -anp|grep 3881
tcp        0      0 ::ffff:192.168.60.41:3881   :::*                        LISTEN      22719/java          
tcp        0      0 ::ffff:192.168.60.41:33566  ::ffff:192.168.60.35:3881   ESTABLISHED 22719/java          
tcp        0      0 ::ffff:192.168.60.41:41058  ::ffff:192.168.60.38:3881   ESTABLISHED 22719/java          
[root@localhost bin]# netstat -anp|grep 28881
tcp        0      0 ::ffff:192.168.60.41:33793  ::ffff:192.168.60.35:28881  ESTABLISHED 22719/java          
[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper-3.4.8/bin/../conf/zoo.cfg
Mode: follower
[root@localhost bin]# 
  • zk常用命令
選項 含義 備註
啓動ZK服務 bin/zkServer.sh start  
查看ZK服務狀態 bin/zkServer.sh status  
停止ZK服務 bin/zkServer.sh stop  
重啓ZK服務 bin/zkServer.sh restart  
連接服務器 zkCli.sh -server 192.168.60.35:2181  
查看根目錄 ls /  
創建 testnode節點,關聯字符串”zz” create /zk/testnode “zz”  
查看節點內容 get /zk/testnode  
設置節點內容 set /zk/testnode abc  
刪除節點 delete /zk/testnode  
更多 連接zk後執行help查看  

四.安裝solr

  • 先解壓安裝腳本,從壓縮包中抽取出安裝腳本
tar xzf solr-5.5.1.tgz solr-5.5.1/bin/install_solr_service.sh --strip-components=2
  • 執行安裝腳本
./install_solr_service.sh solr-5.5.1.tgz -i /opt -d /var/solr -u root -s solr -p 8983
選項 含義
-i /opt 指定solr的安裝目錄,默認爲/opt(安裝時會生成指向安裝目錄的符號連接 /opt/solr )
-d /var/solr 指定寫文件的目錄,包括索引、日誌、初環境變量設置等,默認爲/var/solr
-u root 指定solr文件和運行進程的所屬用戶, 默認爲solr(安裝腳本自動創建了solr賬號)
-s solr solr服務的名稱, 默認爲solr
-p 8983 solr服務的監聽端口,默認爲8983

執行中會打印出solr的安裝信息

名稱 路徑
配置文件路徑 /etc/default/solr.in.sh
安裝目錄 /opt/solr
數據目錄 /var/solr/data

[root@app1 home]# ./install_solr_service.sh solr-5.5.1.tgz -i /opt -d /var/solr -u root -s solr -p 8983

Extracting solr-5.5.1.tgz to /opt


Installing symlink /opt/solr -> /opt/solr-5.5.1 ...


Installing /etc/init.d/solr script ...


Installing /etc/default/solr.in.sh ...
...
2016-10-14 05:33:58.549 INFO  (main) [   ] o.e.j.s.Server Started @2276ms                                  
Found 1 Solr nodes: 

Solr process 15538 running on port 8983
{
  "solr_home":"/var/solr/data",
  "version":"5.5.1 c08f17bca0d9cbf516874d13d221ab100e5b7d58 - anshum - 2016-04-30 13:28:18",
  "startTime":"2016-10-14T05:33:56.273Z",
  "uptime":"0 days, 0 hours, 0 minutes, 37 seconds",
  "memory":"50.2 MB (%10.2) of 490.7 MB"}

Service solr installed.
  • 修改solr的配置文件solr.in.sh,使用之前安裝的zk
ZK_HOST="192.168.60.35:2181,192.168.60.41:2181,192.168.60.38:2181"
  • 任意目錄下重啓solr服務,使zk配置生效
[root@app4 solr]service solr restart
  • 查看solr服務的狀態

    會打印出solr服務的端口、zk的配置和活動節點個數、collection的個數等

[root@solr3 opt]# service solr status

Found 1 Solr nodes: 

Solr process 23970 running on port 8983
{
  "solr_home":"/var/solr/data",
  "version":"5.5.1 c08f17bca0d9cbf516874d13d221ab100e5b7d58 - anshum - 2016-04-30 13:28:18",
  "startTime":"2016-10-16T01:39:57.381Z",
  "uptime":"0 days, 0 hours, 5 minutes, 37 seconds",
  "memory":"81.7 MB (%16.7) of 490.7 MB",
  "cloud":{
    "ZooKeeper":"192.168.60.35:2181,192.168.60.41:2181,192.168.60.38:2181",
    "liveNodes":"3",
    "collections":"0"}}

  • solr創建collection

    1.參數說明

    選項 含義 備註
    -s 表示分片個數  
    -rf 表示副本個數  
    -n 表示配置在zk上的文件名稱  
    -d 配置文件路徑  

    2.執行此命令時會打印出過程中實際執行的3個操作

    a)連接zk
    b)上傳solr的配置文件
    c)創建collection

    執行過程如下:

 [root@app4 solr]# pwd
/opt/solr
[root@app4 solr]# bin/solr create -c testcollection -d data_driven_schema_configs -s 3 -rf 2 -n myconf

Connecting to ZooKeeper at 192.168.60.35:2181,192.168.60.41:2181,192.168.60.38:2181 ...
Uploading /opt/solr/server/solr/configsets/data_driven_schema_configs/conf for config myconf to ZooKeeper at 192.168.60.35:2181,192.168.60.41:2181,192.168.60.38:2181

Creating new collection 'testcollection' using command:
http://localhost:8983/solr/admin/collections?action=CREATE&name=testcollection&numShards=3&replicationFactor=2&maxShardsPerNode=2&collection.configName=myconf

{
  "responseHeader":{
    "status":0,
    "QTime":26737},
  "success":{
    "192.168.60.38:8983_solr":{
      "responseHeader":{
        "status":0,
        "QTime":17222},
      "core":"testcollection_shard1_replica2"},
    "192.168.60.35:8983_solr":{
      "responseHeader":{
        "status":0,
        "QTime":17663},
      "core":"testcollection_shard2_replica1"},
    "192.168.60.41:8983_solr":{
      "responseHeader":{
        "status":0,
        "QTime":18110},
      "core":"testcollection_shard1_replica1"}}}
[root@app4 solr]# 
  • zk上查看節點是否創建成功

    在configs節點下有myconf,在collections節點下有testcollection

[root@app1 bin]# pwd
/home/zookeeper-3.4.8/bin
[root@app1 bin]# ./zkCli.sh
Connecting to localhost:2181
2016-10-16 09:35:55,384 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.8--1, built on 02/06/2016 03:18 GMT
2016-10-16 09:35:55,389 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=localhost.localdomain
2016-10-16 09:35:55,389 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.7.0_79
2016-10-16 09:35:55,393 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2016-10-16 09:35:55,393 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/usr/java/jdk1.7.0_79/jre
2016-10-16 09:35:55,393 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/home/zookeeper-3.4.8/bin/../build/classes:/home/zookeeper-3.4.8/bin/../build/lib/*.jar:/home/zookeeper-3.4.8/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/zookeeper-3.4.8/bin/../lib/slf4j-api-1.6.1.jar:/home/zookeeper-3.4.8/bin/../lib/netty-3.7.0.Final.jar:/home/zookeeper-3.4.8/bin/../lib/log4j-1.2.16.jar:/home/zookeeper-3.4.8/bin/../lib/jline-0.9.94.jar:/home/zookeeper-3.4.8/bin/../zookeeper-3.4.8.jar:/home/zookeeper-3.4.8/bin/../src/java/lib/*.jar:/home/zookeeper-3.4.8/bin/../conf:.:/usr/java/jdk1.7.0_79/lib:/usr/java/jdk1.7.0_79/jre/lib
2016-10-16 09:35:55,393 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2016-10-16 09:35:55,394 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2016-10-16 09:35:55,394 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
2016-10-16 09:35:55,394 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2016-10-16 09:35:55,394 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=amd64
2016-10-16 09:35:55,394 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=2.6.18-308.el5
2016-10-16 09:35:55,395 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root
2016-10-16 09:35:55,395 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
2016-10-16 09:35:55,395 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/home/zookeeper-3.4.8/bin
2016-10-16 09:35:55,397 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@514b9eeb
Welcome to ZooKeeper!
2016-10-16 09:35:55,438 [myid:] - INFO  [main-SendThread(localhost.localdomain:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server localhost.localdomain/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2016-10-16 09:35:55,446 [myid:] - INFO  [main-SendThread(localhost.localdomain:2181):ClientCnxn$SendThread@876] - Socket connection established to localhost.localdomain/127.0.0.1:2181, initiating session
JLine support is enabled
2016-10-16 09:35:55,459 [myid:] - INFO  [main-SendThread(localhost.localdomain:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server localhost.localdomain/127.0.0.1:2181, sessionid = 0x157caf5fb680004, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[configs, security.json, zookeeper, clusterstate.json, aliases.json, live_nodes, overseer, overseer_elect, collections]
[zk: localhost:2181(CONNECTED) 1] ls /collections
[testcollection]
[zk: localhost:2181(CONNECTED) 1] ls /configs
[myconf]
[zk: localhost:2181(CONNECTED) 2] ls /configs/myconf
[currency.xml, protwords.txt, synonyms.txt, elevate.xml, params.json, solrconfig.xml, lang, stopwords.txt, managed-schema]
[zk: localhost:2181(CONNECTED) 3] 
  • 查看solr日誌
[root@localhost logs]# pwd
/var/solr/logs
[root@localhost logs]# ll
total 156
-rw-r--r-- 1 root root 12518 Oct  9 16:21 solr-8983-console.log
-rw-r--r-- 1 root root  2290 Oct  9 16:20 solr_gc.log
-rw-r--r-- 1 root root 62869 Oct  9 16:20 solr_gc_log_20161009_1620
-rw-r--r-- 1 root root 13825 Oct  9 16:21 solr.log
-rw-r--r-- 1 root root 30771 Oct  9 16:20 solr_log_20161009_1620
[root@localhost logs]# 
  • 查看8983端口是否啓動
[root@app4 bin]# netstat -nplt|grep 8983
tcp        0      0 :::8983                     :::*                        LISTEN      23034/java          


安裝成功!

五.solr相關命令備註

  1. 創建collection

    [root@app4 solr]#bin/solr create -c testcollection -d data_driven_schema_configs -s 3 -rf 2 -n myconf
  2. 刪除collection

    curl 'http://192.168.60.35:8983/solr/admin/collections?action=DELETE&name=testcollection'
  3. 修改schema信息後更新

    • 所有配置上傳到zk
    zkcli.sh -zkhost 192.168.60.35:2181 -cmd upconfig -collection testcollection -confdir 
    /opt/solr/server/solr/configsets/data_driven_schema_configs/conf -confname myconf
    • 重新加載collection
    curl 'http://192.168.60.35:8983/solr/admin/collections?action=RELOAD&name=postcollection'
  4. solr配置文件schema的filed屬性說明
屬性 含義 備註
type 代表索引數據類型,我這裏將type全部設置爲string是爲了避免異常類型的數據導致索引建立失敗,正常情況下應該根據實際字段類型設置,比如整型字段設置爲int,更加有利於索引的建立和檢索;  
indexed 參數代表此字段是否建立索引,根據實際情況設置,建議不參與條件過濾的字段一律設置爲false;  
stored 參數代表是否存儲此字段的值,建議根據實際需求只將需要獲取值的字段設置爲true,以免浪費存儲,比如我們的場景只需要獲取rowkey,那麼只需把rowkey字段設置爲true即可,其他字段全部設置flase;  
required 參數代表此字段是否必需,如果數據源某個字段可能存在空值,那麼此屬性必需設置爲false,不然Solr會拋出異常;  
multiValued 參數代表此字段是否允許有多個值,通常都設置爲false,根據實際需求可設置爲true。  

六.solr相關概念備註

Collection:在SolrCloud集羣中邏輯意義上的完整的索引。它常常被劃分爲一個或多個Shard,它們使用相同的Config Set。如果Shard數超過一個,它就是分佈式索引,SolrCloud讓你通過Collection名稱引用它,而不需要關心分佈式檢索時需要使用的和Shard相關參數。

Core:也就是Solr Core,一個Solr中包含一個或者多個Solr Core,每個Solr Core可以獨立提供索引和查詢功能,每個Solr Core對應一個索引或者Collection的Shard,Solr Core的提出是爲了增加管理靈活性和共用資源。在SolrCloud中有個不同點是它使用的配置是在Zookeeper中的,傳統的Solr core的配置文件是在磁盤上的配置目錄中。

Leader:贏得選舉的Shard replicas。每個Shard有多個Replicas,這幾個Replicas需要選舉來確定一個Leader。選舉可以發生在任何時間,但是通常他們僅在某個Solr實例發生故障時纔會觸發。當索引documents時,SolrCloud會傳遞它們到此Shard對應的leader,leader再分發它們到全部Shard的replicas。

Replica:Shard的一個拷貝。每個Replica存在於Solr的一個Core中。一個命名爲“test”的collection以numShards=1創建,並且指定replicationFactor設置爲2,這會產生2個replicas,也就是對應會有2個Core,每個在不同的機器或者Solr實例。一個會被命名爲test_shard1_replica1,另一個命名爲test_shard1_replica2。它們中的一個會被選舉爲Leader。

Shard:Collection的邏輯分片。每個Shard被化成一個或者多個replicas,通過選舉確定哪個是Leader,保存索引時,會用哈希算法存儲到不同分片上。

Zookeeper: Zookeeper提供分佈式鎖功能,對SolrCloud是必須的。它處理Leader選舉。Solr可以以內嵌的Zookeeper運行,但是建議用獨立的,並且最好有3個以上的主機。

七.架構圖

  1. solr索引邏輯圖
  2. solr創建索引
  3. solr查詢索引
  4. solr的shard分裂

以上,安裝過程中碰到問題請留言!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章