MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Sincronização em tempo real do MongoDB 4.x com o ElasticSearch 6.x +


se você trabalha com docker, pode obter este tutorial

https://github.com/ziedtuihri/Monstache_Elasticsearch_Mongodb

Monstache é um daemon de sincronização escrito em Go que indexa continuamente suas coleções do MongoDB no Elasticsearch. O Monstache oferece a capacidade de usar o Elasticsearch para fazer pesquisas e agregações complexas de seus dados do MongoDB e criar facilmente visualizações e painéis do Kibana em tempo real.documentation for Monstache :
https://rwynn.github.io/monstache-site/
github:
https://github.com/rwynn/monstache

docker-compose.yml
version: '2.3'
networks:
  test:
    driver: bridge

services:
  db:
    image: mongo:3.0.2
    expose:
      - "27017"
    container_name: mongodb
    volumes:
      - ./mongodb:/data/db
      - ./mongodb_config:/data/configdb
    ports:
      - "27018:27017"
    command: mongod --smallfiles --replSet rs0
    networks:
      - test

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.8.7
    container_name: elasticsearch
    volumes:
      - ./elastic:/usr/share/elasticsearch/data
      - ./elastic/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - 9200:9200
    command: elasticsearch -Enetwork.host=_local_,_site_ -Enetwork.publish_host=_local_
    healthcheck:
      test: "wget -q -O - http://localhost:9200/_cat/health"
      interval: 1s
      timeout: 30s
      retries: 300
    ulimits:
      nproc: 65536
      nofile:
        soft: 65536
        hard: 65536
      memlock:
        soft: -1
        hard: -1
    networks:
      - test

  monstache:
    image: rwynn/monstache:rel4
    expose:
      - "8080"
    ports:
      - "8080:8080"
    container_name: monstache
    command: -mongo-url=mongodb://db:27017 -elasticsearch-url=http://elasticsearch:9200 -direct-read-namespace=Product_DB.Product -direct-read-split-max=2
    links:
      - elasticsearch
      - db
    depends_on:
      db:
        condition: service_started
      elasticsearch:
        condition: service_healthy
    networks:
      - test

replicaset.sh
#!/bin/bash

# this configuration is so important 
echo "Starting replica set initialize"
until mongo --host 192.168.144.2 --eval "print(\"waited for connection\")"
do
    sleep 2
done
echo "Connection finished"
echo "Creating replica set"
mongo --host 192.168.144.2 <<EOF
rs.initiate(
  {
    _id : 'rs0',
    members: [
      { _id : 0, host : "db:27017", priority : 1 }
    ]
  }
)
EOF
echo "replica set created"

1) execute este comando no terminal$ sysctl -w vm.max_map_count=262144

se você trabalha em um servidor eu não sei se é necessário

2) execute a compilação do terminaldocker-compose

3) execute no terminal$ docker-compose up -d

não desça o seu recipiente.

$ docker ps

copie o Ipadress da imagem db do mongo

$ docker inspecionar id_of_mongo_image

copie o IPAddress e defina-o em replicaset.sh e execute replicaset.sh

$ ./replicaset.sh

no terminal você deve ver => conjunto de réplicas criado

$ docker-compose down

4) execute no terminal$ docker-compose up

finalmente .......

Replicação no MongoDB


Um conjunto de réplicas é um grupo de mongod instâncias que mantêm o mesmo conjunto de dados. Um conjunto de réplicas contém vários nós de suporte de dados e, opcionalmente, um nó de arbitragem. Dos nós portadores de dados, um e apenas um membro é considerado o nó primário, enquanto os outros nós são considerados nós secundários.
O nó principal recebe todas as operações de gravação. Um conjunto de réplicas pode ter apenas um primário capaz de confirmar gravações com { w:"maioria" } escreva preocupação; embora, em algumas circunstâncias, outra instância do mongod possa temporariamente acreditar que também é primária.
Visualize a configuração do conjunto de réplicas. Use rs.conf()

o conjunto de réplicas permite indexar suas coleções do MongoDB no Elasticsearch em sincronização em tempo real.