MongoDB数据同步到Elasticsearch中
说明:为了解决MongoDB慢查询以及对数据进行分析,将数据同步到Elasticsearch中。
测试环境各模块版本
MongoDB | Elasticsearch | MongoDB-connecter | Python | Pip |
2.4.14 | 2.2.0 | 2.3 | 2.6.6 | 8.0.3 |
线上环境安装ES
安装过程
备注:ES下载地址:
https://www.elastic.co/downloads/elasticsearch
1.在本地下载elasticsearch 源码zip包 ;
2.scp上传压缩包到百度云相关机器上,并解压 ;
3.执行./elasticsearch-2.2.0/bin/elasticsearch;
具体安装过程,可以参照:
http://blog.csdn.net/wang_zhenwei/article/details/49361373
为ES安装插件
为方便使用安装head以及kopf插件(bigdesk在ES2.0以上版本已经不支持)
Head | Kopf |
2.4.14 | 2.1.1 |
1.安装plugins的方式有:使用maven编译源码并放到_site中,并添加plugin-descriptor.properties进行安装(主要针对ES插件库无法找到该插件的情况)。
2.在ES插件库中能找到的情况下可以使用./elasticsearch-2.2.0/bin/plugin install head(插件名)这样的形式安装插件(幸运的是我们使用的这两个插件都能在ES插件库中找到)
3.使用./plugin installmobz/elasticsearch-head安装head插件, 使用./plugin installlmenezes/elasticsearch-kopf安装kopf插件。
4.安装成功后在./elasticsearch-2.2.0/plugins中查看插件的安装情况。
5.重启ES,并确认插件没有报错。
6.访问http://180.76.189.84:9200/_plugin/head/查看节点情况。
7.访问http://180.76.189.84:9200/_plugin/kopf/#!/cluster另一个查看节点信息的插件。
具体安装过程,可以参照:
http://blog.csdn.net/wang_zhenwei/article/details/50963976
安装mongo-connector
安装mongo-connector需要先安装python。
1.使用pip installmongo-connector安装mongo-connector。
2.mongo-connector使用需要使用到mongodb的oplog表,因此需要mongodb创建复制集。
MongoDB的具体安装过程,可以参照:
http://blog.csdn.net/wang_zhenwei/article/details/48267463
mongo-connector的具体安装过程还未整理。
创建ES集群
1. 在elasticSearch/config目录下修改elasticsearch.yml文件夹
#---------------------------------- Cluster -----------------------------------#
#Use a descriptive name for your cluster:#
#集群名称(集群内所有机器集群名称都要相同)
cluster.name:cloudx_web_test1
##------------------------------------ Node------------------------------------##
Usea descriptive name for the node:## node.name: node-2
#节点名称
node.name:node-1
#该节点是否可以被选为主节点
node.master:true
#该节点是否存有数据
node.data:true
#主分片数
index.number_of_shards:3
#复制分片数
index.number_of_replicas:1
#服务绑定ip地址
network.host:192.168.0.57
#(ES2.X新增配置)集群内机器
ip discovery.zen.ping.unicast.hosts:["192.168.0.57","192.168.0.58"]
#是否支持多播(默认true)
discovery.zen.ping.multicast.enabled:true
2.分别在后台启动两个ES节点 nohup./elasticsearch &,默认日志存放文件在logs中。
3.访问http://180.76.189.84:9200/_plugin/kopf/#!/cluster可以查看集群的情况以及健康状态。
使用mongo-connector同步ES与mongodb中的数据
1. 使用
sudonohup mongo-connector --auto-commit-interval=0 -m 192.168.0.57:27017 -t192.168.0.57:9200 -d elastic_doc_manager -o /opt/mongo-connector.oplog -neventlogtest.T_EVENT_LOG &
进行数据同步(--auto-commit-interval=0表示实时同步将mongodb中的修改同步到ES,-o表示)
2.经测试300Wmongodb数据需要30分钟左右,因此线上1500W数据大约需要3小时,同步完后当mongo数据改变,也会立即提交到ES中。
ES查询代码实现
使用BoolQueryBuilder进行查询实现
1.使用filter返回精确查询信息(Query用于返回相关查询)
2.should类似于or操做
3.matchQuery相当于增加$and查询
4.existsQuery相当于增加$exists操作
5.mustNot相当于增加$not操作
代码省略
测试ES查询
发送与api/event-log相同的请求到api/event-log-counts中,进行测试(预期结果与event-log返回结果一致)。
原文来自:
https://www.gitbook.com/book/asdgh000/mongodb-elasticsearch-/details
和
https://asdgh000.gitbooks.io/mongodb-elasticsearch-/content/index.html