Kurz Einführung in elastic(search) 2.0 Teil 1

Quickstart mit elasticsearch

Nachdem ich lange Zeit mit Apache Solr gearbeitet habe, konnte ich in der letzten Zeit auch ein paar Projekte mit elasticsearch umsetzen. Die elasticsearch Website bietet eine gute Dokumentation und ebenfalls eine gute Einführung in elasticsearch.

 

Wenn man elasticsearch effektiv nutzen möchte gibt es jedoch einige Tools und Kniffe, die nicht in der offiziellen Dokumentation zu finden sind.

 

Installation und starten eines einfachen Nodes

Elasticsearch versucht es, den Einstieg sehr sehr einfach zu machen und das ist in vielen teilen wirklich gelungen. Bevor wir unseren ersten Elastic Test Cluster starten aber noch kurz ein paar theoretische Grundlagen:
 

Cluster & Nodes

 

Ein Cluster besteht aus mehreren Nodes. Ein Node ist dabei jeweils ein Elasticsearch Prozess. Auf einem physikalischen Server kann ein oder mehrere Nodes laufen. Über das zen.dicovery Protokoll finden sich nodes, die zum gleichen Cluster gehören automatisch zusammen.

 

Indexes & Shards

 

Auf einem Cluster können mehrere Indexes erstellt werden. Ein Index ist vergleichbar mit einer Datenbanktabelle. In einem Index können beliebig viele Dokumente gespeichert werden. Elastic sorgt sich dabei um die Verteilung der Dokumente auf die einzelnen Clusternodes. Ein Index wird zur Verteilung auf die Nodes in logische Scheiben, sogenannte "shards" unterteilt. Ein Dokument wird also in einem shards des Indexes gespeichert, dass macht elastic search selbsständig. Um eine Hochverfügbarkeit des Clusters zu ermöglichen, kann ein shard auf beliebig vielen Nodes repliziert werden. Bei einem replizierten shard spricht man von einem "replica shard". Der shard in dem das Dokument primäre gespeichert ist wird "primary shard" genannt.

 

Das Priinzip von Nodes, Indexes, Primary Shards und Replica Shards
Elastic Cluster - Node - Index - Primary Shard and Replica Shard

Fällt ein clusternode aus, so übernimmt der node im cluster das schreiben für ein Dokument, der vorher einen replica shard aufgenommen hat. Durch diese Replication auf Shard ebene ist elastic search, wenn es korrekt konfiguriert ist, sehr robust.

 

Soviel zunächst zur Theorie und nun lassen Sie uns beginnen einen ersten Cluster mit drei Nodes aufzubauen. Um das so einfach wie möglich zu machen verwenden wir den gleichen physikalischen Rechner.

 

Das starten mehrerer Nodes ist denkbar einfach:

 

# download elastic
wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.0.0/elasticsearch-2.0.0.tar.gz
tar xvfz elasticsearch-2.0.0.tar.gz
cd elasticsearch-2.0.0

#start elastic cluster node 1
./bin/elasticsearch &

#start elastic cluster node 2
./bin/elasticsearch &

#start elastic cluster node 3
./bin/elasticsearch &

Der Cluster State

Wir haben eben versucht drei Nodes zu starten. Doch wie sehen wir, ob sie tatsächlich laufen? Einen Weg das zu prüfen ist die Clusterhealth API:

 

curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
{
  "cluster_name" : "elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

Dieser Request Handler gibt Aufschluss darauf, ob es dem Cluster gut geht oder nicht. Der Status wird hier durch die Farben "grün", "gelb" und "rot" dargestellt.

Diese bedeuten:

 

 

  • Grün: Der Cluster ist voll funktionsfähig und es kann geschrieben werden. Für jeden primary shard gibt es die konfigurierte Anzahl an replica shards.

  • Gelb: Für jeden Shard gibt es einen Node der Daten hält, aber die Anzahl der replicas ist nicht erreicht. Dieser Status kann erreicht werden, wenn z.b. ein Node ausfällt und der replica shard auf einem anderen Node nun primary shard wurde. Während der Shard nun auf einen weitere node kopiert wird, ist der cluster gelb.

  • Rot: Der Cluster ist nicht schreibbar, für einen shard gibt es weder primary noch replica shards.

 

Wichtig: Der Clusterstate wird von dem Shard bestimmt, der den schlechtesten Status hat. Es genügt also, dass ein shard nicht allokiert wurde damit der cluster state rot wird.

 

Wie vielleicht zuvor schon zu sehen war, sind die RestAPI und die RequestHandler von elastic sehr mächtig und bieten viele Informationen zu allen gedenklichen Parametern des Clusters. Komfortabler ist an der Stelle jedoch ein GUI. Ein sehr gutes Tool ist an dieser Stelle das Kopf Plugin. Es bietet eine gute Übersicht zu den Indexes, ClusterNodes und ClusterState und ebenso eine Möglichkeit Queries direkt um Browser zu testen.

Überblick über den Elastic Cluster und die Indexes mit dem Kopf Plugin

 

Wenn du einen guten Überblick über den Cluster im Browser haben möchtest und auch elastic queries direkt im Browser testen möchtest, so ist das Kopf plugin zu empfehlen. Es kann wie folgt installiert werden:

 

cd elasticdir
./bin/plugin install https://github.com/lmenezes/elasticsearch-kopf/archive/v2.0.0.zip

Danach kannst du das Plugin wie folgt im Browser aufrufen:

 

http://clusterip:port/_plugin/kopf/
Elasticsearch cluster mit kopf managed
Elasticsearch Cluster in Kopf

Navigation