Elasticsearch最佳实践之从MongoDB到Elasticsearch

同步工具简介

本文采用mongo-connector作为MongoDB到Elasticsearch的同步工具。mongo-connector是基于python开发的实时同步服务工具,它可以创建一个从MongoDB簇到一个或多个目标系统的管道,目标系统包括:Solr,Elasticsearch,或MongoDB簇等。

该工具在MongoDB与目标系统间同步数据,并跟踪MongoDB的oplog,保持操作与MongoDB的实时同步。 因此它要求mongo运行在replica-set模式,并需要elastic2-doc-manager插件的支持,才能将数据同步至Elasticsearch集群。

本文以MongoDB 3.2.10的数据导出至Elasticsearch 5.6.4为例,介绍将MongoDB的数据实时同步到Elasticsearch的方案。

mongo-connector

同步工具安装

一. 安装python(本文以python2.7为例)

https://www.python.org/downloads/ 下载所需版本的python。

二. 安装mongo-connector

(一)如果你的机器可以连接到外网,那安装过程会非常简单:

1. 安装pip

pip-10.0.1
  • 下载后解压,进入pip-10.0.1目录,执行 下面的命令安装即可
python setup.py install

2. 安装mongo-connector

根据Elasticsearch的版本,选择合适的同步工具版本,执行下表中的安装命令即可:

Target System

Install Command

Elasticsearch 1.x

pip install 'mongo-connectorelastic'

Elasticsearch 2.x

pip install 'mongo-connectorelastic2'

Elasticsearch 5.x

pip install 'mongo-connectorelastic5'

(二)如果你的机器无法连接到外网:

1. 请依次安装以下组件:

此处以安装pymongo为例:

pymongo
  • 下载后解压,进入pymongo-3.7.0目录,执行下面的命令安装即可
python setup.py install

2. 安装mongo-connector

# clone 代码
git clone https://github.com/mongodb-labs/mongo-connector.git

# 进入mongo-connector-master目录,执行安装命令
python setup.py install

3.安装 elastic2-doc-manager

# clone 代码
git clone https://github.com/mongodb-labs/elastic2-doc-manager.git

# 重命名文件夹
mv elastic2-doc-manager-master elastic2-doc-manager

# 执行安装命令,注意此处选取合适elastic的版本!!!版本格式类似上面安装mongo-connector的版本格式
pip install ./elastic2-doc-manager[elastic5]

同步工具使用

mongo-connector 启动命令

# Elasticsearch 1.x
mongo-connector -m localhost:27017 -t localhost:9200 -d elastic_doc_manager

# Elasticsearch 2.x, 5.x
mongo-connector -m localhost:27017 -t localhost:9200 -d elastic2_doc_manager

重要参数说明:

-m   mongodb_host:port    —— 数据源地址,mongodb数据库地址。
-t   target_host:port     —— 数据目的地地址,elasticsearch集群地址。
-d   xxx_doc_manager      —— 数据目的地的document类型,elastic2_doc_manager或elastic_doc_manager。 
-n   db.collection ...    —— 待同步的数据库及其collection。默认同步所有数据库。
-a   admin-username       —— admin用户名
-p   password             —— 密码

更过参数,请通过mongo-connector -h 命令查看

举例说明

1. MongoDB中的数据如下:

mongodb

以 db(feeds),collection(log)为例,数据样例:

data

2. 启动mongo-connector

  • 启动命令
mongo-connector -m 127.0.0.1:7001 -a test_user -p test_password -t 127.0.0.1:9200 -d elastic2_doc_manager &

3. 输出到Elasticsearch的数据

  • index
index
  • doc
doc

4. 注意事项

  1. mongodb必须开启副本集(Replica Set)。开启副本集才会产生oplog,副本拷贝主分片的oplog并通过oplog与主分片进行同步。mongo-connector也是通过oplog进行数据同步,故必须开启副本集。
  2. 使用mongo-connector命令同步数据时,-m参数中的mongodb地址应该是主/从分片的地址,从该地址登录可以看见并操作local数据库(oplog存储在local.oplog.rs),不能使用mongos地址。
  3. 使用mongo-connector命令同步数据时 ,mongo-connector的oplog(参照-o参数)不能随便删除,否则会引起重新同步所有数据的问题。该问题可以通过--no-dump选项关闭。
  4. 若发现同步速度过慢,可以通过调整bulkSize可以来提升同步速度,配置参考:https://github.com/mongodb-labs/mongo-connector/wiki/Configuration-Options#docmanagersindexbulksize

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

CentOS系统启动流程你懂否

一、Linux内核的组成 相关概念: Linux系统的组成部分:内核+根文件系统 内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序。 ...

3744
来自专栏云计算教程系列

如何在CentOS 7上使用Postgres,Nginx和Gunicorn设置Django

Django是一个功能强大的Web框架,可以帮助您启动Python应用程序或网站。Django包含一个简化的开发服务器,用于在本地测试您的代码,但是对于任何与生...

1533
来自专栏闵开慧

tomcat里面的文件详细说明

如何安装tomcat服务器   安装Tomcat之前要先安装JDK,可从http://java.sun.com上下载最新版本的JDK。 Tomcat可从Apac...

40810
来自专栏CaiRui

memcached服务

介绍 它是一套数据缓存系统或软件 用于动态应用系统中缓存数据库的数据,减少数据库的访问压力,达到提升性能的效果,实际应用环境中多用于数据库的cache的应用。它...

3768
来自专栏性能与架构

高级的 Redis Java客户端 - Lettuce

1.8K4
来自专栏蓝天

HBase & thrift & C++编程

本文目的是介绍使用C++如何操作HBase。从HBase 0.94开始,HBase新增thrift2,本文只介绍和讨论thrift2相关的。hbase-1....

1721
来自专栏玩转JavaEE

初识elasticsearch中的REST接口

前面向读者介绍了Elasticsearch的安装和基本配置,同时也向读者介绍了Elasticsearch中的核心概念,相信读者对Elasticsearch的使用...

1513
来自专栏Java架构师历程

4、服务发现

本书主要介绍如何使用微服务来构建应用程序,现在是第四章。第一章已经介绍了微服务架构模式,并讨论了使用微服务的优点与缺点。第二章和第三章介绍了微服务间的通信,并对...

4743
来自专栏散尽浮华

CentOS7下Elasticsearch集群部署记录

Elasticsearch是一个分布式搜索服务,提供Restful API,底层基于Lucene,采用多shard的方式保证数据安全,并且提供自动reshard...

3947
来自专栏云计算教程系列

如何在Ubuntu 18.04上安装Redis

Redis是一个内存中的键值存储器,以其灵活性,性能和广泛的语言支持而闻名。它通常用作数据库,缓存和消息代理,并支持各种数据结构。

4032

扫码关注云+社区

领取腾讯云代金券