CouchDB 2.0

Auf der Couch

Anfang dieses Jahres ist der Release-Kandidat von CouchDB 2.0 erschienen, der einen nativen Cluster-Mode für die NoSQL-Datenbank mitbringt. Damit steht ein leistungsfähiger Datenspeicher zur Verfügung, der die Synchronisation zwischen mehreren Quellen unterstützt. Wir zeigen, wie Sie CouchDB in Betrieb nehmen und untersuchen, ob die Software leistet, was sie verspricht.
Die Zusammenarbeit im Unternehmen wird immer dynamischer und flexibler. Aus diesem Grund wirft IT-Administrator in der April-Ausgabe einen Blick auf die ... (mehr)

Viele Webanwendungen verwenden zur Speicherung von Daten sogenannte NoSQL-Datenbanken. Deren bekanntester Vertreter ist derzeit wohl MongoDB, aber gestartet wurde der Trend von einer NoSQL-Datenbank, die etwas in Vergessenheit geraten ist: CouchDB [1]. Vom ehemaligen IBM-Mitarbeiter Damien Katz gestartet, ist Couch­DB zu einem Apache-Projekt geworden. Ein herausragendes Merkmal von Couch­DB ist dessen Fähigkeit zur Datensynchronisation, also Dokumente zwischen Datenbanken zu replizieren und dabei Konflikte aufzulösen.

Im Lauf der Jahre sind in CouchDB viele Patches der Entwickler von Cloudant geflossen, einem Unternehmen, das mit Bigcouch eine skalierende, kommerzielle Version von CouchDB entwickelte und 2014 ausgerechnet von IBM aufgekauft wurde. Mit der neuen Version 2.0 von CouchDB wurde der Code von Bigcouch, der die Datenbank über einen Cluster hinweg skaliert, in das Projekt integriert.

Schemaloses Speichern

Die in CouchDB gespeicherten Daten müssen keiner vorab erstellten Definition genügen, dem bei relationalen Datenbanken so genannten Schema, weshalb CouchDB auch als schemalose Datenbank bezeichnet wird. Die Flexibilität geht soweit, dass Dokumente einer einzigen Sammlung auch unterschiedliche Elemente/Felder enthalten dürfen. Als Netzwerkprotokoll verwendet CouchDB das Webprotokoll HTTP und liefert Daten im JSON-Format aus. Gemäß dem REST-Prinzip, das Datenservices auf der Basis von HTTP realisiert, stehen zum Speichern in der Datenbank die Operationen PUT oder POST, zum Lesen der bekannte GET-Request zur Verfügung. Im einfachsten Fall sieht eine Abfrage so aus wie eine Web-URL

http://Server:5984/Datenbank/Ressource

Eine Liste aller Datenbanken liefert Couch­DB bei einem Aufruf von "http:// »Server:« 5984/_all_dbs".

CouchDB ist in Erlang geschrieben, der ehemals hausinternen Programmiersprache von Ericsson, die unter Webentwicklern eine kleine Fangemeinde gewonnen hat. Deshalb ist zum Kompilieren von CouchDB die Erlang-Umgebung nötig, die zwar alle gängigen Distributionen in den Repositories führen, aber nicht unbedingt in der passenden Version. CouchDB 2.0 setzt mindestens Erlang R16B03-1, R17 oder R18 voraus. Glücklicherweise bietet Erlang Solutions, eine Firma, die Dienstleistungen rund um Erlang verkauft, Binärpakete für viele Linux-Distributionen an. Es genügt, das passende Paket von [2] herunterzuladen und zu installieren:

$ wget http://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
$ sudo dpkg -i erlang-solutions_1.0_all.deb
$ sudo apt-get update
$ sudo apt-get -f install

Installation

Wir haben einen Release-Kandidaten von CouchDB getestet und aus dem Quellcode selbst übersetzt. Das wird mit dem Erscheinen der finalen Version wohl nicht mehr nötig sein, aber wenn Erlang und ein paar Abhängigkeiten installiert sind, lässt sich CouchDB mit den üblichen Aufrufen der Befehle »configure« und »make« kompilieren:

$ sudo apt-get -y install build-essential erlang-base erlang-dev erlang-manpages erlang-eunit erlang-reltool erlang-nox libicu-dev libmozjs185-dev libcurl4-openssl-dev pkg-config

»make install« installiert die Dateien per Default unterhalb von "/usr/local". Alternative Verzeichnisse stellen Sie mit "configure" ein. Mehr Informationen dazu liefert ein Aufruf von

 

configure --help | grep DIRECTORY

Im Test trat im letzten Schritt reproduzierbar das Problem auf, dass der Installer einige Manpages nicht finden konnte. Es lässt sich – wenig elegant – dadurch lösen, dass man die ins Leere zeigenden Symlinks löscht. Alternativ zum Selbstkompilieren steht eine Installation per Docker zur Verfügung [3].

Um CouchDB zu starten, sind keine Root-Rechte nötig, allerdings muss der entsprechende User Schreibrechte in einigen Verzeichnissen besitzen. Die CouchDB-Dokumentation empfiehlt, für diesen Zweck den Benutzer "couchdb" anzulegen, dem Sie die Dateien und Verzeichnisse übereignen:

$ sudo mkdir -p /usr/local/var/run/couchdb
$ sudo mkdir -p /usr/local/var/log/couchdb
$ sudo chown -R couchdb /usr/local/var/lib/couchdb
$ sudo chown -R couchdb /usr/local/var/log/couchdb
$ sudo chown -R couchdb /usr/local/var/run/couchdb
$ sudo chown -R couchdb /usr/local/lib/couchdb/etc

Alternativ können Sie eine Gruppe "couchdb" anlegen, sich selbst dieser Gruppe hinzufügen und den betreffenden Verzeichnissen Gruppenschreibrechte geben. Wenn die Rechte stimmen, lässt sich die Datenbank einfach mit dem Aufruf von couchdb starten. Die Quellcode-Distribution enthält auch das Python-Skript "dev/run", das auf dem Rechner testweise einen Cluster mit drei CouchDB-Nodes startet. Dazu müssen Sie nicht einmal "make install" ausführen, sondern können die Anwendung nach dem Kompilieren direkt im Quellcode-Verzeichnis starten. Darüber hinaus ist auch eine Konfigurationsdatei für HAProxy vorhanden, der als Frontend und Loadbalancer für einen CouchDB-Cluster fungieren kann.

Als dieser Artikel entstand, gab es noch zwei weitere Wege, CouchDB 2.0 zu installieren: ein Ansible-Playbook, das CouchDB auf CentOS 6 installiert, sowie ein Docker-Image, das mit dem oben erwähnten Aufruf lokal einen Cluster mit drei Nodes startet.

Bild 1: Ein eigener Menüpunkt dient dazu, die Funktion der Datenbank zu überprüfen.

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023