zoukankan      html  css  js  c++  java
  • 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
    

    解决方案:需要重新开始同步,删除分片信息

  • 相关阅读:
    基于erlang的mud游戏引擎开发
    生成数据库所有表的查询语句
    查找表字段语句
    基础算法总结 Java 版
    ArrayList源码学习
    云服务器安装 Mysql 5.7
    n个元素进栈,共有多少种出栈顺序?
    MyBatis 学习
    Spring学习笔记之AOP
    原来你是这样的 IntegerCache
  • 原文地址:https://www.cnblogs.com/byteworld/p/6963686.html
Copyright © 2011-2022 走看看