MongoDB 4.x 实时同步到 ElasticSearch 6.x +

2024-01-08

我正在尝试找到一种简单的方法将 mongoDB 4.x 中的数据同步到 elasticsearch 6.x 。我的用例是 Elasticsearch 支持但 mongodb 不支持的部分文本搜索。 MongoDB 是我的应用程序的主要数据库。

我发现的所有解决方案似乎都已过时,并且仅支持旧版本的 mongoDB / elasticsearch。其中包括 mongodb-connector、mongodb River

最好使用什么工具才能将 mongoDB 中数据的任何更改(CRUD)自动同步到 Elasticsearch?


如果你使用 docker,你可以得到这个教程

https://github.com/ziedtuihri/Monstache_Elasticsearch_Mongodb https://github.com/ziedtuihri/Monstache_Elasticsearch_Mongodb

Monstache 是一个用 Go 编写的同步守护进程,可持续将 MongoDB 集合索引到 Elasticsearch 中。 Monstache 使您能够使用 Elasticsearch 对 MongoDB 数据进行复杂的搜索和聚合,并轻松构建实时 Kibana 可视化和仪表板。 蒙斯塔什的文档:
https://rwynn.github.io/monstache-site/ https://rwynn.github.io/monstache-site/
github:
https://github.com/rwynn/monstache https://github.com/rwynn/monstache

docker-compose.yml

version: '2.3'
networks:
  test:
    driver: bridge

services:
  db:
    image: mongo:3.0.2
    expose:
      - "27017"
    container_name: mongodb
    volumes:
      - ./mongodb:/data/db
      - ./mongodb_config:/data/configdb
    ports:
      - "27018:27017"
    command: mongod --smallfiles --replSet rs0
    networks:
      - test

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.8.7
    container_name: elasticsearch
    volumes:
      - ./elastic:/usr/share/elasticsearch/data
      - ./elastic/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - 9200:9200
    command: elasticsearch -Enetwork.host=_local_,_site_ -Enetwork.publish_host=_local_
    healthcheck:
      test: "wget -q -O - http://localhost:9200/_cat/health"
      interval: 1s
      timeout: 30s
      retries: 300
    ulimits:
      nproc: 65536
      nofile:
        soft: 65536
        hard: 65536
      memlock:
        soft: -1
        hard: -1
    networks:
      - test

  monstache:
    image: rwynn/monstache:rel4
    expose:
      - "8080"
    ports:
      - "8080:8080"
    container_name: monstache
    command: -mongo-url=mongodb://db:27017 -elasticsearch-url=http://elasticsearch:9200 -direct-read-namespace=Product_DB.Product -direct-read-split-max=2
    links:
      - elasticsearch
      - db
    depends_on:
      db:
        condition: service_started
      elasticsearch:
        condition: service_healthy
    networks:
      - test

复制集.sh

#!/bin/bash

# this configuration is so important 
echo "Starting replica set initialize"
until mongo --host 192.168.144.2 --eval "print(\"waited for connection\")"
do
    sleep 2
done
echo "Connection finished"
echo "Creating replica set"
mongo --host 192.168.144.2 <<EOF
rs.initiate(
  {
    _id : 'rs0',
    members: [
      { _id : 0, host : "db:27017", priority : 1 }
    ]
  }
)
EOF
echo "replica set created"

1)在终端运行此命令 $ sysctl -w vm.max_map_count=262144

如果你在服务器上工作我不知道是否有必要

2)在终端运行 docker-compose 构建

3)在终端运行 $ docker-compose up -d

不要放下你的容器。

$ 码头工人 PS

复制mongodb镜像的IP地址

$ docker 检查 id_of_mongo_image

复制IP地址并将其设置在replicaset.sh中并运行replicaset.sh

$ ./replicaset.sh

在终端上你应该看到 => 副本集已创建

$ docker-compose 下来

4)在终端运行 $ docker-compose up

最后 .......

MongoDB 中的复制

副本集是一组mongod https://docs.mongodb.com/manual/reference/program/mongod/#bin.mongod维护相同数据集的实例。副本集包含多个数据承载节点和一个可选的仲裁节点。在数据承载节点中,只有一个成员被视为主节点,而其他节点被视为次节点。
The 主节点 https://docs.mongodb.com/manual/core/replica-set-primary/接收所有写操作。副本集只能有一个能够确认写入的主数据库{ w:“多数” } https://docs.mongodb.com/manual/reference/write-concern/#writeconcern.%22majority%22写下关心;尽管在某些情况下,另一个 mongod 实例可能会暂时认为自己也是主要的。
查看副本集配置。 使用rs.conf() https://docs.mongodb.com/manual/reference/method/rs.conf/#rs.conf

副本集允许您将 MongoDB 集合实时同步索引到 Elasticsearch 中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 4.x 实时同步到 ElasticSearch 6.x + 的相关文章

  • 在 Meteor 应用程序中实现 MongoDB 2.4 的全文搜索

    我正在考虑向 Meteor 应用程序添加全文搜索 我知道 MongoDB 现在支持此功能 但我对实现有一些疑问 启用文本搜索功能的最佳方法是什么 textSearchEnabled true 在 Meteor 应用程序中 有没有办法添加索引
  • GSON 将带有日历的对象反序列化为带有 Mongo 日期的 json 并返回

    我有一些实体 其中包含一些日历属性 我想以将它们存储为 GSON 序列化 JSON 中的日期的方式对其进行序列化 因为 Mongo 可以将 date 存储为 new ISODate 我们通常通过使用 ExclusionStrategy 忽略
  • Mongo 正则表达式用于“不匹配”或反向[重复]

    这个问题在这里已经有答案了 我的 mongo 文档都包含一个名为templateName 有一些包含该值的文档 a SystemDefaultTemplate b SystemDefaultTemplate c SystemDefaultT
  • 将base64图像转换为Node Js中的文件

    我是 Node Js 新手 我需要包含用户的个人资料图片 我从 IOS 应用程序收到 Base64 图像的请求 我需要将其存储在 images 文件夹中并将图像路径保存在 mongodb 数据库中 我使用了以下代码 var bitmap n
  • GET Ajax 在响应中返回 html 代码而不是 json 对象

    我有一个 ajax get 请求 如下所示 我正在使用 Nodejs Express 向 openshift 中的 server js 发出 GET 请求 但是 我在响应方法中获取 html 内容而不是 json 对象 这两个请求都是针对同
  • 错误:子进程失败,退出,错误号为 51 MongoDB

    重新启动 MongoDB 时出现此错误 我正在使用 Mongo 3 2 4 并在新机器上进行此设置 Starting mongod about to fork child process waiting until server is re
  • 如何将 CSV 文件中的数据导入到服务器端的 Meteor 集合中

    我正在尝试为我之前的帖子找到解决方案 Mongo 在 Meteor 应用程序中的 id 字段上给出重复键错误 https stackoverflow com questions 28961281 mongo gives duplicate
  • 使用 Mongoose 将数组(“标签”)保存到 MongoDB

    我正在玩 Mongoose 但在保存到数组时遇到问题 例如 我在页面上有一个以逗号分隔的输入字段tags 我从 req body tags 中获取这些内容 删除空格 然后用逗号分隔它们以获得标签数组 现在 如何将该数组保存回我的数据库 我猜
  • 由于WiredTiger.turtle权限,Mongodb无法启动

    我试图在 ubuntu 16 04 上启动 mongodb 4 0 4 但数据库拒绝了我的所有尝试 我检查了 mongodb 日志文件 发现名为 WiredTiger turtle 的文件没有所需的权限 这里记录错误 2018 11 26T
  • NodeJS 中的密码重置

    我已经设置使用 NodeJS Passport 更新用户的密码 我遵循了这个很棒的指南 http sahatyalkabov com how to implement password reset in nodejs http sahaty
  • MongoDB - 在父文档中填充 GridFS 文件元数据

    我使用 NodeJS 与 Express MongoDB Mongoose 和 GridFS 来上传和检索文件 我想通过 ID 引用其他文档中的文件 并在查询其他文档时填充文件元数据 例如 如果我有一个包含这样的文档的 用户 集合 id O
  • 如何在 MongoDB 中获取连接的客户端

    我正在编写一个使用 mongo 作为数据库的应用程序 我想打印连接到数据库的客户端 例如打印他们的ip 我怎样才能得到这些信息 我尝试使用 db serverStatus connections 但它给了我可以访问我的数据库的计算机数量 您
  • Elasticsearch 可搜索合成字段

    假设源文档 JSON 中存在几个名为的字段 a and b 属于类型long 我想构建一个综合字段 例如c 通过用下划线连接前面字段的值和 将其索引为keyword 也就是说 我正在研究一个可以通过如下虚构的部分映射来支持的功能 a typ
  • 如何将excel文件(XLSX)导入mongoDB [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一组数据作为输入以 XLSX 格式提供给 MongoDB 我该如何将 Excel 文件作为输入导入
  • mongodb 通配符匹配特定键的所有值[重复]

    这个问题在这里已经有答案了 我试图弄清楚如何匹配一个键并返回该键的所有值 是否可以将值作为通配符给出 我想在值上使用通配符返回该特定键的所有内容 db collection find key 我还希望这也能返回整个集合 其中的键也与通配符值
  • 猫鼬查找并删除

    我正在尝试删除满足查询的多个文档 但是 我需要这些文档的数据将它们存储在单独的集合中以实现撤消功能 我让它工作的唯一方法是使用多个查询 Data find query exec function err data Data remove q
  • 对开始和结束范围进行分组和计数

    如果我有以下格式的数据 id 1 startDate ISODate 2017 01 1T00 00 00 000Z endDate ISODate 2017 02 25T00 00 00 000Z type CAR id 2 startD
  • Pymongo 中的全文搜索

    即将推出的 MongoDB 2 4 支持全文检索 http docs mongodb org manual release notes 2 4 text indexes 我们在 mongo shell 中使用命令来执行此操作 例如 db p
  • Mongoose 选择要从 findOneAndUpdate 返回的字段

    在 Nodejs 中使用 Mongoose 您可以使用 find 返回一些字段 例如 User findOne id 132324 first name 1 last name 1 exec 但我似乎无法弄清楚如何使用 findOneAnd
  • query_string 和 multi_match 有什么区别?

    运行此查询时 query string query text fields field1 field2 multi match query text fields field1 field2 有什么不同 何时使用其中之一 何时使用另一个 q

随机推荐

  • 从 HTML 横向打印

    我有一个 HTML 报告 由于列很多 需要横向打印 有没有办法做到这一点 而无需用户更改文档设置 浏览器有哪些选项 在 CSS 中 您可以设置 page 属性 如下所示 media print page size landscape pag
  • 如何将存储过程中的大量参数从代码传递到 SQL Server

    如何从代码中将大量参数 比如 20 传递给存储过程 就像我们可以将所有参数分组在一个类对象中然后将其传递一样 但是在存储过程的情况下如何实现这样的 this 目前我必须创建 20 多个变量来传递参数 谢谢 阿什瓦尼 如果您使用的是 SQL
  • 宏 if 语句返回错误:运算符“&&”没有正确的操作数

    我在许多 Linux 机器上编译代码 在特定机器上 我收到以下错误 error operator has no right operand 宏代码为 if LINUX VERSION CODE KERNEL VERSION 3 12 49
  • Perl Moose:仅在 BUILD 子例程中提到时才设置属性

    我正在构建一个脚本 该脚本以递归方式构建目录的子目录 文件的名称以及这些子目录中的文件的名称作为对象 package Dir use Moose use Modern Perl use File use strict use warning
  • numpy 与 python:将 3d 数组转换为 2d

    假设我有一张彩色图像 自然地 这将由 python 中的 3 维数组表示 例如形状 n x m x 3 并称之为 img 我想要一个新的二维数组 将其称为 narray 其形状为 3 nxm 这样该数组的每一行分别包含 R G 和 B 通道
  • 我是 python 新手,我不知道这是否有效[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions import time varthi
  • 需要更好的模板语言[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 对我知道那个this https stackoverflow com questions 3793880 lightweight temp
  • HXT 获取第一个元素:重构奇怪的箭头

    我需要先获取文本内容 p 这是的孩子 p div class about 写了如下代码 tagTextS IOSArrow XmlTree String tagTextS getChildren gt gt gt getText gt gt
  • Apache Spark:如何取消代码中的作业并终止正在运行的任务?

    我正在 Hadoop 集群上运行 Spark 应用程序 版本 1 6 0 并在客户端模式下使用 Yarn 版本 2 6 0 我有一段运行长时间计算的代码 如果它花费的时间太长 我想杀死它 然后运行一些其他函数 这是一个例子 val conf
  • Google Drive API 和从浏览器上传文件

    我正在尝试使用 Google Drive api 上传文件 并且元数据正确 并且我想确保实际的文件内容已存在 我有一个简单的页面设置 如下所示 div h6 File Upload Operations h6 div
  • 来自 Python 的 Win32 长路径

    注意 这个问题是关于新支持的win32长路径 https superuser com questions 1119883 windows 10 enable ntfs long paths policy option missing 自 W
  • 如何确定哪个 Windows 进程是管理当前进程输出的“音频会话”?

    我碰巧在这里使用 Python 绑定 但我怀疑这个问题和最终的答案并不是 Python 特有的 在 Windows 10 上 使用Python 绑定到 Windows 的 Core Audio 库 https github com Andr
  • 限制单个 RDD 的最大并行度而不减少分区数量

    是否可以在不改变实际分区数量的情况下限制RDD级别的最大并发任务数 用例是在不减少分区数量的情况下 不要因过多的并发连接而压垮数据库 减少分区数量会导致每个分区变得更大并最终难以管理 我将其重新发布为 答案 因为我认为这可能是最不肮脏的黑客
  • 使用 MSBuild FileUpdate 任务仅更改 AssemblyInfo.cs 中的修订号

    我只需要更改版本号AssemblyInfo cs文件 版本号的格式为主要 次要 构建 修订 e g 1 4 6 0 目前我用以下命令更改版本FileUpdate任务 来自MSBuild 社区任务项目 http msbuildtasks ti
  • 将 JUNG 移植到 GWT [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有一个非常好的java图形库JUNG http jung sourceforge net 我想知道是否存在任何 GWT 库可以完成 JUN
  • 无法更新 Xcode 11 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 尝试从 Xcode 11 GM 更新到 11 1 总是失败 我首先尝试移动 Applications Xcode app 没有任何效果 这
  • 无法关闭 CFMX 8 中的持久跟踪 cookie

    CFMX 8 企业版 我已打开 内存变量 下的 使用 J2EE 会话变量 设置 因为安全要求规定不能使用持久 cookie 我知道打开此设置将告诉 CF 仅创建和使用 JSESSIONID 会话 cookie 然而 我的服务器似乎仍在创建和
  • 如何在 rxjs 管道中有条件地执行某些操作?

    有人可以告诉我带有条件操作的 rxjs 管道的正确语法是什么吗 在这种情况下 如果环境名称数组长度不为 1 我想使用过滤器进行映射 如何使用不返回的 if 语句 是否有任何 rxjs 运算符 environmentName env1 env
  • SwiftUI:ViewModifier,其中内容是图像

    我收到错误 Type PlayButtonModifier does not conform to protocol ViewModifier 我不明白为什么 更重要的是 我不明白如何正确地做到这一点 我只是尝试创建一个ViewModifi
  • MongoDB 4.x 实时同步到 ElasticSearch 6.x +

    我正在尝试找到一种简单的方法将 mongoDB 4 x 中的数据同步到 elasticsearch 6 x 我的用例是 Elasticsearch 支持但 mongodb 不支持的部分文本搜索 MongoDB 是我的应用程序的主要数据库 我