MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Sincronizzazione in tempo reale di MongoDB 4.x con ElasticSearch 6.x +

se lavori con docker puoi ottenere questo tutorial

https://github.com/ziedtuihri/Monstache_Elasticsearch_Mongodb

Monstache è un demone di sincronizzazione scritto in Go che indicizza continuamente le tue raccolte MongoDB in Elasticsearch. Monstache ti dà la possibilità di utilizzare Elasticsearch per eseguire ricerche complesse e aggregazioni dei tuoi dati MongoDB e creare facilmente visualizzazioni e dashboard Kibana in tempo reale.documentazione per 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) esegui questo comando sul terminale$ sysctl -w vm.max_map_count=262144

se lavori su un server non so se è necessario

2) esegui su terminaldocker-compose build

3) esegui su terminal$ docker-compose up -d

non buttare giù il tuo contenitore.

$ docker ps

copia l'immagine Ipadress di mongo db

$ docker ispeziona id_of_mongo_image

copia l'indirizzo IP e impostalo in replicaset.sh ed esegui replicaset.sh

$ ./replicaset.sh

sul terminale dovresti vedere => set di repliche creato

$ docker-componi verso il basso

4)esegui su terminale$ docker-componi

finalmente .......

Replica in MongoDB

Un set di repliche è un gruppo di mongod istanze che mantengono lo stesso set di dati. Un set di repliche contiene diversi nodi portanti dati e facoltativamente un nodo arbitro. Dei nodi portanti dati, uno e un solo membro è considerato il nodo principale, mentre gli altri nodi sono considerati nodi secondari.
Il nodo principale riceve tutte le operazioni di scrittura. Un set di repliche può avere solo una primaria in grado di confermare le scritture con { w:"maggioranza" } scrivere preoccupazione; sebbene in alcune circostanze, un'altra istanza mongod possa temporaneamente ritenersi primaria.
Visualizza la configurazione del set di repliche.Usa rs.conf()

Il set di repliche ti consente di indicizzare le tue raccolte MongoDB in Elasticsearch e sincronizzarle in tempo reale.