ubuntu14.04環境下利用docker搭建solrCloud叢集,dockersolrcloud
主要內容:技術關鍵點:docker17.06.3安裝,docker自製鏡像及相關容器操作,docker分配固定IP及添加連接埠映射,solrCloud叢集部署等主要思路:在Ubuntu14.04作業系統的宿主機中,安裝docker17.06.3,將宿主機的作業系統製作成docker基礎鏡像,之後使用自製的基礎鏡像在docker中啟動3個容器,分配固定IP,再在3個容器中配置solrCloud叢集。註:solrCloud採用的solr內建jetty,需要單獨配置zookeeper容器IP及名稱見下表:
| 編號 |
靜態IP |
容器名稱 |
| 1 |
172.18.0.11 |
server1 |
| 2 |
172.18.0.12 |
server2 |
| 3 |
172.18.0.13 |
server3 |
一、在宿主機安裝docker最新版1.更新apt-get
apt-get update2.安裝curl工具
apt-get install curl3.擷取並安裝docker最新版
curl -fsSL https://get.docker.com/ | sh4.查看docker版本
docker -v
二、在宿主機製作Ubuntu14.10基礎鏡像ubuntu-self1.將本機作業系統打包成tar檔案tar --numeric-owner --exclude=/proc --exclude=/sys -cvf ubuntu-self.tar /2.將製作的tar檔案匯入docker鏡像庫中,並命令為:ubuntu-self:
cat ubuntu-self.tar | docker import - ubuntu-self3.現在可以運行它了:
docker run -i -t ubuntu-self 註:官方提供的鏡像庫中Ubuntu無法sudo,不太好用,這裡我自己利用原生作業系統產生了一個基礎純淨版鏡像,命名為ubuntu-self,大小約3.5G,裡面沒有安裝任何軟體。三、配置宿主機的hosts檔案,以便利用ssh登入容器1.修改hosts檔案,添加如下內容:
vi /etc/hosts172.18.0.11 server1172.18.0.12 server2172.18.0.13 server32.查看hosts檔案
cat /etc/hosts四、啟動一個容器,設定靜態IP,命名為server11.在宿主機上建立自訂網路
docker network create --subnet=172.18.0.0/16 search_network備忘:這裡選取了172.18.0.0網段,也可以指定其他任意閒置網段,search_network為自訂橋接器的名字,可自己任意取名。2.利用docker啟動容器server1,分配固定IP 172.18.0.11,並將容器的8983連接埠與宿主機8983進行映射,以便可以從外部存取容器
docker run -itd --name server1 --net search_network --ip 172.18.0.11 -p 8983:8983 ubuntu-self /bin/bash註:該命令執行完之後直接進入到server1的命令列介面,主機名稱變為docker分配的隨機字串,查看ip是否為靜態,執行結果如所示:五、繼續操作,在容器server1中配置ssh服務1.aptget升級
apt-get update2.安裝openssh服務
apt-get install openssh-server3.開啟ssh服務
sudo /etc/init.d/ssh start4.設定ssh開機啟動
vi /etc/rc.local添加如下內容:
service ssh start4.退出容器,在宿主機中採用ssh登入
exit5.在宿主機切換到tank使用者(root登入ssh需要修改ssh設定檔,這裡用tank使用者登入更方便些),並ssh到容器server1
su tank
ssh server1六、在容器server1中安裝jdk1.8並配置java環境變數1.解壓縮檔案
tar -zxvf jdk1.8.0_141.tar.gz -C /usr/local/java/2.向/etc/profile檔案中追加下面內容:export JAVA_HOME=/usr/local/java/jdk1.8.0_141export JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=$PATH:${JAVA_HOME}/bin3.讓檔案生效
source /etc/profile4.驗證java成功安裝
java -version七、在容器server1中安裝配置zookeeper-3.4.101.解壓zookeeper 安裝包到/usr/local目錄中
tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/local/2.建立zookeeper的data和logs目錄,確保擁有讀寫權限
mkdir /home/tank/zookeeper/data
mkdir /home/tank/zookeeper/log3.將zookeeper安裝目錄下conf檔案夾中的zoo_sample.cfg重新命名為zoo.cfg4.修改zoo.cfg內容,zoo.cfg配置完後如下:# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just# example sakes.dataDir=/home/tank/zookeeper/datadataLogDir=/home/tank/zookeeper/log# the port at which the clients will connectclientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## 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=1server.1=172.18.0.11:2888:3888server.2=172.18.0.12:2888:3888server.3=172.18.0.13:2888:38885.進入/home/tank/zookeeper/data中,建立myid檔案,寫入1註:其他兩個節點的myid內容應分別是2和3八、在容器server1中安裝配置solr-6.6.01.解壓solr-6.6.0.tgz到/usr/local目錄下
tar -zxvf solr-6.6.0.tgz -C /usr/local/2.建立solrCloud根目錄solr_cloud_home檔案夾
mkdir /usr/local/solrCloud/solr_cloud_home3.複製/usr/local/solr-6.6.0/server/solr/目錄下的檔案到solr_cloud_home中
cp /usr/local/solr-6.6.0/server/solr/* /usr/local/solrCloud/solr_cloud_home/查看solr_cloud_home目錄,:
ls4.建立配置存放目錄solr_cloud_collection檔案夾
mkdir /usr/local/solrCloud/solr_cloud_collection5.複製/usr/local/solr-6.6.0/example/example-DIH/solr/solr/目錄下的檔案到solr_cloud_collection/cloud_core中
mkdir /usr/local/solr_cloud_collection/cloud_core
cp /usr/local/solr-6.6.0/example/example-DIH/solr/solr/* /usr/local/solr_cloud_collection/cloud_core/
ls九、在宿主機提交容器server1為新的鏡像,命名為ubuntu-self-solr
sudo docker commit server1 ubuntu-self-solr
docker images十、利用上一步產生的鏡像啟動容器server2,server31.在宿主機啟動容器server2,設定IP為172.18.0.12
docker run -itd --name server2 --net search_network --ip 172.18.0.12 ubuntu-self-solr /bin/bash2.將容器server2中/home/tank/zookeeper/data/myid內容由1改為23.退出容器server2,回到宿主機
exit3.在宿主機啟動容器server3,設定IP為172.18.0.13
docker run -itd --name server3 --net search_network --ip 172.18.0.13 ubuntu-self-solr /bin/bash4.將容器server3中/home/tank/zookeeper/data/myid內容由1改為35.退出容器server3,回到宿主機
exit6.在宿主機中查看docker容器運行情況
docker ps 十一、在宿主機ssh登入容器server1,server2,server3 並分別啟動zookeeper
ssh server1
cd /usr/local/zookeeper-3.4.10/
bin/zkServer.sh start
/usr/local/zookeeper-3.4.10/bin/zkServer.sh start註:在server2,server3上同樣執行此操作十二、在宿主機ssh登入容器server1,server2,server3並啟動solr1.ssh登入server1,cloud模式下啟動solr
ssh server1
cd /usr/local/solr-6.6.0
bin/solr start -cloud -p 8983 -s "/usr/local/solrCloud/solr_cloud_home/" -z "172.18.0.11:2181,172.18.0.12:2181,172.18.0.13:2181"2.開啟宿主機瀏覽器,訪問頁面http://172.18.0.11:8983/solr/,可以進入solr頁面即代表啟動成功註:在server2,server3上同樣執行此操作十三、在容器server1上建立Collection(只需要在一台solr節點上操作) 1、由solr命令建立索引,這裡索引命名為:cloudsuite_web_search進入solr/bin目錄,使用solr命令:
cd /usr/local/solr-6.6.0
bin/solr create_collection -c cloudsuite_web_search -shards 3 -replicationFactor 3 -d /usr/local/solrCloud/solr_cloud_collection/cloud_core/conf -p 8983 -c 核心名稱tar-shards 分區數量- replicationFactor 副本數量 (一般指有幾台solr叢集)2.將solr提供的xml樣本檔案上傳至索引
bin/post -c cloudsuite_web_search *.xml十四、在宿主機上通過瀏覽器訪問solrCloud叢集,驗證操作成功安裝成功後,無論從哪個節點訪問8983連接埠,均可以看到cloud的拓撲模式,如下所示