docker版mongodb数据同步到elasticsearch

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 - 程序员秘密

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值