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:9312
    listen = 0.0.0.0:9306:mysql
    listen = 0.0.0.0:9308:http
    log = /var/log/manticore/searchd.log
    query_log = /var/log/manticore/query.log
    pid_file = /var/run/manticore/searchd.pid
    data_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: 1
    selector:
       matchLabels: 
          app: manticore-search-a
    template:
       metadata:
           labels:
              app: manticore-search-a
              search: 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.local
            hostname: manticore-search-a-host
            subdomain: manticore-search-a-domain
            volumes: 
               - name: "msdata"
                 hostPath:  
                   # 宿主机文件夹  保存数据
                   path: /devops/manticoresearch/data
               - name: "msconfig"
                 hostPath:  
                   # 宿主机文件夹 保存配置文件
                   path: /devops/manticoresearch/config  
            containers:
                - name: manticore-search-a-containers
                  image: manticoresearch/manticore:6.0.4
                  volumeMounts: 
                       #容器内部的文件夹
                       # 此配置将容器内部/var/lib/manticore 挂载到 宿主机/devops/manticoresearch/data       
                    - mountPath: "/var/lib/manticore"  
                      #使用volumes:中配置的卷 (msdata)
                      name: "msdata"  
                    - mountPath: "/etc/manticoresearch"   
                      name: "msconfig"          
                  imagePullPolicy: IfNotPresent  #Always
                  env:
                    - name: "EXTRA" #开启安装列存储和二级索引
                      value: "1"
                  ports: 
                      - containerPort: 9308 
                    protocol: TCP 
                    name: http 
                  - containerPort: 9306 
                    protocol: TCP 
                    name: mysql 
                  - containerPort: 9312 
                    protocol: TCP 
                    name: node     
                  - containerPort: 9315
                    protocol: TCP 
                    name: replication
---
# 集群内域名
apiVersion: v1
kind: Service
metadata:
  name:  manticore-search-a-domain    
spec: 
  selector:
    app: manticore-search-a
  clusterIP: None                

service.yaml内容如下:

# http访问service
apiVersion: v1
kind: Service
metadata:
  name: manticore-search-http
spec:
  ports:
    - protocol: TCP
      port: 9308
      targetPort: 9308
      nodePort:  9308
      name: http
  selector:
     search: ms
  type: NodePort 
  
  
--- 
# mysql访问service
apiVersion: v1
kind: Service
metadata:
  name: manticore-search-mysql
spec:
  ports:
    - protocol: TCP
      port: 9306
      targetPort: 9306
      nodePort:  9306
  name: mysql
  selector:
     search: ms
  type: NodePort

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

在这里插入图片描述

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

#!/bin/sh
ip=`hostname -i|rev|cut -d\  -f 1|rev`
cat << EOF
searchd {
    listen = $ip:9312
    listen = 0.0.0.0:9306:mysql
    listen = 0.0.0.0:9308:http
    listen = $ip:9315-9325:replication
    log = /var/log/manticore/searchd.log
    query_log = /var/log/manticore/query.log
    pid_file = /var/run/manticore/searchd.pid
    data_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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【原神游戏开发日志5】同地图多客户端玩家同步

版权声明&#xff1a; ● 本文为“优梦创客”原创文章&#xff0c;您可以自由转载&#xff0c;但必须加入完整的版权声明 ● 文章内容不得删减、修改、演绎 ● 本文视频版本&#xff1a;见文末 ● 相关学习资源&#xff1a;见文末 前言 ● 今天给大家分享选角色、进游戏 打包…

员工持股方案

目的&#xff1a;为激发员工积极性&#xff0c;留住好员工&#xff0c;给员工提供创业机会&#xff0c;使员工共同关注企业发展&#xff0c;建立促进企业发展的激励机制。股权设置与持股比例&#xff1a; 公司以总资产 万元&#xff0c;折合股权 份&#xff0c;每股 …

【algorithm】一个简单的PID工程 base 用于手生时候快速复习 用于设计模式 cpp语法八股 快速复习校验

写在前面 最近项目一直用matlab&#xff0c;防止手生整一个回忆工具使用的简单的pid demo&#xff0c;走一边流程&#xff0c;包括配工程debug看结果&#xff0c;复用之前记录的配置见我的bloghttps://blog.csdn.net/weixin_46479223/article/details/135082867?csdn_share_t…

【算法】登山(线性DP,最长上升)

题目 五一到了&#xff0c;ACM队组织大家去登山观光&#xff0c;队员们发现山上一共有N个景点&#xff0c;并且决定按照顺序来浏览这些景点&#xff0c;即每次所浏览景点的编号都要大于前一个浏览景点的编号。 同时队员们还有另一个登山习惯&#xff0c;就是不连续浏览海拔相…

小程序样例4:个人中心+我的书单

基本功能&#xff1a; 1、展示个人基本信息&#xff1a;头像、昵称 、读书时间统计 2、邮件列表&#xff0c;点击加入计划跳转到书架 3、今日任务 学习进度 4、邮件滑动到最末尾或者最开始&#xff0c;会有弹框提示&#xff1a; 5、图书搜索框 代码分析&#xff1a; 1、邮件…

和朋友随时随地玩——幻兽帕鲁服务器极简部署流程

什么是游戏服务器&#xff1f;通俗来说就是一个公共的电脑&#xff0c;玩家可以在任意时刻进入服务器游玩&#xff0c;不需要等待某个玩家创建房间&#xff0c;即可任意在一个世界一起游戏 本文将为您提供极简部署幻兽帕鲁服务器的指引&#xff0c;「仅需轻点三次鼠标&#xff…

get out of black background

文章目录 基础 Sequence settings (after selected a Sequence) 看见 ( 让Pr表示透明 ) Effects-> Color Key, drag into your Sequence >.如果看不到 Effects 面板, 可以在 Window 菜单中打开 在Effect Controls 你可以调整 Color Key 的效果了先吸取黑色 还可以使用ma…

力扣136、只出现一次的数字(简单)

1 题目描述 图1 题目描述 2 题目解读 在非空整数数组nums中&#xff0c;有一个元素只出现了一次&#xff0c;其余元素均出现两次。要求找出那个只出现一次的元素。 3 解法一&#xff1a;位运算 位运算&#xff0c;是一种非常简便的方法。 3.1 解题思路 异或运算&#xff0c;有…

力扣hot100 数组中的第K个最大元素 堆 三路划分

Problem: 215. 数组中的第K个最大元素 文章目录 思路复杂度Code 思路 &#x1f468;‍&#x1f3eb; 参考 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( log ⁡ n ) O(\log{n}) O(logn) Code class Solution {public int findKthLargest(int[] nums, int k…

Kafka运维相关知识

目录 一、基本概念 二、技术特性 三、设计思想 四、运维建议 一、基本概念 Apache kafka 是一个分布式的基于push-subscribe的消息系统&#xff0c;它具备快速、可扩展、可持久化的特点。它的最大的特性就是可以实时的处理大量数据以满足各种需求场景&#xff1a;比如基于h…

Facebook的社交影响力:用户行为解析与趋势

在当今数字时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分&#xff0c;而Facebook作为全球最大的社交平台之一&#xff0c;其社交影响力愈发显著。本文将深入分析Facebook的社交影响力&#xff0c;解析用户行为&#xff0c;同时探讨当前和未来的社交趋势。 社…

强大的虚拟机Parallels Desktop 19 mac中文激活

Parallels Desktop是一款功能全面、易于使用的虚拟机软件&#xff0c;它为用户提供了在Mac电脑上同时运行多个操作系统的便利。 软件下载&#xff1a;Parallels Desktop 19 mac中文激活版下载 Parallels Desktop 19 mac具有快速启动和关闭虚拟机的能力&#xff0c;让用户能够迅…

记录 arm 开发板上 nginx 配置 http 服务注意事项

1. 自定义项目&#xff0c;需要在 conf.d 目录中增加一个 .conf 配置文件&#xff1a; server {listen 9200; # 端口号server_name localhost; # 服务名称location / {root /home/imx6q/media; # 项目根目录&#xff08;需要修改 n…

C++ 类与对象(中)

本节目标 1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认…

【JVM】类加载流程

目录 1.加载 2.链接 &#xff08;1&#xff09;校验 &#xff08;2&#xff09;准备 &#xff08;3&#xff09;解析 3.初始化 4.使用 5.卸载 1.加载 加载阶段&#xff0c;简言之&#xff0c;查找并加载类的二进制数据&#xff0c;生成 Class 的实例 在加载类时&#x…

QT学习日记 | QT的环境搭建

目录 前言 一、QT概述 二、QT的环境搭建 1、QT SDK安装 2、环境变量的配置 前言 本系列为小编新开的一个系列&#xff0c;主要记录小编学习QT的过程&#xff0c;作为笔记仅供各位参考&#xff1b; 一、QT概述 Qt是一个跨平台C图形应用界面框架&#xff1b;简单来说&#x…

RK3568平台 热插拔机制

一.热插拔的基本概念 热插拔是指在设备运行的情况下&#xff0c;能够安全地插入或拔出硬件设备&#xff0c;而无需关闭或重启系统。这意味着你可以在计算机或其他电子设备上插入或拔出硬件组件&#xff08;比如USB设备&#xff0c;扩展卡&#xff0c;硬件驱动器等&#xff09;…

一张序列图搞懂resilience4j的工作原理

本文主要回答以下几个问题&#xff1a; Spring Cloud与Resilience4j如何集成的&#xff08;spring-cliud-circuitbreaker-resilience4j模块的 Resilience4JAutoConfiguration类实现了主要组件的注入&#xff0c;特别是在Resilience4jBulkheadConfiguration中定义如何自定义fac…

Java特别篇--匿名对象与匿名内部类

文章目录 一、匿名对象二、匿名内部类 很多小伙伴对匿名对象和匿名内部类的写法有点陌生&#xff0c;这里专门写一篇来帮助大家认识一下他们的写法。 一、匿名对象 比如现在有一个Student类&#xff0c;里面啥也没有写&#xff1a; /*** ClassName: Student* Package: PACKAG…

kettle通过severice_name连接oracle数据源踩坑

最近在研究kettle做数据抽取核对&#xff0c;按照官网安装kettle后无法连接oracle 坑1&#xff1a;kettle 连接oracle的数据库名指的是sidname 而非severicename&#xff0c;前期一直使用severicename 如下始终报错 注意区分下&#xff1a; SID:一个数据库可以有多个实例&…