ManticoreSearch-(安装配置,集群搭建)-学习总结

ManticoreSearch-(安装配置)-学习总结

  • 基础概念
  • 安装搭建
  • 集群搭建(基于K8S)

原文地址 https://blog.csdn.net/liuyij3430448/article/details/135955025

基础概念

Manticore Search是一个专门为搜索设计的多存储数据库,具有强大的全文搜索功能,适用于小型和大型数据集。

作为一个开源数据库(可在GitHub上获得),Manticore Search创建于2017年,是Sphinx搜索引擎的延续。采用了Sphinx的所有最佳特性,并显著改进了它的功能
Manticore Search现在是一个现代、快速、轻量级的数据库,具有完整的功能和出色的全文搜索功能。

Manticore的主要特点是:

  • 超过20个全文运算符和超过20个排名因子
  • 自定义排序
  • 阻止
  • 词元化
  • 停词
  • 同义词
  • 单词形式
  • 字符和单词级别的更先进的token
  • 特有的汉语分词
  • 文本高亮

ManticoreSearch 支持两种方式的存储(详细见《ManticoreSearch-(表操作)-学习总结.md》)

  • row-wise 行存储
  • columnar 列式存

安装搭建

Linux ubuntu安装

注意ubuntu版本至少18 (测试发现16版本的ubuntu系统安装失败)

在这里插入图片描述

lsb_release -a

在这里插入图片描述

安装步骤

wget https://repo.manticoresearch.com/manticore-repo.noarch.deb
sudo dpkg -i manticore-repo.noarch.deb
sudo apt update
sudo apt install manticore manticore-extra

在这里插入图片描述

systemctl start manticore 启动 ManticoreSearch

在这里插入图片描述

在这里插入图片描述

此方案安装的ManticoreSearch 默认已经安装【列存储】

在这里插入图片描述

默认情况下,Manticore 在以下端口等待连接:

  • 用于 MySQL 客户端的端口为 9306
  • 用于 HTTP/HTTPS 连接的端口为 9308
  • 用于其他 Manticore 节点和基于 Manticore 二进制 API 的客户端的端口为 9312

相关命令

当使用 DEB 或 RPM 包安装 Manticore Search 时,searchd 进程可以由操作系统的 init 系统运行和管理,大多数 Linux 版本现在使用 systemd

要检查平台使用的 init 系统
ps --no-headers -o comm 1

Manticore Search服务主要命令:

  • systemctl status manticore 查看manticore 状态
  • systemctl start manticore 启动manticore
  • systemctl stop manticore 停止manticore
  • systemctl restart manticore 重启manticore
  • systemctl is-enabled manticore 查看是否开启开机启动
  • systemctl disable manticore 禁止开机启动
  • systemctl enable manticore 开机启动
  • journalctl -u manticore 查看运行日志

Docker 安装 (单机版)

注意某些版本docker镜像启动后一直阻塞不出现accepting connections或者报错,没找到原因

本例子使用版本 manticoresearch/manticore:6.0.4

测试发现manticoresearch/manticore:4.2.0 , 5.0.2 docker镜像也可以正常使用

docker镜像地址 https://hub.docker.com/r/manticoresearch/manticore

docker镜像地址说明地址 https://github.com/manticoresoftware/docker/tree/6.0.4

几个测试后可以正常使用的镜像地址:

  • 6.0.4 镜像 https://hub.docker.com/layers/manticoresearch/manticore/6.0.4/images/sha256-9d186f65889556f66fd6e98c2d9bb97501ec52bef750784ef9cdb607fdbf59d8?context=explore

  • 5.0.2 镜像 https://hub.docker.com/layers/manticoresearch/manticore/5.0.2/images/sha256-b92224736f99b6e0e692f46e6f83c8f45d2192a69d7848913030b1016fe1404d?context=explore

  • 4.2.0 镜像 https://hub.docker.com/layers/manticoresearch/manticore/4.2.0/images/sha256-b49a09d569838908bd9759d99eaf2807a2f851aadfeff422cf754addbb4bc3ac?context=explore

注意:5.0.2 ,4.2.0 没有安装Manticore Columnar Library 无法使用列存储引擎

Docker 命令启动

注意: 生产使用MmanticoreSearch最好把数据挂载到指定磁盘

例如

  • 1 使用主机 /devops/manticoresearch/data 文件夹来挂载数据盘
  • 2 使用主机 /devops/manticoresearch/manticore.conf 配置文件来作为容器配置文件

manticore.conf 配置文件内容如下:

searchd {listen = 0.0.0.1:9312listen = 0.0.0.0:9306:mysqllisten = 0.0.0.0:9308:httplog = /var/log/manticore/searchd.logquery_log = /var/log/manticore/query.logpid_file = /var/run/manticore/searchd.piddata_dir = /var/lib/manticore
}

在这里插入图片描述

运行ManticoreSearch

docker run -e EXTRA=1 --name manticore -v /devops/manticoresearch/manticore.conf:/etc/manticoresearch/manticore.conf -v /devops/manticoresearch/data:/var/lib/manticore/ -p 9306:9306 -p 9308:9308 -d manticoresearch/manticore:6.0.4

注意如果要开启安装列存储需要指定环境变量:

  • -e EXTRA=1 开启安装列存储和二级索引
  • -e MCL=1 只开启安装列存储
  • -e TZ=Asia/Shanghai 指定容器时区 (测试发现没有效果)

在这里插入图片描述

在这里插入图片描述

安装依赖包可能比较耗时

使用docker logs -f 查看日志 出现 accepting connections 表示启动成功

在这里插入图片描述

测试使用 ManticoreSearch http

建表
curl -sX POST http://localhost:9308/cli -d 'CREATE TABLE testrt ( title text, content text, gid integer)'插入数据
curl -sX POST http://localhost:9308/insert -d'{"index":"testrt","id":1,"doc":{"title":"Hello","content":"world","gid":1}}'查询数据
curl -sX POST http://localhost:9308/search -d ' {"index":"testrt","query":{"match":{"*":"hello world"}}}'

在这里插入图片描述

测试使用 ManticoreSearch Mysql 客户端

使用mysql 命令连接 ManticoreSearch
mysql -h 192.168.0.20 -P 9306
-h 指定ip
-P 指定端口

在这里插入图片描述

可以看到刚才创建的表

可以使用操作mysql的方式操作ManticoreSearch

ManticoreSearch 集群 (基于K8S)

Manticore Search是一个高度分布式的系统,它提供了所有必要的组件来创建一个高可用性和可扩展的搜索数据库包括:

  • 用于分片的分布式表
  • 镜像实现高可用性
  • 可伸缩性的负载平衡
  • 数据安全复制

官网提供一个 基于docker-compose 方式的集群 https://manual.manticoresearch.com/Starting_the_server/Docker#Multi-node-cluster-with-replication 此方式容器部署在同一个机器上

本例子使用k8s来部署Manticore Search,启动两个pod 分别部署在不同的节点服务器上

部署ManticoreSearch

k8s集群结构如下:

在这里插入图片描述

将ManticoreSearch分别部署在u2-node 与 u3-node 并实现与主机卷的挂载。
为了测试当一台ManticoreSearch服务宕机后集群可以继续使用,整体配置文件准备了三个 (真实场景使用一个合并文件即可):

  • a-deploy.yaml 部署A ManticoreSearch
  • b-deploy.yaml 部署B ManticoreSearch
  • service.yaml 配置一个 service 可以访问http 和 mysql

a-deploy.yaml 与 b-deploy.yaml内容基本一致仅修改名称

a-deploy.yaml内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:name: manticore-search-a-dp
spec:replicas: 1selector:matchLabels: app: manticore-search-atemplate:metadata:labels:app: manticore-search-asearch: ms  #一个公共的标签用于service 发现spec:     nodeSelector:   kubernetes.io/hostname:  "u2-node" #直接部署在节点u2-node上# hostname + subdomain 自定义Pod的域名# manticore-search-a-host.manticore-search-a-domain.default.svc.cluster.localhostname: manticore-search-a-hostsubdomain: manticore-search-a-domainvolumes: - name: "msdata"hostPath:  # 宿主机文件夹  保存数据path: /devops/manticoresearch/data- name: "msconfig"hostPath:  # 宿主机文件夹 保存配置文件path: /devops/manticoresearch/config  containers:- name: manticore-search-a-containersimage: manticoresearch/manticore:6.0.4volumeMounts: #容器内部的文件夹# 此配置将容器内部/var/lib/manticore 挂载到 宿主机/devops/manticoresearch/data       - mountPath: "/var/lib/manticore"  #使用volumes:中配置的卷 (msdata)name: "msdata"  - mountPath: "/etc/manticoresearch"   name: "msconfig"          imagePullPolicy: IfNotPresent  #Alwaysenv:- name: "EXTRA" #开启安装列存储和二级索引value: "1"ports: - containerPort: 9308 protocol: TCP name: http - containerPort: 9306 protocol: TCP name: mysql - containerPort: 9312 protocol: TCP name: node     - containerPort: 9315protocol: TCP name: replication
---
# 集群内域名
apiVersion: v1
kind: Service
metadata:name:  manticore-search-a-domain    
spec: selector:app: manticore-search-aclusterIP: None                

service.yaml内容如下:

# http访问service
apiVersion: v1
kind: Service
metadata:name: manticore-search-http
spec:ports:- protocol: TCPport: 9308targetPort: 9308nodePort:  9308name: httpselector:search: mstype: NodePort --- 
# mysql访问service
apiVersion: v1
kind: Service
metadata:name: manticore-search-mysql
spec:ports:- protocol: TCPport: 9306targetPort: 9306nodePort:  9306name: mysqlselector:search: mstype: NodePort

再部署ManticoreSearch之前先在u2-node 与 u3-node主机上创建文件夹和配置文件 用于挂载

在这里插入图片描述

配置文件manticore.conf内容如下:

#!/bin/sh
ip=`hostname -i|rev|cut -d\  -f 1|rev`
cat << EOF
searchd {listen = $ip:9312listen = 0.0.0.0:9306:mysqllisten = 0.0.0.0:9308:httplisten = $ip:9315-9325:replicationlog = /var/log/manticore/searchd.logquery_log = /var/log/manticore/query.logpid_file = /var/run/manticore/searchd.piddata_dir = /var/lib/manticore
}EOF

执行kubectl apply -f 创建容器

在这里插入图片描述

安装过程会下载安装依赖包可能比较耗时

在这里插入图片描述

当出现accepting connections表示启动成功

在这里插入图片描述

测试使用service连接成功

在这里插入图片描述

创建集群

容器部署完成后即可开始创建集群

执行如下步骤:

登录到A容器内部, 使用mysql客户端连接
kubectl exec -it manticore-search-a-dp-6698f9bbcd-gkchh bash创建集群
create cluster mycluster;创建表
create table user(id int ,name string,job string,memo text);为集群添加表
alter cluster mycluster add user;查看集群状态
show status;
show status like '%cluster%';

在这里插入图片描述

完成以上步骤集群创建完成

加入集群

执行如下步骤:

登录到B容器内部, 使用mysql客户端连接
kubectl exec -it manticore-search-b-dp-65995646b6-99n2b bash加入集群(这里使用A容器的域名)
join cluster mycluster at 'manticore-search-a-host.manticore-search-a-domain.default.svc.cluster.local:9312';查看表
show tables;添加一条数据
insert into mycluster:user (id  ,name ,job ,memo )  VALUES ( 1,'刘一江','java程序员','一个程序员小卡拉米');

在这里插入图片描述

再次登录到A容器内部, 使用mysql客户端连接
kubectl exec -it manticore-search-a-dp-6698f9bbcd-gkchh bash查看数据
select * from user;

在这里插入图片描述

一些常用命令:

  • 1 集群中加表: ALTER CLUSTER <cluster_name> ADD <table_name>
  • 2 集群中删表:ALTER CLUSTER <cluster_name> DROP <table_name>

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python代码重构库之rope使用详解

概要 Python是一门强大的编程语言,但在大型项目中,维护和重构代码可能会变得复杂和困难。为了提高开发人员的效率和准确性,有许多工具可用于辅助代码重构和智能代码补全。其中之一是Python Rope。 Python Rope是一个用于Python编程语言的强大工具,它提供了丰富的功能,包…

EasyX图形库学习(一)

目录 一、easyX图形库基本介绍 1、easyX的原理 2、easyX的安装 3、easyX的颜色&#xff08;RGB颜色模型&#xff09; 颜色模型相关函数: 4、easyX的坐标 二、相关函数介绍: 绘图设备相关函数&#xff1a; 图形颜色及样式设置相关函数: 图形绘制相关函数: 文字输出相关…

iMazing 3中文版双平台版本同步,iOS 设备在 Windows 上也能自动备份了

自从WWDC 2019 宣布 iTunes 退役后&#xff0c;也许很多小伙伴都对「上位者」iMazing 有所耳闻。 这款设计更加人性化、功能细致强大的 iOS 备份管理工具。 iMazing 支持在 Windows 及 Mac 上运行&#xff0c;而这个月 Windows 版本更新至 2.17. 之后&#xff0c;iMazing 的双…

【GitHub项目推荐--一个由OpenAI提供支持的聊天机器人和虚拟助手的构建平台】【转载】

Botpress Botpress是一个开源项目&#xff0c;它提供了一个平台&#xff0c;用于构建、部署和管理基于人工智能的聊天机器人和虚拟助手 github地址&#xff1a; https://github.com/botpress/botpress Botpress的介绍 Botpress是一个开源项目&#xff0c;它提供了一个平台&…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TextClock组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之TextClock组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、TextClock组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不同…

【Power Platform】实现对SharePoint文档库中上传的文件进行审批

这次要分享的案例还是来自于我们客户的一个新需求。 我们这个客户主要是在使用SharePoint的List来搭建申请单&#xff0c;然后对申请单进行审批&#xff0c;但由于我们之前给客户提出的生成PDF打印件的方案&#xff0c;是需要先在SharePoint或OneDrive中放一个文档模板的&…

Keil软件某些汉字输出乱码,0xFD问题,51单片机

1. 问题 keil软件输入某些汉字的时候会输出乱码&#xff0c;例如&#xff1a;升、 数 2. 原因 keil软件会忽略0xFD。 升的GB2312编码为 0xc9fd&#xff0c;keil解析为0xc9数的GB2312编码为 0xcafd&#xff0c;keil解析为0xca 关于Keil软件中0xFD问题的说明 3. 解决方案1 …

从零开始复现GPT2(三):词表,Tokenizer和语料库的实现

源码地址&#xff1a;https://gitee.com/guojialiang2023/gpt2 GPT2 模型词表TokenizerTokenizer 类_normalize 方法_tokenize 方法_CHINESE_CHAR_RANGE 和 _PUNCTUATION_RANGE 数据集语料库TokenizedCorpus 类 模型 词表 定义了一个名为 Vocab 的类&#xff0c;用于处理和管理…

若依CMS代码审计

1.安装 安装过程 ruoyi-admin\src\main\resources\application-druid.yml配置数据库等信息 2.审计过程 2.1 文件下载漏洞(v4.7.6) 在com.ruoyi.web.controller.common.resourceDownload存在文件下载 首先简单分析下其代码&#xff1a;请求url如&#xff1a;http://127.0.0.1/c…

自然语言处理(NLP)技术使用

自然语言处理&#xff08;NLP&#xff09;技术使用 以下是一些自然语言处理&#xff08;NLP&#xff09;技术的例子&#xff1a;以上只是一些NLP技术的例子&#xff0c;还有许多其他的技术和应用&#xff0c;如文本分类、文本生成、问答系统等。NLP技术的发展正逐渐改变人们与计…

vivado 配置内存IP

配置内存IP UltraScale体系结构内存IP支持DDR3和DDR4 SDRAM的配置&#xff0c;QDRIIPLUS SRAM和RLDRAM3型接口。截至2015.3&#xff0c;内存IP已被拆分基于内存接口标准和工具流&#xff0c;将其划分为不同的IP。“自定义IP”对话框框包含基本和高级配置选项&#xff0c;其中包…

git使用以及工作中开发流程

Git是当前最先进、最主流的分布式版本控制系统&#xff0c;免费、开源。 主要概念&#xff1a; 基本流程&#xff1a; 命令&#xff1a; git commit -a # 省略了add到暂存区的步骤&#xff0c;直接提交工作区的修改内容到版本库&#xff0c;不包括新增的文件。git fetc…

校园圈子论坛系统--APP小程序H5,前后端源码交付,支持二开!uniAPP+PHP书写!

随着移动互联网的快速发展&#xff0c;校园社交成为了大学生们日常生活中重要的一部分。为了方便校园内学生的交流和互动&#xff0c;校园社交小程序逐渐走入人们的视野。本文将探讨校园社交小程序的开发以及其带来的益处。 校园社交小程序的开发涉及许多技术和设计方面。首先&…

Qt|QPushButton控件讲解

前提 按钮分为了四种状态&#xff1a;常态、聚焦、按下、禁用 前一段时间更新了MFC框架下CButton的自绘。因为MFC框架下的按钮限制性很高&#xff0c;所以只能由自绘实现各种风格&#xff0c;但是QT框架完美的解决了这个问题&#xff0c;我们只需要了解如何调用&#xff0c;就…

封装通用mixins,在vue中实现a-table组件的可伸缩列(详细且使用便捷)

1、实现效果 2、使用场景 vue2 antd-vue 1.x版本由于antd-vue 1.x版本的组件库没有提供可伸缩列的功能&#xff0c;才需要我们手动开发在antd-vue 3.x版本以上的表格已经支持这个功能&#xff0c;不需要我们再去手动开发 3、话不多说&#xff0c;上代码 首先安装vue-dragga…

语义分割:从早期探索到深度学习的突破

语义分割&#xff1a;从早期探索到深度学习的突破 语义分割的端倪&#xff1a;从早期探索到深度学习的突破引言早期技术&#xff1a;图像处理与模式识别边缘检测区域生长图割(Graph Cut)聚类方法 深度学习的兴起&#xff1a;CNN革命2012年 AlexNet的突破全卷积网络&#xff08;…

6、基于机器学习的预测

应用机器学习的任何预测任务与这四个策略。 文章目录 1、简介1.1定义预测任务1.2准备预测数据1.3多步预测策略1.3.1多输出模型1.3.2直接策略1.3.3递归策略1.3.4DirRec 策略2、流感趋势示例2.1多输出模型2.2直接策略1、简介 在第二课和第三课中,我们将预测视为一个简单的回归问…

vue核心知识点

一、Vue基础知识点总结 开发vue项目的模式有两种&#xff1a; 基于vue.js&#xff0c;在html中引入vue.js&#xff0c;让vue.js管理div#app元素。基于脚手架环境&#xff1a;通过vue脚手架环境可以方便的创建一个通用的vue项目框架的模板&#xff0c;在此基础之上开发vue项目…

基于SpringBoot Vue学生信息管理

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

Redis -- 单线程模型

失败是成功之母 ——法国作家巴尔扎克 目录 单线程模型 Redis为什么这么快 单线程模型 redis只使用一个线程&#xff0c;处理所有的命令请求&#xff0c;不是说redis服务器进场内部真的就只有一个线程&#xff0c;其实也有多个线程&#xff0c;那就是处理网络和io的线程。 R…