sql >> Database >  >> NoSQL >> MongoDB

MongoDB 4.x Realtime synchronisatie met ElasticSearch 6.x +

als je met docker werkt, kun je deze tutorial krijgen

https://github.com/ziedtuihri/Monstache_Elasticsearch_Mongodb

Monstache is een sync-daemon geschreven in Go die continu je MongoDB-verzamelingen indexeert in Elasticsearch. Monstache geeft u de mogelijkheid om Elasticsearch te gebruiken om complexe zoekopdrachten en aggregaties van uw MongoDB-gegevens uit te voeren en eenvoudig realtime Kibana-visualisaties en dashboards te bouwen.documentatie voor 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) voer dit commando uit en terminal$ sysctl -w vm.max_map_count=262144

als je op een server werkt, weet ik niet of dat nodig is

2)run en terminaldocker-compose build

3) voer en terminal$ docker-compose up -d uit

zet je container niet neer.

$ docker ps

kopieer het IP-adres van mongo db-afbeelding

$ docker inspecteer id_of_mongo_image

kopieer het IPAddress en zet het in replicaset.sh en voer replicaset.sh uit

$ ./replicatet.sh

op terminal moet je zien => replicaset gemaakt

$ docker-compose neer

4) run en terminal$ docker-compose up

eindelijk .......

Replicatie in MongoDB

Een replicaset is een groep van mongod instanties die dezelfde gegevensset onderhouden. Een replicaset bevat meerdere data dragende nodes en optioneel één arbiter node. Van de gegevensdragende knooppunten wordt één en slechts één lid beschouwd als het primaire knooppunt, terwijl de andere knooppunten als secundaire knooppunten worden beschouwd.
De primair knooppunt ontvangt alle schrijfbewerkingen. Een replicaset kan slechts één primaire hebben die schrijfbewerkingen kan bevestigen met { w:"meerderheid" } schrijf bezorgdheid; hoewel in sommige omstandigheden een ander mongod-exemplaar tijdelijk kan denken dat het ook primair is.
Bekijk de replicasetconfiguratie.Gebruik rs.conf()

Met

replica set kunt u uw MongoDB-collecties indexeren in Elasticsearch en realtime synchronisatie.



  1. Waarom MongoDb-sortering traag is met opzoekcollecties

  2. Hoe de Open edX MongoDB-database te implementeren voor hoge beschikbaarheid

  3. Hoe $elemMatch gebruiken op de projectie van aggregaat?

  4. Node.js, Mongo gegevens zoeken en retourneren