转载自:https://elasticstack.blog.csdn.net/article/details/114639152

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。Elasticsearch 是一个高效强大的大数据搜索引擎。它的 Speed, Scale 及 Relevance 是很多数据库不具有的。通过 Elasticsearch 的高效搜索引擎,我们可以快速地搜索相关的内容,我们也可以使用 Kibana 所提供的可视化为数据提供洞察。在今天的文章中,我将介绍如何把 MongoDB 里的数据同步到 Elasticsearch。如果你对 JDBC 的数据同步到 Elasticsearch,请参阅我之前的文章 “Logstash:如何使用 Logstash 和 JDBC 确保 Elasticsearch 与关系型数据库保持同步”。

在今天的练习中,我将使用如下的系统结构:

在上面的系统中,我有三个机器:两个运行 Ubuntu OS 20.04 及一个运行 MacOS 的电脑。在两个 Ubuntu OS 上分别运行 MongoDB,而在 MacOS 上运行有 Elasticsearch 及 Kibana,同时我们还在它上面运行了一个 docker。在 docker 里运行 Monstache。Monstache 是一个 Go 语言写的应用,用来实时同步 MongoDB 里的数据到 Elasticsearch。在这里必须说明的一点是:为了能够使得 MongoDB  和 Elasticsearch 同步,我们必须针对 MongoDB 部署一个 replica set。Monstache 使用 MongoDB 的 oplog 作为事件源。 你将需要确保通过部署副本集将 MongoDB 配置为生成操作日志。

安装
Elasticsearch 我们可以阅读文章 “如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch” 安装到 MacOS 上或者你自己喜欢的系统上。因为为了让 Elasticsearch 能够正常被 Docker 所访问,所以,我们需要对它的配置做一些小的改动: config/elasticsearch.yml network.host: 0.0.0.0
discovery.type: single-node 通过这样的配置,我们的 Elasticsearch 可以同时以 http://localhost:9200 及 http://privateIP:9200 访问。配置完后,启动 Elasticsearch。
Kibana 我们可以通过参阅文章 “Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana” 来按照 Kibana。
MongoDB 我们可以参考链接来安装 MongoDB。简单地说: 在 Terminal 中打入如下的命令: wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add - 然后执行如下的命令: echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list 针对不同的 Ubuntu 版本,有不同的命令。 接着执行如下的命令: sudo apt-get update
sudo apt-get install -y mongodb-org 我们安装上面的步骤针对两个 Ubuntu 的机器分别部署。接下来,我们需要针对这两个 Ubuntu 机器上的 MongoDB 进行配置。首先使用你喜欢的编辑器打开文件 /etc/mongod.conf /etc/mongod.conf 我们针对两个机器分别进行配置。请注意上面的 bindIp,针对不同的机器,它们的私有 IP 地址是不同的。另外一个集群的配置是这样的: 经过上面的配置后,我们在两个 Ubuntu 机器上分别启动 MongoDB 的服务: sudo service mongod start 我们可以通过如下的命令来查看 MongoDB 服务的运行状态: service mongod status 如果能看到上面的 active 状态,则表示我们的 MongoDB 运行正常。我们接着在 terminal 中打入如下的命: mongo 192.168.0.4 请注意上面的 IP 地址是当前机器的 private IP 地址。我们接着打入如下的命令: rs.initiate() 我们可以打入 rs.status() 命令来查看 replica 的状态。当前的 MongoDB 为 primary。 这样我们就配置好了 MongoDB 的 replica set。我们可以在 Primary 的 MongoDb 里创建一个数据库: 在上面我们在 PRIMARY 的机器里创建了一个叫做 mydatabase 的数据库。我们回到 SECONDARY 的机器里来查看: 在 SECONDARY 里,我们看不到任何的东西。我们可以使用如下命令: rs.slaveOk() 在上面,我们可以看到 mydatabase 已经被复制过来了。在 SECONDARY MongoDB 里,我们不可以创建任何的数据库: Monstache 正对 Monstache 有两种安装方法,一种是直接从地址 https://github.com/rwynn/monstache 下载源码,并使用 Go 的环境进行编译。在今天的练习中,我将使用 Docker 来部署。我们在自己的电脑中创建如下的一个文件结构: $ pwd
/Users/liuxg/demos/monstache
$ tree -L 3
.
├── docker-compose.yml
└── monstache
├── config.toml
├── logs
│ └── error.log
└── scripts
└── collection_name.js 3 directories, 4 files 为了配置容器,我们定义 docker-compose.yml 文件如下: docker-compose.yml version: '3'
services:
monstache_container_name:
image: rwynn/monstache:latest
container_name: container_name
working_dir: /monstache
command: -f ./config.toml
volumes:
- ./monstache:/monstache/
ports:
- "8080:8080"
restart: always
networks:
app-network:
driver: bridge 为了配置 monstache 的管道,我们配置 config.toml 如下: config.toml mongo-url = "mongodb://192.168.0.4:27017"
elasticsearch-urls = ["http://192.168.0.3:9200"]
elasticsearch-user = "elastic"
elasticsearch-password = "password"
direct-read-namespaces = ["test.mycol"]
change-stream-namespaces = ["test.mycol"]
[logs]
error = "./logs/error.log"
[[mapping]]
namespace = "test.mycol"
index = "mongodb" [[script]]
namespace = "test.mycol"
path = "./scripts/collection_name.js"
routing = true 在上面: mongodb-url:这个是你的 mongodb 的地址
elasticsearch-url:这个是你的 Elasticsearch 的地址
elasticsearch-user:访问 Elasticsearch 所需要的账号
elasticsearch-password:访问 Elasticsearch 所需要的密码
direct-read-namespaces:此选项允许你直接将集合从 MongoDB 复制到 Elasticsearch。 Monstache 允许过滤实际索引到 Elasticsearch 的数据,因此你不一定需要复制整个集合。 在上面,我们同步数据库 test 中的 mycol 集合。
change-stream-namspace:实时通知以告知 Elasticsearch 所有写入文档,包括指定集合中的删除和更新。 [logs]: 记录错误信息 [mapping]: 改写默认的索引名称。在上面我们的索引名称为 mongodb [[script]]:是一种中间件,能够转换,删除文档或定义索引元数据。 可以使用 Javascript 或 Golang 作为插件编写该中间件。 用于转换文档的脚本示例。 module.exports = function (doc) {
delete doc._id;
//TODO
return doc;
} 我们把上面的内容复制到 collection_name.js 文件中去。 好了到此为止,我们的配置已经完成。我们可以使用如下的命令来启动 Monstache: docker-compose up -d 测试数据同步 我们到 MongoDB 的 PRIMARY 中打入如下的命令: 我们启动 Kibana 来进行查看索引 mongodb: 至此,我们完成了从 MongoDB 的数据实时地同步到 Elasticsearch。

Elasticsearch:同步 MongoDB 数据到 Elasticsearch的更多相关文章

  1. logstash同步mongodb数据到elasticsearch

    一.安装logstash 二.安装mongodb插件 cd D:\Software\ELK5.5.0\logstash-5.5.0\bin logstash-plugin install logsta ...

  2. 推荐一个同步Mysql数据到Elasticsearch的工具

    把Mysql的数据同步到Elasticsearch是个很常见的需求,但在Github里找到的同步工具用起来或多或少都有些别扭. 例如:某记录内容为"aaa|bbb|ccc",将其按 ...

  3. 用elasticsearch索引mongodb数据

    参照网页:单机搭建elasticsearch和mongodb的river 三个步骤: 一,搭建单机replicSet二,安装mongodb-river插件三,创建meta,验证使用 第一步,搭建单机m ...

  4. 通过logstash-input-mongodb插件将mongodb数据导入ElasticSearch

    目的很简单,就是将mongodb数据导入es建立相应索引.数据是从特定的网站扒下来,然后进行二次处理,也就是数据去重.清洗,接着再保存到mongodb里,那么如何将数据搞到ElasticSearch中 ...

  5. Logstash同步Oracle数据到ElasticSearch

    最近在项目上应用到了ElasticSearch和Logstash,在此主要记录了Logstash-input-jdbc同步Oracle数据库到ElasticSearch的主要步骤,本文是对环境进行简单 ...

  6. 【记录】ELK之logstash同步mysql数据到Elasticsearch ,配置文件详解

    本文出处:https://my.oschina.net/xiaowangqiongyou/blog/1812708#comments 截取部分内容以便学习 input { jdbc { # mysql ...

  7. centos7配置Logstash同步Mysql数据到Elasticsearch

    Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中.个人认为这款插件是比较稳定,容易配置的使用Logstash之前,我们得明确 ...

  8. Elasticsearch--Logstash定时同步MySQL数据到Elasticsearch

    新地址体验:http://www.zhouhong.icu/post/139 一.Logstash介绍 Logstash是elastic技术栈中的一个技术.它是一个数据采集引擎,可以从数据库采集数据到 ...

  9. Elasticsearch 与 Mongodb 数据同步问题

    1.mongo-connector工具 首先安装python环境 wget http://www.python.org/ftp/python/3.0.1/Python-3.0.1.tgz tar -z ...

随机推荐

  1. Jetty 源码解析 - 流程

    前言 公司实习分配给的任务是精简和优化 Jetty 框架,这里做简单的思路记录(比较乱),源码是 Jetty 7.x.x . 大体流程 Connector 接口的实现类 SelectChannelCo ...

  2. MySQL--排序检索数据(ORDER BY)

    检索出的数据并不是以纯粹的随机顺序显示的.如果不排序,数据一般将以它在底层表中出现的顺序显示.这可以是数据最初添加到表中的顺序.但是,如果数据后来进行过更新或删除,则此顺序将会受到MySQL重用回收存 ...

  3. ooday08 Java_多态_向下强制转型

    笔记: 多态: 表现: 同一个对象被造型为不同的类型时,有不同的功能 --对象的多态:我.你.水......------所有对象都是多态的(明天体会) 同一类型的引用指向不同的对象时,有不同的实现 - ...

  4. 简答一波 HashMap 常见八股面试题 —— 算法系列(2)

    请点赞,你的点赞对我意义重大,满足下我的虚荣心. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注 ...

  5. JDBC与ODBC的区别

    JDBC简介JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,它是Java十三个规范之一.可以为多种关系数据库提供统一访 ...

  6. Changes in GreatSQL 5.7.36 (2022-4-7)

    目录 1.新增特性 1.2 新增MGR角色列 1.2 采用全新的流控机制 1.3 新增MGR网络开销阈值 1.4 调整MGR大事务限制 2.稳定性提升 3.性能提升 4.bug修复 文章推荐: 关于 ...

  7. Bellman-Ford算法与SPFA算法详解

    PS:如果您只需要Bellman-Ford/SPFA/判负环模板,请到相应的模板部分 上一篇中简单讲解了用于多源最短路的Floyd算法.本篇要介绍的则是用与单源最短路的Bellman-Ford算法和它 ...

  8. Apache DolphinScheduler&ShenYu(Incubating) 联合 Meetup,暖春 3 月与你相约!

    云霞出海曙,梅柳渡江春. 2022 年的早春在疫情中显得格外生机勃勃,虽然接下来寒流仍有可能造访国内部分地区,但开源的世界,早已热闹非凡! 2022 年 3 月 26 日(星期六), Apache D ...

  9. Luogu3090 [USACO13NOV]空荡荡的摊位Empty Stalls (动态规划)

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...

  10. 人非圣贤孰能无过,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang错误处理机制EP11

    人非圣贤,孰能无过,有则改之,无则加勉.在编程语言层面,错误处理方式大体上有两大流派,分别是以Python为代表的异常捕获机制(try....catch):以及以Go lang为代表的错误返回机制(r ...