irpas技术客

docker版mongodb数据同步到elasticsearch_程序员小莫_mongodb同步到elasticsearch

irpas 882

MongoDB? 和 Elasticsearch 同步方式有两种,一种为搭建集群,另一种为配置MongoDB的副本集,本案在docker上部署,所以选择配置副本集方式。

说明:为了能够使得 MongoDB? 和 Elasticsearch 同步,我们必须针对 MongoDB 部署一个 replica set。Monstache 使用 MongoDB 的?oplog?作为事件源。 你将需要确保通过部署副本集将 MongoDB 配置为生成操作日志。

1、部署步骤 1、elasticsearch:7.9.3 docker pull elasticsearch:7.9.3

配置文件:elasticsearch.yml? 自己创建:/opt/elasticsearch/config/elasticsearch.yml

cluster.name: "docker-cluster" network.host: 0.0.0.0 http.cors.enabled: true http.cors.allow-origin: "*"

注:如果启动 elasticsearch 后会自己挂掉,需要先创建 /opt/elasticsearch/data 并且赋予777权限

docker run --name elasticsearch -d --restart always -v/opt/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /opt/elasticsearch/plugins:/usr/share/elasticsearch/plugins -v /opt/elasticsearch/data:/usr/share/elasticsearch/data -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e "discovery.type=single-node" -p 9200:9200 -p 9300:9300 elasticsearch:7.9.3 2、kibana docker pull kibana:7.9.3

注:先 ip address 查看docker内部的IP命令 我这里是172.17.0.1

sudo docker run --name kibana -d --restart always -e ELASTICSEARCH_HOSTS=http://172.17.0.1:9200 -p 5601:5601 -d kibana:7.9.3 3、elasticsearch-head docker pull mobz/elasticsearch-head:5 docker run --name elasticsearch-head -d --restart always -p 9100:9100 mobz/elasticsearch-head:5

这三个启动后先访问,查看是否成功

?4、MongoDB docker pull mongo:4.1.2

需要启动三个mongo节点 注:你的内存需要足够 不然启动后会挂掉 我踩过的坑

docker run --name m0 -p 37017:27017 -d mongo --replSet "rs" docker run --name m1 -p 47017:27017 -d mongo --replSet "rs" docker run --name m2 -p 57017:27017 -d mongo --replSet "rs" docker ps //查看启动的容器

?连接任意一个节点,进行副本集配置

进入容器

docker exec -it 026f9b1c557e /bin/bash

连接三个节点中的任意一个,注意ip地址为宿主机ip(ifconfig命令查询),我当前的为?192.168.164.133 ,注 : 这里127.0.0.1? ?不行

mongo --host 192.168.164.133 --port 37017

此时已连接到其中一个节点,下面进行副本集配置

键入命令

rs.initiate({ _id:"rs", members:[ {_id:0,host:"192.168.164.133:37017"}, {_id:1,host:"192.168.164.133:47017"}, {_id:2,host:"192.168.164.133:57017"} ]})

响应类似下面,注意此时命令提示符已经发生变化,由原来的 > 变成了 rs:SECONDARY>

{ "ok" : 1, "operationTime" : Timestamp(1522810920, 1), "$clusterTime" : { "clusterTime" : Timestamp(1522810920, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } }

查看副本集配置信息

查看副本集状态 rs.status()

这里要注意这个值,决定你mongo的主备状态

?到这里,你就可以选择一个数据库可视化工具去连接Mongo了

5、monstache docker pull rwynn/monstache

?编写monstache配置文件, 设置mydb的同步策略 /opt/monstache/config/monstache.config.toml

注 : 这里127.0.0.1?不行? 两个ip必须是宿主机ip

# ip地址注意要修改 mongo-url = "mongodb://192.168.164.133:37017" # ip地址注意要修改 elasticsearch-urls = ["http://192.168.164.133:9200"] # mydb指的是需要同步的数据库 direct-read-namespaces = ["mydb.*"] elasticsearch-user = "elastic" elasticsearch-password = "pwd" elasticsearch-max-conns = 4 dropped-collections = true dropped-databases = true resume = true resume-strategy = 0 verbose = true cluster-name = 'docker-cluster'

编写monstache启动文件docker-compose.yml,执行docker-compose up -d 新增运行monstache实例

version: '3.3' services: monstache: image: rwynn/monstache restart: always container_name: monstache volumes: - /opt/monstache/config/monstache.config.toml:/app/monstache.config.toml command: -f /app/monstache.config.toml

查询配置结果

docker logs -f monstache

如果看到和我这里一样的信息,恭喜你,配置成功!!!

6、测试同步

?成功!!!!!!!!

注:本文转载需标明出处

?参考:

mongodb同步elasticSearch方案评估 | 俊瑶先森

Elasticsearch:同步 MongoDB 数据到 Elasticsearch_Elastic-程序员秘密_monstache - 程序员秘密


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #mongodb # #ElasticSearch #说明为了能够使得