Windows Docker 部署 SolrCloud的方法步骤

 更新时间:2024年10月13日 10:04:08   作者:菜鸟厚非  
本文主要介绍了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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Docker+K8s集成部署的实战

    Docker+K8s集成部署的实战

    本文详细介绍了Docker与Kubernetes在企业级生产环境中的集成部署实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-05-05
  • docker rm -f 容器id 无效的问题解决

    docker rm -f 容器id 无效的问题解决

    当遇到“Error response from daemon: cannot stop container: d208b8055fd0: permission denied”错误,表示缺乏停止Docker容器的权限,本文就来介绍一下如何解决,感兴趣的可以了解一下
    2024-09-09
  • Docker学习笔记之Docker端口映射

    Docker学习笔记之Docker端口映射

    本篇文章主要介绍了Docker学习笔记之Docker端口映射,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • DOCKERFILE学习及使用注意事项

    DOCKERFILE学习及使用注意事项

    Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。一般的,Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令、容器启动时执行指令
    2017-02-02
  • Docker删除镜像详细步骤和注意事项

    Docker删除镜像详细步骤和注意事项

    Docker删除镜像是一个常见的操作,主要用于清理系统中不再需要的镜像,以释放存储空间,删除镜像可以通过docker rmi命令实现,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • docker部署高斯数据库的详细步骤

    docker部署高斯数据库的详细步骤

    文章详细介绍了如何在Docker中部署高斯数据库(openGauss),包括安装Docker、拉取镜像、运行容器、设置环境变量和挂载数据卷等步骤,还提供了连接和配置远程连接的指导,感兴趣的朋友一起看看吧
    2024-12-12
  • Docker构建Jar镜像的方法实现

    Docker构建Jar镜像的方法实现

    本文主要介绍了Docker构建Jar镜像的方法实现,主要包括编写Dockerfile、构建镜像、测试镜像等操作,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Docker Machine是什么?

    Docker Machine是什么?

    Docker Machine是什么?这篇文章主要介绍了Docker官方提供的一个工具Docker Machine,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Docker容器访问宿主机网络的方法

    Docker容器访问宿主机网络的方法

    这篇文章主要介绍了Docker容器访问宿主机网络的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • docker容器因报错无法启动问题的检查及修复容器错误并重启

    docker容器因报错无法启动问题的检查及修复容器错误并重启

    随着容器技术的发展,现在很多的应用程序系统都会选择使用docker容器进行部署,下面这篇文章主要给大家介绍了关于docker容器因报错无法启动问题的检查及修复容器错误并重启的相关资料,需要的朋友可以参考下
    2023-03-03

最新评论