Windows Docker 部署 SolrCloud

news2024/12/26 22:51:39

一、简介

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 配置文件,添加 upstreamserver 模块,然后重启 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 集群的控制台。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2081015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全实训六(靶机实例DC-3)

1 信息收集 1.1 获取靶机IP 1.2 扫描靶机网站的目录 1.3 扫描端口和服务器信息 1.4 进入网站 1.5 在msf中给搜索joomla扫描器 1.6 设置参数查看joomla版本信息 1.7 按照版本号搜索漏洞 1.8 查看漏洞使用 2 渗透 2.1 查看是否存在SQL注入 2.2 获取到数据库信息 2.3 爆破列表 2…

Datawhale AI夏令营第五期学习!

学习日志 日期: 2024年8月27日 今日学习内容: 今天,我学习了如何在深度学习任务中使用卷积神经网络(CNN)进行图像分类的基本流程,并成功地在JupyterLab中运行了一个完整的项目。以下是我今天的学习和操作…

【html+css 绚丽Loading】000021 万象轮回珠

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 &#x1f495…

使用C#进行屏幕截图(screenCapturer)

1.具体是应用了Nuget包 ScreenCapturer 2.编写相关核心代码,实现截取电脑部分区域图片 ScreenCapturer.ScreenCapturerTool screenCapturer new(); if (screenCapturer.ShowDialog() DialogResult.OK) {Bitmap bmp (Bitmap)screenCapturer.Image;pictureBox1.Ba…

【不合理的递归区间】快排递归引发区间错误,除以0未定义

问题描述 力扣语法报错&#xff1a;含义是有可能会除以0&#xff0c;该行为未定义&#xff0c;但问题是我这里压根就没用到除法。 #include<stdlib.h> #include<time.h>class Solution { public:vector<int> sortArray(vector<int>& nums) {sra…

【JavaWeb】定时任务和批量插入数据库数据

定时任务 需要在项目启动类添加注解开启支持定时任务&#xff1a; 以下示例是定时任务插入数据的操作&#xff1a; package com.yupi.yupao.once.importuser;import com.yupi.yupao.mapper.UserMapper; import com.yupi.yupao.model.domain.User; import org.springframework…

软件测试——论坛系统测试用例

功能测试 其他测试 测试用例 用例编号 用例描述 优先级 预置条件 操作步骤 测试数据 预期结果 测试结果Bug ID软件版本测试员SNS_User_Register_001注册成功使用合法的数据成功注册一个新账号P11、已打开注册页面 2、准备一个未注册用户信息1、输入用户昵称 2、输入用户名 3、…

Unity(2022.3.41LTS) - 摄像机

目录 一、基本概念 二、重要属性 三、摄像机模式 四、脚本控制 五、渲染设置 六. 组件详细介绍 一、基本概念 作用&#xff1a;摄像机决定了玩家在游戏中能够看到的内容。它就像是玩家的眼睛&#xff0c;从特定的位置和角度观察场景&#xff0c;并将场景中的物体渲染到屏…

北冥坞“学件”系统

简介 学件由周志华教授在 2016 年提出 [1, 2]。在学件范式下&#xff0c;世界各地的开发者可分享模型至学件基座系统&#xff0c;系统通过有效查搜和复用学件帮助用户高效解决机器学习任务&#xff0c;而无需从零开始构建机器学习模型。 北冥坞是学件的第一个系统性开源实现&…

客户端字符集小于数据库字符集导致乱码

一、现象 使用plsql或者sqlplus客户端 查询某个表的数据库均显示乱码&#xff0c;如下图所示&#xff1a; 二、原因分析 1、查看数据库的字符集 2、查看客户端的字符集 3、比较 数据库的字符集AL16UTF18&#xff08;服务端&#xff09;是大于en_US.UTF-8&#xff08;客户端&…

【Linux】gcc(工具篇)

文章目录 背景知识gcc的使用预处理&#xff08;进行宏替换&#xff09;编译&#xff08;生成汇编&#xff09;汇编&#xff08;生成机器可识别代码&#xff09;连接&#xff08;生成可执行文件或库文件&#xff09; gcc选项函数库函数库一般分为静态库和动态库两种C/C静态库的安…

Python 程序设计基础教程

Python 程序设计基础教程 撰稿人&#xff1a;南星六月雪 第 一 章 变量与简单数据类型 1.1 变量 先来观察以下程序&#xff1a; world "Hello Python!" print(world)world "Hello Python,I love you!" print(world)运行这个程序&#xff0c;将看到两…

一个利用率超高的大数据实验室是如何练成的?

在当今这个数据爆炸的时代&#xff0c;大数据已成为推动各行各业创新与发展的核心动力。一个高效运转、利用率超高的大数据实验室&#xff0c;不仅是技术创新的摇篮&#xff0c;更是企业竞争力的重要体现。那么&#xff0c;如何构建并维持这样一个实验室呢&#xff1f;本文将探…

【机器学习】软输出和硬输出的基本概念和区别、如何选择软输出还是硬输出、联系函数的作用以及线性判别分析和逻辑回归的基本概念(含python代码)

引言 在机器学习中&#xff0c;“软输出”&#xff08;Soft Output&#xff09;和"硬输出"&#xff08;Hard Output&#xff09;是两种不同的预测输出形式&#xff0c;通常用于分类问题中 文章目录 引言一、软输出和硬输出1.1 硬输出&#xff08;Hard Output&#xf…

深入理解C语言指针原理——深入底层机制

概述 在C语言中&#xff0c;指针是处理内存的核心工具。为了更好地理解指针如何工作&#xff0c;我们需要深入了解指针与底层硬件和操作系统之间的交互方式。本文将探讨指针的底层实现、内存布局、以及它们如何影响程序的行为。 内存模型 虚拟内存 现代操作系统为每个进程提…

Java算法—排序篇之快速排序(Quick sort)

快速排序&#xff08;Quick sort&#xff09; 核心思路&#xff1a; 从数列中挑出一个元素&#xff0c;一般都是左边第一个数字&#xff0c;称为 “基准数”;创建两个指针&#xff0c;一个从前往后走&#xff0c;一个从后往前走。先执行后面的指针&#xff0c;找出第一个比基…

io进程----库

目录 一丶定义 二丶分类 1.静态库 2.动态库 三丶静态库制作 四丶动态库制作 总结&#xff1a; 一丶定义 当使用别人的函数时除了包含头文件以外还需要有库 头文件&#xff1a;函数声明、结构体等类型定义、头文件、宏定义、其他头文件等 库&#xff1a;把一些常…

Java 使用QQ邮箱的接收发送功能,入门级教程

进入qq邮箱主页面&#xff0c;点击账号 下滑找到POP3...如果没有开启&#xff0c;需要开启&#xff0c;开启后&#xff0c;点击管理服务 然后点击生成授权码 按照步骤执行完成后&#xff0c;会给你需要的授权码 1.拿到授权码后&#xff0c;导入相关依赖&#xff0c;和yml相关配…

基于STM32开发的智能家居温度控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化温度监测与显示风扇/加热器控制Wi-Fi通信与远程监控应用场景 家庭环境的智能温度管理办公楼的节能温控系统常见问题及解决方案 常见问题解决方案结论 1. 引言 随着人们对生活质量…

OZON电子类目解封,OZON新品飙升榜

Ozon电子类目的解封对于商家来说是一个重要的机会&#xff0c;可以重新进入市场并恢复销售。 Ozon电子类目解封选品&#xff1a;m6z.cn/5H6fQR&#xff08;复制浏览器打开&#xff09; Top1 便携式音响 Портативная колонка Bluetooth с караоке м…