Windows Docker 部署 SolrCloud的方法步驟
一、簡(jiǎn)介
Solr 集群是一個(gè)基于 Lucene 的高性能全文搜索服務(wù)器集群,它通過(guò)集成 ZooKeeper 來(lái)實(shí)現(xiàn)分布式索引和搜索功能。Solr 集群具備以下特點(diǎn):
- 分布式索引與搜索:Solr 能夠?qū)⒋笏饕殖啥鄠€(gè)小索引,分布在多個(gè)節(jié)點(diǎn)上,提高索引和搜索的效率。
- 高可用性和容錯(cuò)性:通過(guò) ZooKeeper 的協(xié)調(diào)管理,Solr 集群能夠自動(dòng)處理節(jié)點(diǎn)的故障轉(zhuǎn)移,確保服務(wù)的高可用性。
- 自動(dòng)負(fù)載均衡:Solr 集群能夠自動(dòng)分配索引和查詢請(qǐng)求到各個(gè)節(jié)點(diǎn),實(shí)現(xiàn)負(fù)載均衡,提高整體性能。
- 集中配置:Solr 集群的配置信息存儲(chǔ)在 ZooKeeper 中,便于集中管理和維護(hù)。
- 可擴(kuò)展性:隨著數(shù)據(jù)量和查詢請(qǐng)求的增加,Solr 集群可以靈活地?cái)U(kuò)展節(jié)點(diǎn)數(shù)量,滿足不斷增長(zhǎng)的需求。
此外,Solr 集群適用于需要大規(guī)模、高并發(fā)搜索服務(wù)的場(chǎng)景,如電商平臺(tái)、新聞媒體、在線教育等領(lǐng)域。
二、部署 ZK 集群
Solr 集群,一些功能依賴 ZooKeeper 進(jìn)行實(shí)現(xiàn)。首先我們部署一下 ZooKeeper 集群,提供 Solr 使用。這里,使用的是 3.8.4 版本的 ZooKeeper 鏡像。
首先,使用下面一行命令,在 docker 中 創(chuàng)建一個(gè)名為 solr-zookeeper-net 的網(wǎng)絡(luò)。這會(huì)提供給 ZooKeeper 集群和 Solr 集群通訊使用,即:可以使用容器名,代替 IP 地址。
docker network create solr-zookeeper-net
2.1 ZK Node1
如果是第二次部署,配置已存在物理機(jī),可以忽略第一 和 第二兩步。第一步,使用下面命令啟動(dòng)一個(gè) 沒(méi)有配置映射的 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í)行下面三條命令,把容器內(nèi)的配置拷貝到物理機(jī),然后停止并刪除 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í)行下面命令,啟動(dòng)一個(gè)具有配置映射的 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
如果是第二次部署,配置已存在物理機(jī),可以忽略第一 和 第二兩步。第一步,使用下面命令啟動(dòng)一個(gè) 沒(méi)有配置映射的 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í)行下面三條命令,把容器內(nèi)的配置拷貝到物理機(jī),然后停止并刪除 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í)行下面命令,啟動(dòng)一個(gè)具有配置映射的 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
如果是第二次部署,配置已存在物理機(jī),可以忽略第一 和 第二兩步。第一步,使用下面命令啟動(dòng)一個(gè) 沒(méi)有配置映射的 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í)行下面三條命令,把容器內(nèi)的配置拷貝到物理機(jī),然后停止并刪除 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í)行下面命令,啟動(dòng)一個(gè)具有配置映射的 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 準(zhǔn)備目錄映射
啟動(dòng)一個(gè) solr 容器,這個(gè)容器僅供拷貝 solr 映射文件目錄使用。
docker run -d -p 8983:8983 --name solr-8.11.3 -t solr:8.11.3
執(zhí)行下面命令,使用 docker cp 命令將 solr 容器內(nèi)的程序目錄(/opt/solr/)和數(shù)據(jù)目錄(/var/solr/)拷貝到 solr1、solr2、solr3 對(duì)應(yīng)將要映射的物理機(jī)目錄下。然后停止并刪除臨時(shí)的 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í)行項(xiàng)目命令,即可啟動(dòng)一個(gè) 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í)行項(xiàng)目命令,即可啟動(dòng)一個(gè) 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í)行項(xiàng)目命令,即可啟動(dòng)一個(gè) 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 集群部署完成后,可以通過(guò) Docker Desktop 查看容器狀態(tài)。如下圖
4.1 驗(yàn)證 Solr 集群
如下所示,在某個(gè)節(jié)點(diǎn)中,可以看到 solr 集群中的全部 solr 節(jié)點(diǎn),即代表集群部署成功。
http://localhost:8983/solr/#/~cloud
http://localhost:8984/solr/#/~cloud
http://localhost:8985/solr/#/~cloud
五、SolrZK 狀態(tài)
隨便找一個(gè)節(jié)點(diǎn)查看 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
重啟完成后,打開(kāi) solr admin 面板,可以看到此時(shí) zk 集群的狀態(tài)可以在 solr 控制臺(tái)中正常展示。
六、LB SolrCloud
這里通過(guò) Nginx 對(duì) Solr 集群進(jìn)行負(fù)載均衡,部署起來(lái)也相對(duì)較為簡(jiǎn)單。
6.1 準(zhǔn)備 nginx.conf
執(zhí)行下面命令,啟動(dòng)一個(gè)臨時(shí)的 Nginx 容器。然后在執(zhí)行 docker cp 將容器內(nèi)的配置文件拷貝到物理機(jī) 。最后執(zhí)行docker rm 刪除臨時(shí)的 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í)行下面命令,即可啟動(dòng)一個(gè) 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
-參數(shù) --restart always 在容器退出時(shí)總是重啟容器。
-參數(shù) -v C:\ProgramDatas\Docker\Containers\nginx-1.25.4\html:/usr/share/nginx/html 映射 Nginx 默認(rèn)路徑到物理機(jī)。
-參數(shù) -v C:\ProgramDatas\Docker\Containers\nginx-1.25.4\nginx.conf:/etc/nginx/nginx.conf 映射 Nginx 容器內(nèi)配置文件。
-參數(shù) -v C:\ProgramDatas\Docker\Containers\nginx-1.25.4\cache:/var/cache/nginx 映射 Nginx 緩存目錄到物理機(jī)。
-參數(shù) -v C:\ProgramDatas\Docker\Containers\nginx-1.25.4\pid:/var/run 映射 Nginx 的 PID 文件到物理機(jī)。
6.3 配置 LB
打開(kāi)物理機(jī)的 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 端點(diǎn)
可看到,我們配置的 LB 是 8982 端口。
打開(kāi)瀏覽器,使用 8982 端口進(jìn)行訪問(wèn) http://localhost:8982/solr/#/,可以正??吹?solr 集群的控制臺(tái)。
到此這篇關(guān)于Windows Docker 部署 SolrCloud的方法步驟的文章就介紹到這了,更多相關(guān)Docker 部署 SolrCloud內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何將本地構(gòu)建好的docker鏡像發(fā)布到dockerhub
這篇文章主要介紹了如何將本地構(gòu)建好的docker鏡像發(fā)布到dockerhub,文中通過(guò)圖文教程介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05使用Docker Compose創(chuàng)建LAMP環(huán)境的詳細(xì)步驟
現(xiàn)如今,通過(guò) Docker 容器化部署環(huán)境已經(jīng)逐漸成為主流,特別是在部署像 LAMP 這樣的復(fù)雜環(huán)境時(shí),本教程旨在帶您完成使用 Docker-Compose 建立 LAMP 環(huán)境的整個(gè)過(guò)程,同時(shí)還包括定制 PHP 環(huán)境的步驟,需要的朋友可以參考下2024-12-12Docker部署Nginx設(shè)置環(huán)境變量的實(shí)現(xiàn)步驟
本文主要介紹了Docker部署Nginx設(shè)置環(huán)境變量的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07idea整合docker快速部署springboot應(yīng)用的詳細(xì)過(guò)程
這篇文章主要介紹了idea整合docker快速部署springboot應(yīng)用,文中給大家提到關(guān)于安裝docker步驟,idea連接遠(yuǎn)程docker的方法,需要的朋友可以參考下2021-10-10Docker教程之dockerfile構(gòu)建centos鏡像
這篇文章主要介紹了Docker教程之dockerfile構(gòu)建centos鏡像的相關(guān)資料,需要的朋友可以參考下2022-11-11如何解決啟動(dòng)docker desktop報(bào)The network name ca
在使用Docker Desktop時(shí),可能遇到"The network name cannot be found"的錯(cuò)誤,解決這個(gè)問(wèn)題的方法是打開(kāi)管理員權(quán)限的終端,執(zhí)行重啟Docker Desktop的相關(guān)命令,如果遇到虛擬化未開(kāi)啟的提示,需要執(zhí)行“bcdedit /set hypervisorlaunchtype auto”2024-10-10