Windows Docker 部署 SolrCloud的方法步骤
作者:菜鸟厚非
一、简介
Solr 集群是一个基于 Lucene 的高性能全文搜索服务器集群,它通过集成 ZooKeeper 来实现分布式索引和搜索功能。Solr 集群具备以下特点:
- 分布式索引与搜索:Solr 能够将大索引分成多个小索引,分布在多个节点上,提高索引和搜索的效率。
- 高可用性和容错性:通过 ZooKeeper 的协调管理,Solr 集群能够自动处理节点的故障转移,确保服务的高可用性。
- 自动负载均衡:Solr 集群能够自动分配索引和查询请求到各个节点,实现负载均衡,提高整体性能。
- 集中配置:Solr 集群的配置信息存储在 ZooKeeper 中,便于集中管理和维护。
- 可扩展性:随着数据量和查询请求的增加,Solr 集群可以灵活地扩展节点数量,满足不断增长的需求。
此外,Solr 集群适用于需要大规模、高并发搜索服务的场景,如电商平台、新闻媒体、在线教育等领域。
二、部署 ZK 集群
Solr 集群,一些功能依赖 ZooKeeper 进行实现。首先我们部署一下 ZooKeeper 集群,提供 Solr 使用。这里,使用的是 3.8.4 版本的 ZooKeeper 镜像。
首先,使用下面一行命令,在 docker 中 创建一个名为 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
第二步,执行下面三条命令,把容器内的配置拷贝到物理机,然后停止并删除 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
第三步,执行下面命令,启动一个具有配置映射的 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
第二步,执行下面三条命令,把容器内的配置拷贝到物理机,然后停止并删除 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
第三步,执行下面命令,启动一个具有配置映射的 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
第二步,执行下面三条命令,把容器内的配置拷贝到物理机,然后停止并删除 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
第三步,执行下面命令,启动一个具有配置映射的 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
执行下面命令,使用 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
执行项目命令,即可启动一个 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
执行项目命令,即可启动一个 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
执行项目命令,即可启动一个 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 容器状态
ZooKeeper 集群和 Solr 集群部署完成后,可以通过 Docker Desktop 查看容器状态。如下图
4.1 验证 Solr 集群
如下所示,在某个节点中,可以看到 solr 集群中的全部 solr 节点,即代表集群部署成功。
http://localhost:8983/solr/#/~cloud
http://localhost:8984/solr/#/~cloud
http://localhost:8985/solr/#/~cloud
五、SolrZK 状态
随便找一个节点查看 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 集群的状态可以在 solr 控制台中正常展示。
六、LB SolrCloud
这里通过 Nginx 对 Solr 集群进行负载均衡,部署起来也相对较为简单。
6.1 准备 nginx.conf
执行下面命令,启动一个临时的 Nginx 容器。然后在执行 docker cp 将容器内的配置文件拷贝到物理机 。最后执行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
执行下面命令,即可启动一个 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!