sql >> Base de Datos >  >> NoSQL >> MongoDB

Sincronización en tiempo real de MongoDB 4.x con ElasticSearch 6.x +

si trabaja con docker puede obtener este tutorial

https://github.com/ziedtuihri/Monstache_Elasticsearch_Mongodb

Monstache es un demonio de sincronización escrito en Go que indexa continuamente sus colecciones de MongoDB en Elasticsearch. Monstache le brinda la capacidad de usar Elasticsearch para realizar búsquedas complejas y agregaciones de sus datos de MongoDB y crear fácilmente visualizaciones y tableros de Kibana en tiempo real. Documentación para Monstache:
https://rwynn.github.io/sitio-monstache/
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) ejecute este comando en terminal$ sysctl -w vm.max_map_count=262144

si trabajas en un servidor no se si es necesario

2)ejecutar en terminaldocker-compose build

3) ejecutar en terminal$ docker-compose up -d

no bajes tu contenedor.

$ ventana acoplable ps

copie la dirección IP de la imagen de mongo db

$ docker inspeccionar id_of_mongo_image

copie la dirección IP y configúrela en replicaset.sh y ejecute replicaset.sh

$ ./replicaset.sh

en la terminal deberías ver => conjunto de réplicas creado

$ ventana acoplable-componer hacia abajo

4)ejecutar en terminal$ docker-compose up

finalmente.......

Replicación en MongoDB

Un conjunto de réplicas es un grupo de mongod instancias que mantienen el mismo conjunto de datos. Un conjunto de réplicas contiene varios nodos que contienen datos y, opcionalmente, un nodo árbitro. De los nodos que contienen datos, uno y solo un miembro se considera el nodo principal, mientras que los otros nodos se consideran nodos secundarios.
El nodo principal recibe todas las operaciones de escritura. Un conjunto de réplicas solo puede tener una principal capaz de confirmar escrituras con { w:"mayoría" } escribir preocupación; aunque en algunas circunstancias, otra instancia de mongod puede creer transitoriamente que también es primaria. manual/referencia/método/rs.conf/#rs.conf">rs.conf()

el conjunto de réplicas le permite indexar sus colecciones de MongoDB en Elasticsearch en sincronización en tiempo real.