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>
  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Manticore Search被认为是Elasticsearch的一个良好替代品,并且在未来可能取代ELK中的E。Manticore Search在GitHub上拥有大量的忠实用户和收获了3.7k star,并且开源者在GitHub上明确表示了这一点。虽然Manticore Search被认为是一个高性能的搜索引擎,但是还是有一些使用Elasticsearch的情况。比如,日志统一上报系统中,通过使用Elasticsearch可以实现定位时长更快的检索,而Manticore Search需要等待小时级别才能定位。另外,一些用户也使用ClickHouse作为替代方案。总的来说,Manticore Search在性能和全文搜索功能方面表现出色,但在某些特定场景下,仍需要使用Elasticsearch。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [10倍提升效率,号称取代Elasticsearch轻量级搜索引擎,有多强悍?](https://blog.csdn.net/afreon/article/details/131526432)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [远程日志 es elastic search vs clickhouse](https://blog.csdn.net/u013166171/article/details/122872465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂寞的4角钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值