Windows Docker 部署 SolrCloud的方法步驟
一、簡介
Solr 集群是一個基于 Lucene 的高性能全文搜索服務器集群,它通過集成 ZooKeeper 來實現分布式索引和搜索功能。Solr 集群具備以下特點:
- 分布式索引與搜索:Solr 能夠將大索引分成多個小索引,分布在多個節(jié)點上,提高索引和搜索的效率。
- 高可用性和容錯性:通過 ZooKeeper 的協(xié)調管理,Solr 集群能夠自動處理節(jié)點的故障轉移,確保服務的高可用性。
- 自動負載均衡:Solr 集群能夠自動分配索引和查詢請求到各個節(jié)點,實現負載均衡,提高整體性能。
- 集中配置:Solr 集群的配置信息存儲在 ZooKeeper 中,便于集中管理和維護。
- 可擴展性:隨著數據量和查詢請求的增加,Solr 集群可以靈活地擴展節(jié)點數量,滿足不斷增長的需求。
此外,Solr 集群適用于需要大規(guī)模、高并發(fā)搜索服務的場景,如電商平臺、新聞媒體、在線教育等領域。
二、部署 ZK 集群
Solr 集群,一些功能依賴 ZooKeeper 進行實現。首先我們部署一下 ZooKeeper 集群,提供 Solr 使用。這里,使用的是 3.8.4 版本的 ZooKeeper 鏡像。
首先,使用下面一行命令,在 docker 中 創(chuàng)建一個名為 solr-zookeeper-net 的網絡。這會提供給 ZooKeeper 集群和 Solr 集群通訊使用,即:可以使用容器名,代替 IP 地址。
docker network create solr-zookeeper-net
2.1 ZK Node1
如果是第二次部署,配置已存在物理機,可以忽略第一 和 第二兩步。第一步,使用下面命令啟動一個 沒有配置映射的 ZooKeeper1 容器。
docker run -d ` -p 2181:2181 -p 2888:2888 -p 3888:3888 ` --restart always ` --name zookeeper1-3.8.4 ` --network=solr-zookeeper-net ` -e ZOO_MY_ID="1" ` -e ZOO_SERVERS="server.1=zookeeper1-3.8.4:2888:3888;2181 server.2=zookeeper2-3.8.4:2889:3889;2182 server.3=zookeeper3-3.8.4:2890:3890;2183" ` -v C:\ProgramDatas\Docker\Containers\zookeeper1-3.8.4\data:/data ` -v C:\ProgramDatas\Docker\Containers\zookeeper1-3.8.4\datalog:/datalog ` zookeeper:3.8.4
第二步,執(zhí)行下面三條命令,把容器內的配置拷貝到物理機,然后停止并刪除 ZooKeeper1 容器。
docker cp zookeeper1-3.8.4:/conf C:\ProgramDatas\Docker\Containers\zookeeper1-3.8.4\conf docker stop zookeeper1-3.8.4 docker rm zookeeper1-3.8.4
第三步,執(zhí)行下面命令,啟動一個具有配置映射的 ZooKeeper1 容器。
docker run -d ` -p 2181:2181 -p 2888:2888 -p 3888:3888 ` --restart always ` --name zookeeper1-3.8.4 ` --network=solr-zookeeper-net ` -e ZOO_MY_ID="1" ` -e ZOO_SERVERS="server.1=zookeeper1-3.8.4:2888:3888;2181 server.2=zookeeper2-3.8.4:2889:3889;2182 server.3=zookeeper3-3.8.4:2890:3890;2183" ` -v C:\ProgramDatas\Docker\Containers\zookeeper1-3.8.4\data:/data ` -v C:\ProgramDatas\Docker\Containers\zookeeper1-3.8.4\datalog:/datalog ` -v C:\ProgramDatas\Docker\Containers\zookeeper1-3.8.4\conf:/conf ` zookeeper:3.8.4
2.2 ZK Node2
如果是第二次部署,配置已存在物理機,可以忽略第一 和 第二兩步。第一步,使用下面命令啟動一個 沒有配置映射的 ZooKeeper2 容器。
docker run -d -p 2182:2181 -p 2889:2888 -p 3889:3888 ` --restart always ` --name zookeeper2-3.8.4 ` --network=solr-zookeeper-net ` -e ZOO_MY_ID="2" -e ZOO_SERVERS="server.1=zookeeper1-3.8.4:2888:3888;2181 server.2=zookeeper2-3.8.4:2889:3889;2182 server.3=zookeeper3-3.8.4:2890:3890;2183" ` -v C:\ProgramDatas\Docker\Containers\zookeeper2-3.8.4\data:/data ` -v C:\ProgramDatas\Docker\Containers\zookeeper2-3.8.4\datalog:/datalog ` zookeeper:3.8.4
第二步,執(zhí)行下面三條命令,把容器內的配置拷貝到物理機,然后停止并刪除 ZooKeeper2 容器。
docker cp zookeeper2-3.8.4:/conf C:\ProgramDatas\Docker\Containers\zookeeper2-3.8.4\conf docker stop zookeeper2-3.8.4 docker rm zookeeper2-3.8.4
第三步,執(zhí)行下面命令,啟動一個具有配置映射的 ZooKeeper2 容器。
docker run -d -p 2182:2181 -p 2889:2888 -p 3889:3888 ` --restart always ` --name zookeeper2-3.8.4 ` --network=solr-zookeeper-net ` -e ZOO_MY_ID="2" -e ZOO_SERVERS="server.1=zookeeper1-3.8.4:2888:3888;2181 server.2=zookeeper2-3.8.4:2889:3889;2182 server.3=zookeeper3-3.8.4:2890:3890;2183" ` -v C:\ProgramDatas\Docker\Containers\zookeeper2-3.8.4\data:/data ` -v C:\ProgramDatas\Docker\Containers\zookeeper2-3.8.4\datalog:/datalog ` -v C:\ProgramDatas\Docker\Containers\zookeeper2-3.8.4\conf:/conf ` zookeeper:3.8.4
2.3 ZK Node3
如果是第二次部署,配置已存在物理機,可以忽略第一 和 第二兩步。第一步,使用下面命令啟動一個 沒有配置映射的 ZooKeeper3 容器。
docker run -d ` -p 2813:2181 -p 2890:2888 -p 3890:3888 ` --restart always ` --network=solr-zookeeper-net ` -e ZOO_MY_ID="3" ` -e ZOO_SERVERS="server.1=zookeeper1-3.8.4:2888:3888;2181 server.2=zookeeper2-3.8.4:2889:3889;2182 server.3=zookeeper3-3.8.4:2890:3890;2183" ` -v C:\ProgramDatas\Docker\Containers\zookeeper3-3.8.4\data:/data ` -v C:\ProgramDatas\Docker\Containers\zookeeper3-3.8.4\datalog:/datalog ` --name zookeeper3-3.8.4 ` zookeeper:3.8.4
第二步,執(zhí)行下面三條命令,把容器內的配置拷貝到物理機,然后停止并刪除 ZooKeeper3 容器。
docker cp zookeeper3-3.8.4:/conf C:\ProgramDatas\Docker\Containers\zookeeper3-3.8.4\conf docker stop zookeeper3-3.8.4 docker rm zookeeper3-3.8.4
第三步,執(zhí)行下面命令,啟動一個具有配置映射的 ZooKeeper3 容器。
docker run -d ` -p 2813:2181 -p 2890:2888 -p 3890:3888 ` --restart always ` --network=solr-zookeeper-net ` -e ZOO_MY_ID="3" ` -e ZOO_SERVERS="server.1=zookeeper1-3.8.4:2888:3888;2181 server.2=zookeeper2-3.8.4:2889:3889;2182 server.3=zookeeper3-3.8.4:2890:3890;2183" ` -v C:\ProgramDatas\Docker\Containers\zookeeper3-3.8.4\data:/data ` -v C:\ProgramDatas\Docker\Containers\zookeeper3-3.8.4\datalog:/datalog ` -v C:\ProgramDatas\Docker\Containers\zookeeper3-3.8.4\conf:/conf ` --name zookeeper3-3.8.4 ` zookeeper:3.8.4
三、Solr 集群
ZooKeeper 集群部署完成后,就可以部署 Solr 集群了。這里,使用的是 8.11.3 版本的 Solr 鏡像。
3.1 準備目錄映射
啟動一個 solr 容器,這個容器僅供拷貝 solr 映射文件目錄使用。
docker run -d -p 8983:8983 --name solr-8.11.3 -t solr:8.11.3
執(zhí)行下面命令,使用 docker cp 命令將 solr 容器內的程序目錄(/opt/solr/)和數據目錄(/var/solr/)拷貝到 solr1、solr2、solr3 對應將要映射的物理機目錄下。然后停止并刪除臨時的 solr 容器。
docker cp solr-8.11.3:/opt/solr/ C:\ProgramDatas\Docker\Containers\solr1-8.11.3\solr docker cp solr-8.11.3:/var/solr/ C:\ProgramDatas\Docker\Containers\solr1-8.11.3\data docker cp solr-8.11.3:/opt/solr/ C:\ProgramDatas\Docker\Containers\solr2-8.11.3\solr docker cp solr-8.11.3:/var/solr/ C:\ProgramDatas\Docker\Containers\solr2-8.11.3\data docker cp solr-8.11.3:/opt/solr/ C:\ProgramDatas\Docker\Containers\solr3-8.11.3\solr docker cp solr-8.11.3:/var/solr/ C:\ProgramDatas\Docker\Containers\solr3-8.11.3\data docker stop solr-8.11.3 docker rm solr-8.11.3
3.2 Solr 1
執(zhí)行項目命令,即可啟動一個 solr1 容器。
docker run -d -t -p 8983:8983 ` --network=solr-zookeeper-net ` --restart=always ` --name solr1-8.11.3 ` --privileged=true ` -v C:\ProgramDatas\Docker\Containers\solr1-8.11.3\solr:/opt/solr ` -v C:\ProgramDatas\Docker\Containers\solr1-8.11.3\data:/var/solr ` solr:8.11.3 bash -c '/opt/solr/bin/solr start -f -z zookeeper1-3.8.4:2181,zookeeper2-3.8.4:2182,zookeeper3-3.8.4:2183'
3.3 Solr 2
執(zhí)行項目命令,即可啟動一個 solr2 容器。
docker run -d -t -p 8984:8983 ` --network=solr-zookeeper-net ` --restart=always ` --name solr2-8.11.3 ` --privileged=true ` -v C:\ProgramDatas\Docker\Containers\solr2-8.11.3\solr:/opt/solr ` -v C:\ProgramDatas\Docker\Containers\solr2-8.11.3\data:/var/solr ` solr:8.11.3 bash -c '/opt/solr/bin/solr start -f -z zookeeper1-3.8.4:2181,zookeeper2-3.8.4:2182,zookeeper3-3.8.4:2183'
3.4 Solr 3
執(zhí)行項目命令,即可啟動一個 solr3 容器。
docker run -d -t -p 8985:8983 ` --network=solr-zookeeper-net ` --restart=always ` --name solr3-8.11.3 ` --privileged=true ` -v C:\ProgramDatas\Docker\Containers\solr3-8.11.3\solr:/opt/solr ` -v C:\ProgramDatas\Docker\Containers\solr3-8.11.3\data:/var/solr ` solr:8.11.3 bash -c '/opt/solr/bin/solr start -f -z zookeeper1-3.8.4:2181,zookeeper2-3.8.4:2182,zookeeper3-3.8.4:2183'
四、Solr ZK 容器狀態(tài)
ZooKeeper 集群和 Solr 集群部署完成后,可以通過 Docker Desktop 查看容器狀態(tài)。如下圖
4.1 驗證 Solr 集群
如下所示,在某個節(jié)點中,可以看到 solr 集群中的全部 solr 節(jié)點,即代表集群部署成功。
http://localhost:8983/solr/#/~cloud
http://localhost:8984/solr/#/~cloud
http://localhost:8985/solr/#/~cloud
五、SolrZK 狀態(tài)
隨便找一個節(jié)點查看 ZK Status(我這里查看的 solr3:http://localhost:8985/solr/#/~cloud?view=zkstatus),可以看到提示需要向 zk 加一行配置。
找到 zk1、zk2、zk3 的 zoo.cfg 文件,分別加入下面一行配置。然后重啟 zk1、zk2、zk3 的容器即可生效。
4lw.commands.whitelist=mntr,conf,ruok
重啟完成后,打開 solr admin 面板,可以看到此時 zk 集群的狀態(tài)可以在 solr 控制臺中正常展示。
六、LB SolrCloud
這里通過 Nginx 對 Solr 集群進行負載均衡,部署起來也相對較為簡單。
6.1 準備 nginx.conf
執(zhí)行下面命令,啟動一個臨時的 Nginx 容器。然后在執(zhí)行 docker cp 將容器內的配置文件拷貝到物理機 。最后執(zhí)行docker rm 刪除臨時的 Nginx 容器。
docker run -d ` -p 8080:80 ` --name nginx-1.25.4 ` nginx:1.25.4
docker cp nginx-1.25.4:/etc/nginx/nginx.conf C:\ProgramDatas\Docker\Containers\nginx-1.25.4\nginx.conf docker rm -f nginx-1.25.4
6.2 部署 Nginx
執(zhí)行下面命令,即可啟動一個 Nginx 容器。
docker run -d ` -p 8080:80 ` -p 8982:8982 ` --network=solr-zookeeper-net ` --restart always ` --name nginx-1.25.4 ` -v C:\ProgramDatas\Docker\Containers\nginx-1.25.4\html:/usr/share/nginx/html ` -v C:\ProgramDatas\Docker\Containers\nginx-1.25.4\nginx.conf:/etc/nginx/nginx.conf ` -v C:\ProgramDatas\Docker\Containers\nginx-1.25.4\cache:/var/cache/nginx ` -v C:\ProgramDatas\Docker\Containers\nginx-1.25.4\pid:/var/run ` nginx:1.25.4
-參數 --restart always 在容器退出時總是重啟容器。
-參數 -v C:\ProgramDatas\Docker\Containers\nginx-1.25.4\html:/usr/share/nginx/html 映射 Nginx 默認路徑到物理機。
-參數 -v C:\ProgramDatas\Docker\Containers\nginx-1.25.4\nginx.conf:/etc/nginx/nginx.conf 映射 Nginx 容器內配置文件。
-參數 -v C:\ProgramDatas\Docker\Containers\nginx-1.25.4\cache:/var/cache/nginx 映射 Nginx 緩存目錄到物理機。
-參數 -v C:\ProgramDatas\Docker\Containers\nginx-1.25.4\pid:/var/run 映射 Nginx 的 PID 文件到物理機。
6.3 配置 LB
打開物理機的 nginx.conf 配置文件,添加 upstream 和 server 模塊,然后重啟 nginx 容器即可生效。
http { upstream solrcloud { server solr1-8.11.3:8983; server solr2-8.11.3:8984; server solr3-8.11.3:8985; } server { listen 8982; location / { proxy_pass http://solrcloud; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
6.4 LB 端點
可看到,我們配置的 LB 是 8982 端口。
打開瀏覽器,使用 8982 端口進行訪問 http://localhost:8982/solr/#/,可以正常看到 solr 集群的控制臺。
到此這篇關于Windows Docker 部署 SolrCloud的方法步驟的文章就介紹到這了,更多相關Docker 部署 SolrCloud內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
如何將本地構建好的docker鏡像發(fā)布到dockerhub
這篇文章主要介紹了如何將本地構建好的docker鏡像發(fā)布到dockerhub,文中通過圖文教程介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05使用Docker Compose創(chuàng)建LAMP環(huán)境的詳細步驟
現如今,通過 Docker 容器化部署環(huán)境已經逐漸成為主流,特別是在部署像 LAMP 這樣的復雜環(huán)境時,本教程旨在帶您完成使用 Docker-Compose 建立 LAMP 環(huán)境的整個過程,同時還包括定制 PHP 環(huán)境的步驟,需要的朋友可以參考下2024-12-12Docker部署Nginx設置環(huán)境變量的實現步驟
本文主要介紹了Docker部署Nginx設置環(huán)境變量的實現步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07idea整合docker快速部署springboot應用的詳細過程
這篇文章主要介紹了idea整合docker快速部署springboot應用,文中給大家提到關于安裝docker步驟,idea連接遠程docker的方法,需要的朋友可以參考下2021-10-10如何解決啟動docker desktop報The network name ca
在使用Docker Desktop時,可能遇到"The network name cannot be found"的錯誤,解決這個問題的方法是打開管理員權限的終端,執(zhí)行重啟Docker Desktop的相關命令,如果遇到虛擬化未開啟的提示,需要執(zhí)行“bcdedit /set hypervisorlaunchtype auto”2024-10-10