基于Monstache实现MongoDB数据导入ES
因为公司业务需求,需要将Mongodb中的数据导入ES中,所以就在网上看了很多相关的文档,但大部分的文章都是大同小异,巴拉巴拉的讲了一大堆原理,就是不讲怎么做的,或者有的写了怎么做的,但是步骤不是缺这就是少那的。但还是让我东拼西凑的让我实现了出来,所以整理这篇博客,避免再有人趟一遍我趟过的坑。
为什么最终选择Monstache来实现,因为:
Monstache基于MongoDB的oplog实现实时数据同步,支持并包括最新版本Mongodb与ES之间数据同步。Monstache支持数据库删除和集合删除,能确保ES端实时与源端数据保持一致,不仅能够将Mongodb历史数据导入ES,而且还能实时的将Mongodb中的新数据导入ES。最主要的是它实现起来非常方便快捷。
附上Monstache的官方网站:https://rwynn.github.io/monstache-site/
操作流程:
(1) 搭建Monstache环境
(2) 配置同步任务
(3) 验证结果
步骤(1)
安装Go,并配置环境变量。
!Monstache数据同步依赖于Go语言,因此需要准备Go环境。
①下载Go安装包并解压:
wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.14.4.linux-amd64.tar.gz
②配置环境变量:
vi /etc/profile #添加如下内容
export GOROOT=/usr/local/go
export GOPATH=/home/go/
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPROXY=https://mirrors.aliyun.com/goproxy/
:wq! #保存退出
source /etc/profile #刷新环境变量
③安装Monstache:
cd /usr/local/
git clone https://github.com/rwynn/monstache.git
cd monstache
git branch #查看当前的版本
> * rel6 #当前是rel6版本
git checkout rel5 #切换到5版本
go install #安装monstache
!注意对应版本如下图,因为我使用的es版本是6的mongo是4,所以选择monstache 5版本。
步骤(2)
配置同步任务。
Monstache使用的MongoDB OPLOG作为一个事件源。需要确保通过mongodb副本集的方式生成的操作日志。在没有任何明确的配置前 也就是默认情况下,monstache会使用默认端口连接本地上的ES和MongoDB,并跟踪mongodb oplog。在monstache运行期间,mongodb的任何改动都会同步到ES中。
Monstache配置使用toml格式。
①进入monstache安装目录,创建并编辑配置文件:
cd /usr/local/monstache
vi config.toml #这个文件要是没有的话就自己创建
# connect to MongoDB using the following URL 这项配置添加Mongodb的地址
mongo-url = "mongodb://root:****@dds-2ze7db822b241.mongodb.rds.aliyuncs.com:3717"
# connect to the Elasticsearch REST API at the following node URLs
elasticsearch-urls = ["http://10.32.5.86:9200"]
direct-read-namespaces = ["datahub_log.gateway_g2_log"] #指定mongo中要导出数据库和集合
elasticsearch-user = "root"
elasticsearch-password = "******" #ES服务器的密码
elasticsearch-max-conns = 4
dropped-collections = true
dropped-databases = true
resume = true
resume-strategy = 0
verbose = true
#cluster-name = 'es-cn-mp91kzb8m00******'
[[mapping]]
namespace = "datahub_log.gateway_g2_log"
index = "datahub_log" #映射到ES中的索引名称
type = "gateway_g2_log" #映射到ES中索引类型的名称
!配置参数说明如下:
②运行Monstache:
monstache -f config.toml
步骤(3)
验证结果登陆es服务器:
#查看所有的索引,查看是否成功导入datahub_log索引
curl 127.0.0.1:9200/_cat/indices?v
#查看datahub_log索引的类型是否为gateway_g2_log
curl 127.0.0.1:9200/datahub_log/_mapping/
#统计索引内的数据是否和mongo的数据一致
curl 127.0.0.1:9200/datahub_log/_count
最后 如果还有不懂的朋友下面评论说出自己的问题,我看到会回复的!