docker環境下solrcloud+zookeeper集群部署教程


 

前言:兩個月前的16年11月份完成的配置,使用的solr6.1和zookeeper3.4,剛剛寫成blog,目前版本可能有小版本的變化。

 

本例完成結果為:在docker環境下部署solrcloud集群,同時使用zookeeper集群做配置管理。

 

一、部署zookeeper集群

1、加載images,(兩種方式:A下載offical版本zookeeper,B加載導出的tar包。A方式為新部署的情況,B方式為從測試環境部署到正式環境的情況

A下載

#下載

docker pull zookeeper

#重命名

docker tag 31z4/zookeeper zookeeper

 

B加載tar包

#源服務器上導出tar包

#docker save zookeeper:latest > /home/qdadmin/docker/zookeeper.tar

#目標服務器上拷貝並且導入

scp qdadmin@10.77.9.215:/home/qdadmin/docker/zookeeper.tar /home/qdadmin/docker/

docker load  < /home/qdadmin/docker/zookeeper.tar

 

#檢查,見到zookeeper

docker images

 

 

2、啟動zookeeper集群

(步驟說明:

首先設置網絡,由於zk需要配置ZOO_SERVERS讓各zk之間相互知道ip,需要明確的配置ip地址,但是docker宿主機重啟或者docker升級重啟后,會自動重啟container,此時會重新動態分配ip,導致zk集群失效,因此需要對zk設置固定ip。在此我想到的辦法是給zk設置ip段為172.18.0.x,這樣重啟后ip肯定是從172.18.0.2開始的.2.3.4,相當於變相的固定了ip

(參數解釋:
--env ZOO_MY_ID=1設置環境變量ZOO_MY_ID,用於配置集群內編號;
--env "ZOO_SERVERS=server.1=172.18.0.2:2888:3888 server.2=172.18.0.3:2888:3888 server.3=172.18.0.4:2888:3888"設置環境變量ZOO_SERVERS,用於配置集群內服務器ip及選舉leader所用端口;
--net zknet 設置網絡模式,設置固定ip
-v 設置掛載數據目錄,否則會自動生成本地目錄,路徑在/var/lib/docker下

 

docker network create --subnet=172.18.0.0/16 zknet
docker network ls

docker run --name qd-zookeeper1 --restart=always --net zknet --ip 172.18.0.2 -d -p 2191:2181 -m 4096m --env ZOO_MY_ID=1 --env "ZOO_SERVERS=server.1=172.18.0.2:2888:3888 server.2=172.18.0.3:2888:3888 server.3=172.18.0.4:2888:3888" -v /home/docker/zookeeper/data1:/data -v /home/docker/zookeeper/datalog1:/datalog zookeeper:latest
docker run --name qd-zookeeper2 --restart=always --net zknet --ip 172.18.0.3 -d -p 2192:2181 -m 4096m --env ZOO_MY_ID=2 --env "ZOO_SERVERS=server.1=172.18.0.2:2888:3888 server.2=172.18.0.3:2888:3888 server.3=172.18.0.4:2888:3888" -v /home/docker/zookeeper/data2:/data -v /home/docker/zookeeper/datalog2:/datalog zookeeper:latest
docker run --name qd-zookeeper3 --restart=always --net zknet --ip 172.18.0.4 -d -p 2193:2181 -m 4096m --env ZOO_MY_ID=3 --env "ZOO_SERVERS=server.1=172.18.0.2:2888:3888 server.2=172.18.0.3:2888:3888 server.3=172.18.0.4:2888:3888" -v /home/docker/zookeeper/data3:/data -v /home/docker/zookeeper/datalog3:/datalog zookeeper:latest

#檢查
docker ps

 

 

 

4、安裝后驗證,查看zookeeper狀態

 

#進入服務器命令行

docker exec -it qd-zookeeper2 /bin/bash

#查看zkServer運行狀態,Mode為follower或leader

bin/zkServer.sh status

 

 

 

#測試端口是否開通

echo stat|nc localhost 2181

#查看環境變量是否正確配置,(與啟動命令中env ZOO_SERVERS參數配置相同)

cat /conf/zoo.cfg

 

 

#退出

exit

 

 

 

二、部署solr集群

solr設計:將dockersolr實例的數據存儲目錄映射到宿主機上,以/home/docker/solr/zksolrdata文件夾為根目錄,每個dockersolr實例使用一個node[x]文件夾作為數據存儲目錄。

 

1、准備外部配置文件(以zksolrdata文件夾為根目錄,拷貝solr實例的conf文件夾,創建每個node所需文件夾

#將solr實例的conf文件夾拷貝到zksolrdata文件夾下(solr實例的conf文件用原有的即可,無需改動)

mkdir -p /home/docker/solr/zksolrdata

cp -r /home/docker/solr/qdfs/conf /home/docker/solr/zksolrdata/qdfsconf

 

#創建每個node所需文件夾,每個文件夾下必須有solr.xml文件(solr.xml可從solr安裝包solr/server/solr/solr.xml路徑獲取,我是單獨提出來放在了本地的一個服務器上

scp qdadmin@10.77.9.215:/home/qdadmin/solr.xml /home/qdadmin/

 

#創建node文件夾並拷貝solr.xml

mkdir -p /home/docker/solr/zksolrdata/nodex && cp /home/qdadmin/solr.xml "$_"

mkdir -p /home/docker/solr/zksolrdata/node1 && cp /home/docker/solr/zksolrdata/nodex/* "$_"

mkdir -p /home/docker/solr/zksolrdata/node2 && cp /home/docker/solr/zksolrdata/nodex/* "$_"

mkdir -p /home/docker/solr/zksolrdata/node3 && cp /home/docker/solr/zksolrdata/nodex/* "$_"

 

#驗證solr.xml文件存在

ls /home/docker/solr/zksolrdata/node3

 

 

 

 

2、使用導出的tar包,啟動solr:chinese。(此處為load一個images,或者可以pull下載一個,或者已存在此image則跳過此步

docker load  < /home/qdadmin/docker/solr.tar

若從新下載offical版本solr,需要進行一系列配置,包括修改並發訪問數(solrConfig.xml)、配置中文分詞器jar包。

 

3、啟動solr集群

(參數解釋:

-v /home/docker/solr/zksolrdata:/opt/solrdata設置文件夾映射,指向根目錄;

-c為solr內部命令,使用solrcloud模式啟動

-z $currentIp:2191,$currentIp:2192,$currentIp:2193/solr 為solr內部命令,設置zookeeper服務器,1-n個地址為zookeeper集群中每一個服務器的地址,“/solr”為zk的后綴分類

-s /opt/solrdata/node3 為solr內部命令,設置solrhome地址,分別指向每個含solr.xml的node的文件夾

 

#臨時變量,當前服務器ip,注意修改!

export currentIp="10.77.10.13"

#執行命令,啟動container

docker rm -f qd-solrcloud1

docker rm -f qd-solrcloud2

docker rm -f qd-solrcloud3

docker run --name qd-solrcloud1 --restart=always -d -p 8991:8983 -m 4096m -v /home/docker/solr/zksolrdata:/opt/solrdata solr:chinese -c -z $currentIp:2191,$currentIp:2192,$currentIp:2193/solr -s /opt/solrdata/node1

docker run --name qd-solrcloud2 --restart=always -d -p 8992:8983 -m 4096m -v /home/docker/solr/zksolrdata:/opt/solrdata solr:chinese -c -z $currentIp:2191,$currentIp:2192,$currentIp:2193/solr -s /opt/solrdata/node2

docker run --name qd-solrcloud3 --restart=always -d -p 8993:8983 -m 4096m -v /home/docker/solr/zksolrdata:/opt/solrdata solr:chinese -c -z $currentIp:2191,$currentIp:2192,$currentIp:2193/solr -s /opt/solrdata/node3

 

 

 

4、上傳conf到zookeeper

 

docker exec -it qd-solrcloud1 /opt/solr/server/scripts/cloud-scripts/zkcli.sh -zkhost $currentIp:2191,$currentIp:2192,$currentIp:2193/solr -cmd upconfig -confdir /opt/solrdata/qdfsconf -confname qdfsconf

 

 

#需要重啟生效

docker restart qd-solrcloud1

docker restart qd-solrcloud2

docker restart qd-solrcloud3

 

 

#檢查配置

curl 'http://'$currentIp':8993/solr/admin/configs?action=LIST'

 

 

 

5、新建collection

(參數解釋:

name=qdfs 創建collection名為qdfs;

collection.configName=qdfsconf 使用configName為qdfsconf;

maxShardsPerNode=10 每個服務器可擁有分片的數量;

numShards=3 此collection的分片數量,router.name=implicit情況下無效;

replicationFactor=2 每個分片的復制數;

router.name=implicit 設置路由方式為implicit,此方式可動態添加分片,但存入數據時需要手動指定想存入的分片名,另一個為CompositeID不可添加分片,只能使用分裂分片方式增加分片,存入數據時根據id值平均分配到每個分片;

shards=shard_default,shard_H2000,shard_LOCALIZEDMANAGE 設置每個分片的名字,router.name=implicit情況下有效

 

curl  'http://'$currentIp':8991/solr/admin/collections?action=CREATE&name=qdfs&collection.configName=qdfsconf&maxShardsPerNode=10&numShards=3&replicationFactor=2&router.name=implicit&routerName=implicit&shards=shard_default,shard_H2000,shard_LOCALIZEDMANAGE'

 

 

 

 

6、配置完成

#執行此命令獲取頁面地址

echo 'http://'$currentIp':8992/solr/#/~cloud'

 

打開瀏覽器訪問地址進行測試

可看到一個collection:qdfs,3個分片:shard_default,shard_H2000,shard_LOCALIZEDMANAGE,每個分片2個復制

 

 

 

三、solrcloud運維常用命令

1、新增shard

curl 'http://'$currentIp':8993/solr/admin/collections?action=CREATESHARD&collection=qdfs&shard=newShardName'

 

2、添加replica,可通過界面操作,但是非常強烈建議用命令行方式(上次界面方式卡住了,無限重試,生成70多個replica,把整個collection刪掉才解決的)

curl 'http://'$currentIp':8993/solr/admin/collections?action=ADDREPLICA&collection=qdfs&shard=shard_H2000&node=172.17.0.9:8983_solr'

 

 

3、增加node,即增加一個dockersolr虛機

cp -r /home/docker/solr/zksolrdata/nodex /home/docker/solr/zksolrdata/node4

docker run --name qd-solrcloud4 --restart=always -d -p 8994:8983 -m 4096m -v /home/docker/solr/zksolrdata:/opt/solrdata solr:chinese -c -z $currentIp:2191,$currentIp:2192,$currentIp:2193/solr -s /opt/solrdata/node4

 

 

4、collection、shard、replica其他相關命令

 

curl 'http://'$currentIp':8991/solr/admin/collections?action=CLUSTERSTATUS'

 

##collection

 

#列出collection

curl 'http://'$currentIp':8993/solr/admin/collections?action=LIST'

 

#刪除collection

curl 'http://'$currentIp':8993/solr/admin/collections?action=DELETE&name=qdfs'

 

#重啟collection

curl 'http://'$currentIp':8993/solr/admin/collection?action=RELOAD&name=qdfs'

 

 

 

##shard

 

#分裂shard

curl 'http://'$currentIp':8993/solr/admin/collections?action=SPLITSHARD&collection=qdfs&shard=shard1'

 

 

#新增shard

curl 'http://'$currentIp':8993/solr/admin/collections?action=CREATESHARD&collection=qdfs&shard=sharde'

 

#刪除shard

curl 'http://'$currentIp':8993/solr/admin/collections?action=DELETESHARD&collection=qdfs&shard=sharde'

 

 

 

#replica

 

#添加replica

curl 'http://'$currentIp':8993/solr/admin/collections?action=ADDREPLICA&collection=qdfs&shard=shard_H2000&node=172.17.0.9:8983_solr'

 

#刪除replica

curl 'http://'$currentIp':8993/solr/admin/collections?action=DELETEREPLICA&collection=qdfs&shard=shard_H2000&replica=core_node14'

 

 

##configset

 

#列出configset

curl 'http://'$currentIp':8993/solr/admin/configs?action=LIST'

 

#刪除configset

curl 'http://'$currentIp':8993/solr/admin/configs?action=delete&name=qdfsconf'

 

 

5、其他

#查看文件夾大小

du -s /home/docker/solr/zksolrdata/node*/qdfs_shard_H2000_replica*

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM