solr快速上手:搭建solr集群并创建核心,设置数据同步(十一)

news2024/11/15 15:53:09

0. 引言

前几章我们已经讲解了solr单机版的基本使用,但实际生产中,为了保证高可用、高性能,我们一般会采用集群模式,所以接下来,我们继续讲解solr集群的搭建和基本操作

1. 集群模式

1.1 分片

在讲解solr集群模式前,我们要先了解“分片”的概念。

当节点由一个拓展为多个时,数据存储和同步问题也随之而来,如果单纯的把数据存储到某一个节点,高可用的目的又实现不了了,如果把数据在每个节点中都存储,那么又会导致空间浪费,于是就出现了分片的概念。

所谓分片就是将数据分成多份,每一份就是一个分片,然后将这些分片存储到不同的节点上,以此实现存储扩展,同时因为不同的数据存储在不同的节点上,实际上也提高了查询的性能。

并且这些分片里,还分为主分片盒副本分片,主分片是不同的数据,副本分片则是主分片的备份,然后将这些分片分布到不同的节点上,这样既实现了数据存储,也实现了数据备份

因为要实现高可用,所以要求相同的主副分片不能在同一个节点上,否则当一个节点挂了,副分片也跟着挂了

1.2 节点治理

当节点变多了之后,节点之间的调用协调就成了问题,solr没有自带服务治理,也就需要引入第三方组件,一般我们通过zookeeper来作为注册中心,管理服务调度

同时为了保证注册中心的高可用,因此我们的zookeeper也需要部署成集群模式。可能有的同学会有疑惑,zk部署成集群模式了,那么又是谁来协调zk多节点呢,这个当然是zk自身了,它的集群模式自带了服务治理功能

1.3 部署架构

有了以上的基础概念后,我们再来梳理所要部署的solr集群架构。

首先集群模式最小主节点数是3个,这里为了模拟线上环境,搭建4个主分片,每个主分片3个副本分片的效果,我采用4个节点,具体大家可根据服务器环境来选择节点数,但不要小于3个

其次zookeeper搭建集群,最小节点数是3个,于是部署架构如下图所示

在这里插入图片描述

2. 搭建

2.1 搭建zookeeper集群

zookeeper的集群搭建可我另一篇文章:搭建zookeeper集群并设置开机自启

但是注意因为我solr版本用的是8.2.0,zookeeper对应版本选3.4.14,版本不对应可能有连接问题。会导致报错TimeoutException: Could not connect to ZooKeeper

2.2 搭建solr集群

1、之前我们已经搭建过solr单节点,将该节点复制3份到其他3个服务器

2、修改solr配置文件solr.xml

vim server/solr/solr.xml 

内容,调整为服务器solr服务器ip,如果端口有调整的话直接修改即可
在这里插入图片描述

3、修改启动脚本文件solr.in.sh,配置zk地址

vim bin/solr.in.sh

内容

ZK_HOST="192.168.244.42:2181,192.168.244.43:2181,192.168.244.44:2181"

# Set the ZooKeeper client timeout (for SolrCloud mode)
ZK_CLIENT_TIMEOUT="15000"

4、在其他3个节点,同步调整上述2步

5、重启四个solr节点

# 如下启动指令是单独配置的,参考专栏第一篇文章
service solr restart

能够正常访问solr-admin即证明集群部署成功!
在这里插入图片描述

这里如果发现报错SolrException: ruok is not executed because it is not in the whitelist. Check 4lw.commands.whitelist setting in zookeeper configuration file

这是因为要想在不登陆zk客户端的情况下,简单便捷的使用zk的四字指令时,比如ruok是查看zk是否启动的指令,就需要添加zk允许的指令白名单

在zookeeper配置文件conf/zoo.cfg中添加配置项4lw.commands.whitelist=stat,ruok,conf,isro,设置指定的四字指令被远程调用,如果设置的是*则表示所有的指令都允许被调用

在这里插入图片描述

配置完后重启zk,solr,如果是集群记得修改每个zk节点

正常启动,可以在Cloud菜单查看集群节点情况

在这里插入图片描述

6、因为用zookeeper管理集群了,我们要将solr的相关配置文件上传到zookeeper上,用zookeeper作为配置中心

先把我们之前单机solr中创建的orders核心的配置文件上传到其中一个solr节点上

scp -r orders root@192.168.244.42:/data/solr-8.2.0/server/solr

7、而上传到zk,solr为我们提供了一个脚本文件server/scripts/cloud-scripts/zkcli.sh

主要将solr.xml和核心(索引)下的配置文件managed-schema,solrconfig.xml

在任意一个solr节点执行:

# 设置solr配置文件路径
sh /data/solr-8.2.0/server/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.244.44:2181,192.168.244.43:2181,192.168.244.42:2181 --cmd upconfig -solrhome /data/solr-8.2.0/server/solr
# 上传核心配置文件目录
sh /data/solr-8.2.0/server/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.244.44:2181,192.168.244.43:2181,192.168.244.42:2181 --cmd upconfig -confdir /data/solr-8.2.0/server/solr/orders -confname orders

后续如果还需要上传其他的核心(索引)配置文件,就只需要执行下面的指令即可

sh /data/solr-8.2.0/server/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.244.44:2181,192.168.244.43:2181,192.168.244.42:2181 --cmd upconfig -confdir /data/solr-8.2.0/server/solr/collection_name -confname collection_name

在这里插入图片描述

连接zk,也能发现对应的数据了,这里连接使用的是prettyZoo工具,不知道怎么安装的可以查看我之前的博客:
安装zookeeper可视化工具PrettyZoo、ZooKeeperAssistant

在这里插入图片描述
8、登陆任意一个solr-admin,添加核心,名称与之前上传的orders保持一致,同时因为我们是4个节点,一般设置主分片数与节点数一致,不能超过节点数,同一主副分片不在一个节点上,那么一共就有4个主分片,每个主分片有3个副本分片

因为solr节点默认的maxShardsPerNode为1,即每个节点只允许创建1个分片(主分片或副分片),明显不满足我们上述的架构,每个节点需要创建1个主分片3个副本分片,所以一个节点需要创建4个分片,则我们需要将maxShardsPerNode调整为4

在这里插入图片描述

保存后创建的核心会同步到其他节点上

可以在Collections中查看分片情况

在这里插入图片描述

9、执行全量同步,如果对同步操作不熟悉的,可以查看专栏之前的文章

在这里插入图片描述

10、查询数据,发现数据查询成功

在这里插入图片描述

总结

自此,我们针对solr集群的搭建,核心创建,数据同步都讲解完了,同时还需要改变的呢,是我们客户端连接时的代码,要调整为集群模式,也就是通过zk来连接了

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

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

相关文章

【七天入门数据库】第二天 数据库理论基础

系列文章传送门: 【七天入门数据库】第一天 MySQL的安装部署 【七天入门数据库】第二天 数据库理论基础 【七天入门数据库】第三天 MySQL的库表操作 文章目录 一、什么是数据库 二、数据库管理系统DBMS 三、数据库与文件系统的区分 四、数据库的发展史 五、…

选择屏幕文本元素

标题 列标题 当你使用write语句时才能展现使用. 效果: 选择屏幕文本符号

前端Vue自定义tabs标题栏选项卡组件 可设置文字color

随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。 通过组件化开发,可以有效实现…

7.10 qt作业

闹钟 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> #include <QIcon> #include <QLabel> #include <QTextEdit> #include <QPushButton> #include <QLineEdit> #include <QPainter> #include <…

实现临界区互斥访问的基本方法

1. 问题引入 在我们之前的生产者与消费者问题中, 在文章的最后, 我们曾尝试过把我们的代码封装成P()和V()操作, 结果却以失败告终. 归根结底是因为我们无法在不使用mutex的情况下来完成对临界区的互斥访问, 本篇文章我们就来探讨一下, 如何不使用mutex实现临界区的互斥访问. …

形态学操作

目录 1、腐蚀 1.1 腐蚀目的 1.2 原理与代码实现 2、膨胀 3、应用 3.1 开闭运算、形态学梯度 3.1.1 开运算 3.1.2 闭运算 ​编辑 3.1.3 形态学梯度 ​编辑 3.1.4 顶帽与黑帽运算 3.2 相关函数 形态学操作常用于对二值化图像的操作 1、腐蚀 1.1 腐蚀目的 去除图像中…

[工业互联-22]:常见EtherCAT主站方案:Acontis公司的商用Windows 解决方案

目录 前言&#xff1a;非实时、纯软件解决方案 1.1 概述 1.2 缺点 1.3 实时性思路 方案1&#xff1a;非实时性能的解决方案&#xff1a;etherCAT优化网卡驱动程序 方案2&#xff1a;EtherCAT内核调度模块EcatDrv 方案3&#xff1a;具有硬实时性能的解决方案&#xff1a;…

【C++】C++创建动态链接库并调用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&#x1f95e; 文章目…

车载蓝牙通信开发之各种协议原理解析

车载蓝牙开发需要考虑到蓝牙协议栈集成、连接管理、电话功能集成、媒体播放控制、数据交换和服务发现、安全性和隐私保护等方面。这对于实现车辆与蓝牙设备之间的无线通信和交互功能非常关键。 使车辆能够与蓝牙设备进行通信和交互的开发过程。 蓝牙协议栈集成&#xff1a; …

SpringCloud与SpringBoot版本对应关系

浏览器访问start.spring.io/actuator/info 出现JSON字符串&#xff0c;再访问json.cn&#xff0c;在里面解析该字符串 如果对应不上&#xff0c;可能会出现很多环境上的坑

KKRT16 PSI算法

概念介绍 KKRT16 算法是一种基于OT的轻量级隐私求交协议&#xff0c;用于在半诚实敌手存在的情况下对伪随机函数&#xff08;OPRF&#xff09;进行不经意的评估。 在 OPRF 协议中&#xff0c;接收器有一个输入 r r r&#xff1b; 发送方获得输出 s s s&#xff0c;接收方获得…

【Hello mysql】 mysql的基本查询

Mysql专栏&#xff1a;Mysql 本篇博客简介&#xff1a;介绍mysql的基本查询 mysql的基本查询 create单行插入全列插入多行查询指定列查询插入否则更新 &#xff08;不常用&#xff09;替换 Retrieveselect列全列查询指定列查询查询字段为表达式结果去重 where条件找到英语小于6…

Unity 分块延迟渲染01 (TBDR)

现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU。 CPU被用于处理需要低内存延迟的序列、大量分支的数据集&#xff0c;其晶体管用于流控制和数据缓存。 GPU为处理大型&#xff0c;未分支的数据集&#xff0c;如3D渲染。晶体管专用于寄存器和算术逻辑单元&…

Django_内置的用户认证系统

目录 一、用户对象 1. 创建用户 2. 修改密码 3. 用户验证 二、权限与授权 1. 默认权限 2. 用户组 3. 在代码中创建权限 4. 权限缓存 三、在视图中认证用户 1、登录用户 2、注销用户 3、用户登录的访问限制 3.1、原始的办法 3.2、函数视图使用login_required装饰…

【前端】网页开发精讲与实战 CSS Day 1

&#x1f680;Write In Front&#x1f680; &#x1f4dd;个人主页&#xff1a;令夏二十三 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;前端 &#x1f4ac;总结&#xff1a;希望你看完之后&#xff0c;能对你有…

Go 并发模型—Goroutine

前言 Goroutines 是 Go[1] 语言主要的并发原语。它看起来非常像线程&#xff0c;但是相比于线程它的创建和管理成本很低。Go 在运行时将 goroutine 有效地调度到真实的线程上&#xff0c;以避免浪费资源&#xff0c;因此您可以轻松地创建大量的 goroutine&#xff08;例如每个请…

快速排序—C语言实现

目录 前言 快速排序 实现逻辑 1. hoare版本​编辑 2. 挖坑法 3. 前后指针版本 快速排序优化 1. 三数取中法选key 2. 递归到小的子区间时&#xff0c;可以考虑使用插入排序 快速排序非递归&#xff08;用栈实现&#xff09; 快速排序的特性总结 全部代码 前言 &#…

idea-spring boot开发

安装maven与配置配置maven安装插件 已经装好了idea与jdk 安装maven与配置 下载地址: https://maven.apache.org/download.cgi 下载合适的版本 配置maven 打开设置: 直接搜索 :maven 配置变量: 此电脑->属性->高级系统设置->环境变量 新建系统变量 MAVEN_HOME&#xff…

Web安全——渗透测试基础知识下

渗透测试基础 Web安全一、VMware虚拟机学习使用1、虚拟机简单介绍2、网络模式2.1 桥接网络&#xff08;Bridged Networking&#xff09;2.2 NAT模式2.3 Host-Only模式 3、通俗理解 二、Kali的2021安装与配置1、简单介绍2、Kali的版本3、配置3.1 安装虚拟机open-vm-tools-deskto…

基于matlab从ROI和蒙版在图像中创建标记(附源码)

一、前言 此示例演示如何从一组 ROI 创建标记的阻止映像。 在此示例中&#xff0c;您使用两种方法来获取和显示标记的数据。一种方法使用多边形ROI对象来存储肿瘤和正常组织区域边界的坐标。该函数将ROI坐标转换为标记的块图像。第二种方法使用掩码来指示图像的二进制分割为组…