【Apache Solr系列】SolrCloud+Tomcat7多核安裝配置

最近部署正式環境有這樣的一個需求,使用SolrCloud部署多核。網上找了很多資料都找不到,自己查了一些資料倒騰倒騰。結果真的被我倒騰出來了!

這裏會涉及到solr的分佈式部署,也就是SolrCloud,以及Solr Replication、Solr分片。

在現在這個時代,大數據往往我們必須面對的一大問題,當我們將足夠大的數據存放在一個單節點solr上面,這樣是會出現很多問題的,節點崩潰,數據丟失,查詢緩慢等等問題。其實solrCloud已經幫我們解決了這一系列問題。SolrCloud解決所有這些問題。有用於自動地分配兩個索引過程和查詢的支持,以及動物園管理員提供故障轉移和負載平衡。此外,每一個碎片還可以有額外的健壯性多個副本。

1、準備工作:

環境:

兩臺服務器

10.68.237.21 website1
10.68.237.22 website2

zookeeper安裝

zookeeper的安裝我們這邊使用的是3.4.5的版本。只安裝了一臺;

一下是zoo.cfg的配置,默認端口2181(zookeeper剛解壓的時候zoo.cfg是不存在的,我們需要cp一個zoo_sample.cfg並命名爲zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data/projects/clusters/zookeeper-3.4.5/data
dataLogDir=/data/projects/clusters/zookeeper-3.4.5/log
# the port at which the clients will connect
clientPort=2181
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=10.68.237.105:2888:3888
如果是多個節點的話,配置完zoo.cfg之後,通過scp進行服務器之間的複製即可;

scp命令示例:

scp -r localpath user@hostname:remotepath

各服務器之間拷貝完成之後,到每臺服務器上執行以下命令啓動zookeeper集羣

./zkServer.sh start

啓動完成之後使用status檢查集羣狀態

./zkServer.sh status

或者通過客戶端連接zkServer看是否能連接上

./zkClient.sh -server hostname:port

客戶端連接上去之後會可以進入查詢頁面

Connecting to hbase1:2181
2013-12-26 14:49:53,146 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/2012 17:52 GMT
2013-12-26 14:49:53,151 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=hbase1
2013-12-26 14:49:53,151 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.7.0_17
2013-12-26 14:49:53,152 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2013-12-26 14:49:53,152 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-7-oracle-1.7.0.17/jre
2013-12-26 14:49:53,153 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/data/projects/clusters/zookeeper-3.4.5/bin/../build/classes:/data/projects/clusters/zookeeper-3.4.5/bin/../build/lib/*.jar:/data/projects/clusters/zookeeper-3.4.5/bin/../lib/slf4j-log4j12-1.6.1.jar:/data/projects/clusters/zookeeper-3.4.5/bin/../lib/slf4j-api-1.6.1.jar:/data/projects/clusters/zookeeper-3.4.5/bin/../lib/netty-3.2.2.Final.jar:/data/projects/clusters/zookeeper-3.4.5/bin/../lib/log4j-1.2.15.jar:/data/projects/clusters/zookeeper-3.4.5/bin/../lib/jline-0.9.94.jar:/data/projects/clusters/zookeeper-3.4.5/bin/../zookeeper-3.4.5.jar:/data/projects/clusters/zookeeper-3.4.5/bin/../src/java/lib/*.jar:/data/projects/clusters/zookeeper-3.4.5/bin/../conf:.:/usr/lib/jvm/java-7-oracle/lib
2013-12-26 14:49:53,153 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2013-12-26 14:49:53,154 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2013-12-26 14:49:53,154 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
2013-12-26 14:49:53,155 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2013-12-26 14:49:53,155 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=amd64
2013-12-26 14:49:53,156 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=3.2.0-23-generic
2013-12-26 14:49:53,156 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=appadmin
2013-12-26 14:49:53,157 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/home/appadmin
2013-12-26 14:49:53,157 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/data/projects/clusters/zookeeper-3.4.5/bin
2013-12-26 14:49:53,159 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=hbase1:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@4f83e6d4
Welcome to ZooKeeper!
2013-12-26 14:49:53,189 [myid:] - INFO  [main-SendThread(hbase1:2181):ClientCnxn$SendThread@966] - Opening socket connection to server hbase1/10.68.237.105:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2013-12-26 14:49:53,197 [myid:] - INFO  [main-SendThread(hbase1:2181):ClientCnxn$SendThread@849] - Socket connection established to hbase1/10.68.237.105:2181, initiating session
[zk: hbase1:2181(CONNECTING) 0] 2013-12-26 14:49:53,242 [myid:] - INFO  [main-SendThread(hbase1:2181):ClientCnxn$SendThread@1207] - Session establishment complete on server hbase1/10.68.237.105:2181, sessionid = 0x1431d32bbc3107a, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: hbase1:2181(CONNECTED) 0] 
這樣zookeeper就算搭建好了!

如果需要更詳細的zookeeper集羣搭建步驟,可以查看我的博客:http://blog.csdn.net/weijonathan/article/details/8591117


接下來需要上傳solr配置文件到zookeeper

webadmin@website1:/data/tomcats/apprank.solr.com/bin$ java -classpath .:/data/projects/apprank.solr.com/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost hbase1:2181 -confdir /data/projects/apprank.solr.com/solr/googleplayrank/conf -confname googleplayconf

webadmin@website1:/data/tomcats/apprank.solr.com/bin$ java -classpath .:/data/projects/apprank.solr.com/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection googleplayrank -confname googleplayconf -zkhost hbase1:2181
多個colllection只需按照上面的配置多執行一次就OK,但是collection的路徑以及confname要區分出來哦

上傳後我們通過zookeeper客戶端查看上傳情況,連上zookeeper服務器後,我們可以執行help查看有哪些命令可以使用

[zk: hbase1:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
        connect host:port
        get path [watch]
        ls path [watch]
        set path data [version]
        rmr path
        delquota [-n|-b] path
        quit 
        printwatches on|off
        create [-s] [-e] path data acl
        stat path [watch]
        close 
        ls2 path [watch]
        history 
        listquota path
        setAcl path acl
        getAcl path
        sync path
        redo cmdno
        addauth scheme auth
        delete path [version]
        setquota -n|-b val path

這裏我們使用ls命令。

查看上傳情況

configs路徑

[zk: hbase1:2181(CONNECTED) 8] ls /configs
[appstoreapps, googleplayapps]
collections路徑

[zk: hbase1:2181(CONNECTED) 0] ls /collections
[appstoreapps, googleplayapps]


執行tomcat 項目拷貝

scp -r /data/projects/apprank.solr.com/* webadmin@website2:/data/projects/apprank.solr.com

啓動各個服務器上的tomcat。查看solr web端。

我們可以看到在左側出現了一個Cloud菜單。我們提交到zookeeper的文件可以通過菜單裏面的Tree菜單查看到



結果發現,122的兩個節點上出現了Recovering現象。這個搞了很久都沒搞出來,所以換了一種方式進行創建。直接創建shard方式。

以下先介紹下solr在zookeeper底下生成的文件的作用,之後在介紹寫建立shard方法


啓動tomcat之後我們再查看zookeeper服務器的列表情況

[zk: hbase1:2181(CONNECTED) 0] ls /
[configs, hbase, zookeeper, clusterstate.json, aliases.json, live_nodes, overseer, overseer_elect, collections]
可以看到這邊多了好幾個文件夾和文件

  • clusterstate.json-包含了solrCloud的服務器信息,可以使用get命令查看
[zk: hbase1:2181(CONNECTED) 3] get /clusterstate.json
{
  "appstoreapps":{
    "shards":{"shard1":{
        "range":null,
        "state":"active",
        "parent":null,
        "replicas":{
          "core_node1":{
            "state":"active",
            "base_url":"http://10.68.237.121:8983/solr",
            "core":"appstoreapps",
            "node_name":"10.68.237.121:8983_solr",
            "leader":"true"},
          "core_node2":{
            "state":"recovering",
            "base_url":"http://10.68.237.122:8983/solr",
            "core":"appstoreapps",
            "node_name":"10.68.237.122:8983_solr"}}}},
    "router":{"name":"implicit"}},
  "googleplayapps":{
    "shards":{"shard1":{
        "range":null,
        "state":"active",
        "parent":null,
        "replicas":{
          "core_node1":{
            "state":"active",
            "base_url":"http://10.68.237.121:8983/solr",
            "core":"googleplayapps",
            "node_name":"10.68.237.121:8983_solr",
            "leader":"true"},
          "core_node2":{
            "state":"recovering",
            "base_url":"http://10.68.237.122:8983/solr",
            "core":"googleplayapps",
            "node_name":"10.68.237.122:8983_solr"}}}},
    "router":{"name":"implicit"}}}
cZxid = 0x6da2
ctime = Thu Dec 26 15:12:30 CST 2013
mZxid = 0x6e28
mtime = Thu Dec 26 15:15:06 CST 2013
pZxid = 0x6da2
cversion = 0
dataVersion = 11
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1217
numChildren = 0
  • /live_nodes-SolrCloud節點存活情況
[zk: hbase1:2181(CONNECTED) 1] ls /live_nodes
[10.68.237.121:8983_solr, 10.68.237.122:8983_solr]
  • /overseer-elect 查看監控狀態
[zk: hbase1:2181(CONNECTED) 4] ls /overseer_elect
[election, leader]
  • /overseer-用於存放工作隊列目錄
[zk: hbase1:2181(CONNECTED) 1] ls /overseer
[queue, queue-work, collection-queue-work]
  • /aliases.json-看樣子貌似是存放別名的,但是好像沒看到什麼東西
[zk: hbase1:2181(CONNECTED) 1] get /aliases.json
null
cZxid = 0x6da3
ctime = Thu Dec 26 15:12:30 CST 2013
mZxid = 0x6da3
mtime = Thu Dec 26 15:12:30 CST 2013
pZxid = 0x6da3
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 0


前面配置一直有點問題,所以使用rest重新進行collection(core) shard 創建,這裏我們直接調用solr的REST接口,這裏使用CREATE進行創建

curl 'http://website1:8081/admin/collections?action=CREATE&name=appstoreapps&numShards=2&replicationFactor=1'

使用這個方法,直接調用上面的接口,然後再將我們對應的config文件上傳到zookeeper後,重啓即可看到我們的shard成功了。提交到zookeeper的方法在前面已經提到過,不知道的可以拉到前面查看提交方式。

看下我們這樣創建的結果

多核可以在我們的tomcat底下建立多個collection(core)目錄,修改其core.properties配置,修改爲對應的collection名稱。再按上面的rest步驟即可!

最後我們來查看下我最終的配置結果。


由於我這邊Replication還沒配置好,所以會有一個Recovering。後續會把replication配置成功的響應方法以博文方式發佈!

SolrCloud+Tomcat7的多核安裝配置就到這裏。

如果想知道具體的solr REST接口操作,可以查看以下文檔

http://www.wxdl.cn/index/solrcloud.html

其他參考文獻

http://blog.csdn.net/shirdrn/article/details/9718387

http://wiki.apache.org/solr/SolrCloud#Example_C:_Two_shard_cluster_with_shard_replicas_and_zookeeper_ensemble






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