mongo与elasticsearch数据同步插件

前提条件:

mongo集群必须是副本集,因为同步插件读取的是日志文件

1.需要安装pip插件(如果已经安装不需再安装)

yum install python-setuptools && easy_install pip

2.在mongo端  安装 mongo-connector。
pip install mongo-connector

3.安装 elastic2-doc-manager(注意这个是针对es2.x版本的,如果es安装的是1.x版本,用elastic-doc-manager)
pip install elastic-doc-manager

插件网址:https://github.com/mongodb-labs

4.启动同步插件

  1. 不使用配置文件
  • mongo-connector -m mongo的ip:27017 -t elasticsearch的IP:9200 -d elastic2_doc_manager
  • 可以在命令行里面加入
  • --auto-commit-interval=0此命令保证实时同步数据,0代表无延迟
  • --continue-on-error 当数据中有错误会跳过

2.使用配置文件

{
    "__comment__": "Configuration options starting with ‘__‘ are disabled",
    "__comment__": "To enable them, remove the preceding ‘__‘",

"mainAddress": "192.168.106.220:27017",
    "oplogFile": "/home/mongo/oplog.timestamp",  自定义
    "noDump": false,
    "batchSize": -1,
    "verbosity": 0,
    "__continueOnError": true,当数据中有错误会跳过

"logging": {
        "type": "file",
        "filename": "/home/mongo/mongo-connector.log",  自定义
        "__format": "%(asctime)s [%(levelname)s] %(name)s:%(lineno)d - %(message)s",
        "__rotationWhen": "D",
        "__rotationInterval": 1,
        "__rotationBackups": 10,

"__type": "syslog",
        "__host": "localhost:514"
    },

"authentication": {
        "__adminUsername": "username",
        "__password": "password",
        "__passwordFile": "mongo-connector.pwd"
    },

"__comment__": "For more information about SSL with MongoDB, please see http://docs.mongodb.org/manual/tutorial/configure-ssl-clients/",
    "__ssl": {
        "__sslCertfile": "Path to certificate to identify the local connection against MongoDB",
        "__sslKeyfile": "Path to the private key for sslCertfile. Not necessary if already included in sslCertfile.",
        "__sslCACerts": "Path to concatenated set of certificate authority certificates to validate the other side of the connection",
        "__sslCertificatePolicy": "Policy for validating SSL certificates provided from the other end of the connection. Possible values are ‘required‘ (require and validate certificates), ‘optional‘ (validate but don‘t require a certificate), and ‘ignored‘ (ignore certificates)."
    },

"__fields": ["field1", "field2", "field3"],

"__namespaces": {
        "excluded.collection": false,
        "excluded_wildcard.*": false,
        "*.exclude_collection_from_every_database": false,
        "included.collection1": true,
        "included.collection2": {},
        "included.collection4": {
            "includeFields": ["included_field", "included.nested.field"]
        },
        "included.collection5": {
            "rename": "included.new_collection5_name",
            "includeFields": ["included_field", "included.nested.field"]
        },
        "included.collection6": {
            "excludeFields": ["excluded_field", "excluded.nested.field"]
        },
        "included.collection7": {
            "rename": "included.new_collection7_name",
            "excludeFields": ["excluded_field", "excluded.nested.field"]
        },
        "included_wildcard1.*": true,
        "included_wildcard2.*": true,
        "renamed.collection1": "something.else1",
        "renamed.collection2": {
            "rename": "something.else2"
        },
        "renamed_wildcard.*": {
            "rename": "new_name.*"
        },
        "gridfs.collection": {
            "gridfs": true
        },
        "gridfs_wildcard.*": {
            "gridfs": true
        }
    },

"docManagers": [
        {
            "docManager": "elastic_doc_manager",
            "targetURL": ["192.168.106.218:9200","192.168.106.217:9200","192.168.106.219:9200"],
            "bulkSize": 1000,
            "__uniqueKey": "_id",
            "autoCommitInterval": 1
        }
    ]
}

启动命令:mongo-connector -c /etc/mongo-connector-conf.json & (json的目录自定义)

注意:写入mongo的速度比同步速度快,经过测试elasticsearch配置良好的情况下同步速度大概在1000条/s左右

插件安装的目录在:/usr/lib/python2.7/site-packages下面

elasticsearch、mongo-connector(如果想修改源码可以进入此目录)

时间: 2024-10-28 13:17:12

mongo与elasticsearch数据同步插件的相关文章

elasticsearch与mongodb分布式集群环境下数据同步

1.ElasticSearch是什么 ElasticSearch 是一个基于Lucene构建的开源.分布式,RESTful搜索引擎.它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索的存储库).ElasticSearch为应用程序提供搜索算法和相关的基础架构,用户只需要将应用程序中的数据上载到ElasticSearch数据存储中,就可以通过RESTful URL与其交互.ElasticSearch的架构明显不同于它之前的其他搜索引擎架构,因为它是通过水平伸缩的方式来构建的.不同

Linux安装ElasticSearch与MongoDB分布式集群环境下数据同步

ElasticSearch有一个叫做river的插件式模块,可以将外部数据源中的数据导入elasticsearch并在上面建立索引.River在集群上是单例模式的,它被自动分配到一个节点上,当这个节点挂掉后,river会被自动分配到另外的一个节点上.目前支持的数据源包括:Wikipedia, MongoDB, CouchDB, RabbitMQ, RSS, Sofa, JDBC, FileSystem,Dropbox等.River有一些指定的规范,依照这些规范可以开发适合于自己的应用数据的插件.

HBase数据同步到ElasticSearch的方案

ElasticSearch的River机制 ElasticSearch自身提供了一个River机制,用于同步数据. 这里可以找到官方目前推荐的River: http://www.elasticsearch.org/guide/en/elasticsearch/rivers/current/ 但是官方没有提供HBase的River. 其实ES的River非常简单,就是一个用户打包好的jar包,ES负责找到一个node,并启动这个River.如果node失效了,会自动找另外一个node来启动这个Ri

HBase数据同步ElasticSearch该程序

ElasticSearch的River机械 ElasticSearch本身就提供了River机械,对于同步数据. 在这里,现在能找到的官方推荐River: http://www.elasticsearch.org/guide/en/elasticsearch/rivers/current/ 可是官方没有提供HBase的River. 事实上ES的River很easy,就是一个用户打包好的jar包,ES负责找到一个node.并启动这个River.假设node失效了,会自己主动找另外一个node来启动

Elasticsearch+Mongo亿级别数据导入及查询实践

数据方案: 在Elasticsearch中通过code及time字段查询对应doc的mongo_id字段获得mongodb中的主键_id 通过获得id再进入mongodb进行查询   1,数据情况: 全部为股票及指数的分钟K线数据(股票代码区分度较高) Elasticsearch及mongodb都未分片且未优化参数配置 mongodb数据量: Elasticsearch数据量: 2,将数据从mongo源库导入Elasticsearch import time from pymongo impor

logstash-input-jdbc实现mysql 与elasticsearch实时同步深入详解

elasticsearch 的出现使得我们的存储.检索数据更快捷.方便.但很多情况下,我们的需求是:现在的数据存储在MySQL.Oracle等关系型传统数据库中,如何尽量不改变原有数据库表结构,将这些数据的insert,update,delete操作结果实时同步到elasticsearch(简称ES)呢? 本文基于以上需求点展开实战讨论. 1.对delete操作的实时同步泼冷水 到目前为止,所有google,stackoverflow,elastic.co,github上面搜索的插件和实时同步的

solr 简单搭建 数据库数据同步(待续)

原来在别的公司负责过文档检索模块的维护(意思就是不是俺开发的啦).所以就稍微接触和研究了下文档检索. 文档检索其实是全文检索,是通过一种技术把N多文档进行一定规律的切割归类,然后创建易于搜索的索引式文件,然后搜索具有某些规律的文档时,能够通过快速定位索引,然后根据索引提供的信息精确定位到文档从而实现迅速找到文档.这个文档一般成为条目. 上家公司的时候使用的是Lucene加上Zoie实现的.lucene是apache下的开源项目,不过并不是全文检索的实现,而是一个全文检索的引擎,是一个架构,是其他

实现mysql和redis之间的触发数据同步——mysql 触发器+gearman+php.worker

上回一次我们已经实现了 redis 作为 mysql 的缓存服务器,但是如果更新了 mysql,redis 中仍然会有对应的 KEY,数据就不会更新,此时就会出现 mysql 和 redis 数据不一致的情 况. 详情请见        基于redis缓存数据库实现lnmp架构高速访问 所以接下来就要通过 mysql 触发器将改变的数据同步到 redis 中. 因为mysql和redis数据格式不同,不能实现直接同步,所以 将MySQL数据首先放入Gearman中,然后通过一个自己编写的PHP

Rsync+Sersync实时数据同步

sersync实时数据同步 Rsync+Inotify-tools与Rsync+sersync这两种架构有什么区别? 1.Rsync+Inotify-tools (1):Inotify-tools只能记录下被监听的目录发生了变化(包括增加.删除.修改),并没有把具体是哪个文件或者哪个目录发生了变化记录下来: (2):rsync在同步的时候,并不知道具体是哪个文件或者哪个目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此