Mongo同步数据到Elasticsearch
个人博客:https://blog.sharedata.info/
最近需要把数据从Mongo同步到Elasticsearch
环境:
centos6.5
python2.7
pip
mongo-connector
安装:
pip install elastic2-doc-manager[elastic5]
pip install mongo-connector[elastic5]
命令参数:
-m mongodb_host:port —— 数据源地址,mongodb数据库地址。
-t target_host:port —— 数据目的地地址,elasticsearch/solr/mongodb集群地址。建议为集群中的协调节点的地址。
-d xxx_doc_manager —— 数据目的地的document类型。例如:
将mongodb中的数据同步到elasticsearch,使用elastic_doc_manager或elastic2_doc_manager。
将mongodb中的数据同步到solr,使用solr_doc_manager。
将mongodb中数据同步到其他mongodb,使用mongo_doc_manager。
-n db.collection ... —— 待同步的数据库及其collection。默认同步所有数据库。
-i filed_name ... —— 待同步的字段。默认同步所有字段。
-o mongodb_oplog_position.oplog —— mongo-connector的oplog。默认在mongo-connector命令执行目录下创建oplog.timestamp文件。
建议重新分配存储位置(也可重新分配存储文件名),例如 /opt/mongo-connector.oplog。
--auto-commit-interval —— 数据同步间隔。默认在不同系统上有不同的值。设置为0表示mongodb中的任何操作立即同步到数据目的地。
--continue-on-error —— 一条数据同步失败,日志记录该失败操作,继续后续同步操作。默认为中止后续同步操作。
同步注意实现:
1. mongodb必须开启副本集(Replica Set)。开启副本集才会产生oplog,副本拷贝主分片的oplog并通过oplog与主分片进行同步。
mongo-connector也是通过oplog进行数据同步,故必须开启副本集。
2. 使用mongo-connector命令同步数据时,-m参数中的mongodb地址应该是主/从分片的地址,
从该地址登录可以看见并操作local数据库(oplog存储在local.oplog.rs);不能使用mongoos地址。
3. 使用mongo-connector命令同步数据时 ,mongo-connector的oplog(参照-o参数)不能随便删除,
否则会引起重新同步所有数据的问题。该问题可以通过--no-dump选项关闭。
4. 生产环境下建议将mongo-connector配置为系统服务,运行mongo-connector时采用配置文件的方式
es注意实现:
在同步的时候会创建mongodb_meta索引,以便跟踪最后一次修改的文档,用于在复制集回滚事件中解决冲突,但保存在单独的索引中,方面在必须要的时候删除
事例:
mongo-connector --auto-commit-interval=0 -m localhost:27017 -t localhost:9200 -n db.table -d elastic2_doc_manager
同步中遇到错误:
2017-07-03 09:49:47,723 [ALWAYS] mongo_connector.connector:51 - Starting mongo-connector version: 2.5.1
2017-07-03 09:49:47,724 [ALWAYS] mongo_connector.connector:51 - Python version: 2.7.10 (default, May 23 2017, 18:33:08)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)]
2017-07-03 09:49:47,724 [ALWAYS] mongo_connector.connector:51 - Platform: Linux-2.6.32-504.el6.x86_64-x86_64-with-centos-6.6-Final
2017-07-03 09:49:47,724 [ALWAYS] mongo_connector.connector:51 - pymongo version: 3.4.0
2017-07-03 09:49:47,729 [ALWAYS] mongo_connector.connector:51 - Source MongoDB version: 3.2.6
2017-07-03 09:49:47,729 [ALWAYS] mongo_connector.connector:51 - Target DocManager: mongo_connector.doc_managers.elastic2_doc_manager version: 0.3.0
2017-07-03 09:49:47,826 [ERROR] mongo_connector.oplog_manager:202 - OplogThread: Last entry no longer in oplog cannot recover! Collection(Database(MongoClient(host=[u'192.168.1.130:27018', u'192.168.1.137:27019', u'192.168.1.132:27017'], document_class=dict, tz_aware=False, connect=True, replicaset=u'shard1'), u'local'), u'oplog.rs')
2017-07-03 09:49:48,382 [ERROR] mongo_connector.connector:420 - MongoConnector: OplogThread <OplogThread(Thread-3, stopped 139942650967808)> unexpectedly stopped! Shutting down
解决方案:需要重新开始同步,删除分片信息
Mongo同步数据到Elasticsearch的更多相关文章
- elasticsearch -- Logstash实现mysql同步数据到elasticsearch
配置 安装插件由于这里是从mysql同步数据到elasticsearch,所以需要安装jdbc的入插件和elasticsearch的出插件:logstash-input-jdbc.logstash-o ...
- 使用Logstash同步数据至Elasticsearch,Spring Boot中集成Elasticsearch实现搜索
安装logstash.同步数据至ElasticSearch 为什么使用logstash来同步,CSDN上有一篇文章简要的分析了以下几种同步工具的优缺点:https://blog.csdn.net/la ...
- 利用logstash从mysql同步数据到ElasticSearch
前面一篇已经把logstash和logstash-input-jdbc安装好了. 下面就说下具体怎么配置. 1.先在安装目录bin下面(一般都是在bin下面)新建两个文件jdbc.conf和jdbc. ...
- mysql 同步数据到 ElasticSearch 的方案
MySQL Binlog 要通过 MySQL binlog 将 MySQL 的数据同步给 ES, 我们只能使用 row 模式的 binlog.如果使用 statement 或者 mixed forma ...
- 通过HBase Observer同步数据到ElasticSearch
Observer希望解决的问题 HBase是一个分布式的存储体系,数据按照RowKey分成不同的Region,再分配给RegionServer管理.但是RegionServer只承担了存储的功能,如果 ...
- 全文搜索引擎 Elasticsearch (三)logstash-input-jdbc同步数据 到elasticsearch
参考链接: 1, 源码地址,官方介绍 2, logstash-input-jdbc使用建议 3, 官网介绍例子,使用 logstash-input-jdbc 到 elasticsearch 一.安装 ...
- Elasticsearch:同步 MongoDB 数据到 Elasticsearch
转载自:https://elasticstack.blog.csdn.net/article/details/114639152 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写 ...
- Logstash同步Oracle数据到ElasticSearch
最近在项目上应用到了ElasticSearch和Logstash,在此主要记录了Logstash-input-jdbc同步Oracle数据库到ElasticSearch的主要步骤,本文是对环境进行简单 ...
- 实战ELK(6)使用logstash同步mysql数据到ElasticSearch
一.准备 1.mysql 我这里准备了个数据库mysqlEs,表User 结构如下 添加几条记录 2.创建elasticsearch索引 curl -XPUT 'localhost:9200/user ...
随机推荐
- Windows下启动Solr报错:Nothing to start,exiting...
如果用java -jar start.jar命令启动Solr时报错:Nothing to start,exiting...,可尝试: 百度jetty,上官网下载压缩包并解压(下载页面地址:http:/ ...
- 如何设定linux系统时间
1.设定日期 #date -s 09/28/2017 2.设定时间 #date -s 11:48:00 设定完了使用date命令查看系统时间,发现已经修改 下图是在Centos6.5 64位版上实际操 ...
- .Net——实现IConfigurationSectionHandler接口定义处理程序处理自己定义节点
除了使用.net里面提供的内置处理程序来处理我们的自己定义节点外,我们还能够通过多种方法,来自己定义处理类处理我们的自己定义节点,本文主要介绍通过实现IConfigurationSectionHand ...
- 简单模拟Spring的注入
主要就是读XML技术和反射技术. 在xml中读出相关配置信息,然后利用反射将其实例化为对象,并调用其构造方法,在实例化的过程中将属性注入实例. 实例化和属性注入这些操作都交给了框架,不再需要自己的去n ...
- Tony zhao:到底怎么样才叫看书?
http://blog.jobbole.com/25842/ 目录: 一.引入 二.经历了就能理解 三.读书要分级 四.只读经典 五.别吝惜你动笔的那点时间 一.引入 看到这个题目的时候你可能会感到有 ...
- Easy UI datebox控件无法正常赋值
<input id="AcceptDetail_IssuingDate" class="easyui-datebox" data-options=&quo ...
- poj 2828 Buy Tickets (线段树 单节点 查询位置更新)
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 15533 Accepted: 7759 Desc ...
- nginx的luajit安装luarocks并安装luafilesystem
nginx的luajit安装luarocks并安装luafilesystem by admin on -- :: in , 69次 标题有点绕口.我尽量把关键词都贴进去.之前因为自己的nginx安装了 ...
- hdu1873 看病要排队 优先队列
看病要排队 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- python简单处理xml文件
Python若是想从xml里读点信息,用BeautifulSoup可能会容易一点,但是如果要修改xml,BeatifulSoup就搞不定了,其实直接用lxml就好. from lxml import ...