2013-12-22 11 views
16

Ich habe auf dem Server mit MongoDb und ElasticSearch eingerichtet. Mit https://github.com/richardwilly98/elasticsearch-river-mongodb habe ich ElasticSearch und MongoDb miteinander verbunden.So beheben Sie Clustergesundheit gelb mit Elastic Search

ich erstellen Sie einen neuen Index mit:

curl -XPUT 'http://127.0.0.1:9200/_river/mongodb/_meta' -d '{ 
     "type": "mongodb", 
     "mongodb": { 
     "db": "my_database", 
     "collection": "my_collection" 
    }, 
     "index": { 
     "name": "mainindex", 
     "type": "string", 
     "bulk": { 
      "concurrent_requests": 1 
     } 
    } 
}' 

Sobald der Befehl ausgeführt wird, und ich gehe zu http://x.x.x.x:9200/_plugin/head/ sehe ich die Meldung: Cluster Gesundheit: gelb (1, 6).

cluster health: yellow (1, 6)

enter image description here

Antwort

21

Ein Cluster wird von mit dem gleichen Cluster-Namen innerhalb des elastischen Suche Config

Der Standard konfiguriert elasticsearch.yml Sie wahrscheinlich verwenden werden diese Einstellungen am Anfang so hat:

################################### Cluster ################################### 

# Cluster name identifies your cluster for auto-discovery. If you're running 
# multiple clusters on the same network, make sure you're using unique names. 
# 
# cluster.name: elasticsearch 


#################################### Node ##################################### 

# Node names are generated dynamically on startup, so you're relieved 
# from configuring them manually. You can tie this node to a specific name: 
# 
# node.name: "Franz Kafka" 

hier Sie würde eine einzigartige

cluster.name: "MainCluster"

und für jede Maschine und/oder i konfigurieren müssen nstance eine andere einzigartige

node.name: "LocalMachine1"

Sie jetzt diese elasticsearch.yml auf einen anderen Rechner kopieren müssen (im selben Netzwerk) oder an der gleichen Stelle wie z.B. elasticsearch_2.yml bearbeitet es für:

node.name: "LocalMachine2"

und den Cluster ist bereit

zu gehen, wenn nicht konfiguriert elastiscsearch einen zufälligen Marvel-Charakter (von 3000 nach der Dokumentation) verwenden werden, so dass nicht die node.name zu ändern sollte in Ordnung sein auch

Für zwei Knoten laufen auf der gleichen Maschine, müssen Sie eine Konfiguration vornehmen z elasticsearch_2.yml kopieren, mit obigen Änderungen. Sie müssen auch Kopien des Daten- und Protokollpfads , z.(Homebrew bestimmte Pfade :)

cp -r /usr/local/var/elasticsearch /usr/local/var/elasticsearch_2 
cp -r /usr/local/var/log/elasticsearch /usr/local/var/log/elasticsearch_2 

aussehen könnte

#################################### Paths #################################### 

# Path to directory containing configuration (this file and logging.yml): 
# 
# path.conf: /path/to/conf 

# Path to directory where to store index data allocated for this node. 
# 
path.data: /usr/local/var/elasticsearch_2/ 
# 
# Can optionally include more than one location, causing data to be striped across 
# the locations (a la RAID 0) on a file level, favouring locations with most free 
# space on creation. For example: 
# 
# path.data: /path/to/data1,/path/to/data2 

# Path to temporary files: 
# 
# path.work: /path/to/work 

# Path to log files: 
# 
path.logs: /usr/local/var/log/elasticsearch_2/ 

stellen Sie sicher, Sie haben nicht laufen elasicsearch auf localhost Loopbackdevice

127.0.0.1

nur kommentieren Sie sie aus falls es nicht so ist (Homebrew tut Patch ist so)

############################## Network And HTTP ############################### 

# Elasticsearch, by default, binds itself to the 0.0.0.0 address, and listens 
# on port [9200-9300] for HTTP traffic and on port [9300-9400] for node-to-node 
# communication. (the range means that if the port is busy, it will automatically 
# try the next port). 

# Set the bind address specifically (IPv4 or IPv6): 
# 
# network.bind_host: 192.168.0.1 

# Set the address other nodes will use to communicate with this node. If not 
# set, it is automatically derived. It must point to an actual IP address. 
# 
# network.publish_host: 192.168.0.1 

# Set both 'bind_host' and 'publish_host': 
# 
# network.host: 127.0.0.1 

jetzt können Sie Elasticsearch wie folgt beginnen:

bin/elasticsearch -D es.config=/usr/local/Cellar/elasticsearch/1.0.0.RC1/config/elasticsearch.yml 

für den ersten Knoten und Master

(weil zum ersten Mal gestartet) und dann

bin/elasticsearch -D es.config=/usr/local/Cellar/elasticsearch/1.0.0.RC1/config/elasticsearch_2.yml 

Jetzt sollten Sie 2 bekommen haben Knoten laufen

+0

danke für das Feedback, ich habe versucht, Ihrem Prozess zu folgen, aber ich laufe immer noch in Schwierigkeiten. Ein Problem ist: Wenn ich den Dienst neu starte, ist der Index, den ich erstellt habe, weg, ich muss neu indizieren. Problem Nummer zwei ist nicht alle Dokumente werden indiziert ... pünktlich ist es nur 1000 von den 5500 das andere Mal ist es 5000 von den 5500. Kannst du diese Dinge für mich einrichten, vielleicht durch eine Remote-Sitzung, damit ich sehen kann, wo Ich habe etwas falsch gemacht. Offensichtlich wirst du belohnt werden. –

+0

FYI: Ich habe zwei Knoten auf einer Maschine. –

8

Sieht aus wie Sie nicht über einen Knoten für Replikat-Shards zu gehen. Sie können die Anzahl der Replikate auf 0 reduzieren oder einen zweiten Knoten zu Ihrem Cluster hinzufügen, sodass Primär- und Replikat-Shards sicher auf verschiedenen Knoten platziert werden können.

Die Standardkonfiguration in elasticsearch.yml ist wahrscheinlich diese:

index.number_of_shards: 5 
index.number_of_replicas: 1 

Die Idee ist, dass, wenn Ihr Knoten abstürzt, wird ein anderer Knoten im Cluster eine Kopie des Shard haben. Da Sie nur einen Knoten haben, hat der Cluster keinen Platz für die Replikate und befindet sich daher in einem gelben Zustand.

+0

, wie wir einen Knoten zum Cluster hinzufügen? – Sekai

+0

Sie können einen anderen jvm-Prozess starten, der auf eine andere Konfigurationsdatei verweist, also stellen Sie sich vor, Sie haben den ES-Code in/opt/elasticsearch installiert, Sie können config /, data /,/logs, dirs in/opt/es-1,/opt/es-2. Sie können ES über die Befehlszeile starten, indem Sie mit -Des.config = <..file..> einen neuen Knoten auf eine beliebige Anzahl von Konfigurationen zeigen. – mconlin

+0

Muss ich nur auf den Clusternamen für den zweiten Knoten zeigen, damit er sich daran anschließt? Wenn ja, wie kann ich das tun? – Sekai

1

Ich posten eine Antwort, da ich auf diese Frage stürzte bei der Suche nach Lösung von si Milar Problem.

Ich habe eine Entwicklungsumgebung, wo ich nur 1 Elasticsearch-Knoten brauche, so dass keine Replikate für alle meine Indizes benötigt werden.

Cluster Gesundheit zu lösen: gelb Problem, ich habe gerade index.number_of_replicas: 1

PUT /_settings 
{ 
    "index" : { 
     "number_of_replicas" : 0 
    } 
} 
Verwandte Themen