MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Synchronisation en temps réel de MongoDB 4.x avec ElasticSearch 6.x +

si vous travaillez avec docker, vous pouvez obtenir ce tutoriel

https://github.com/ziedtuihri/Monstache_Elasticsearch_Mongodb

Monstache est un démon de synchronisation écrit en Go qui indexe en continu vos collections MongoDB dans Elasticsearch. Monstache vous donne la possibilité d'utiliser Elasticsearch pour effectuer des recherches complexes et des agrégations de vos données MongoDB et créer facilement des visualisations et des tableaux de bord Kibana en temps réel.documentation pour 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) exécutez cette commande en terminal$ sysctl -w vm.max_map_count=262144

si vous travaillez sur un serveur je ne sais pas si c'est nécessaire

2) exécuter la construction terminaldocker-compose

3) exécutez en terminal$ docker-compose up -d

ne videz pas votre conteneur.

$ docker ps

copier l'adresse IP de mongo db image

$ docker inspecte id_of_mongo_image

copiez l'adresse IP et définissez-la dans replicaset.sh et exécutez replicaset.sh

$ ./plicaset.sh

sur le terminal, vous devriez voir => jeu de répliques créé

$ docker-composer vers le bas

4) exécuter en terminal$ docker-compose up

enfin .......

Réplication dans MongoDB

Un jeu de répliques est un groupe de mongod instances qui maintiennent le même ensemble de données. Un jeu de répliques contient plusieurs nœuds porteurs de données et éventuellement un nœud arbitre. Parmi les nœuds porteurs de données, un et un seul membre est considéré comme le nœud principal, tandis que les autres nœuds sont considérés comme des nœuds secondaires.
Le nœud principal reçoit toutes les opérations d'écriture. Un jeu de répliques ne peut avoir qu'un seul primaire capable de confirmer les écritures avec { w :"majorité" } écrire préoccupation; bien que dans certaines circonstances, une autre instance de mongod puisse provisoirement croire qu'elle est également principale.
Affichez la configuration du jeu de réplicas.Utilisez rs.conf()

l'ensemble de répliques vous permet d'indexer vos collections MongoDB dans Elasticsearch et de synchroniser en temps réel.