Ελαστική αναζήτηση σε βέλτιστες πρακτικές παραγωγής - ανάπτυξης

Το Elasticsearch είναι μια εξαιρετικά βελτιστοποιημένη μηχανή αναζήτησης για σύγχρονες αναλύσεις δεδομένων.

Το Elasticsearch είναι ένας εκπληκτικός μηχανισμός αναζήτησης και ανάλυσης σε πραγματικό χρόνο. Είναι χτισμένο σε Apache Lucene. Διανέμεται, RESTful, εύκολο να αρχίσει να χρησιμοποιεί και είναι πολύ διαθέσιμο. Οι περιπτώσεις χρήσης της ελαστικής αναζήτησης περιλαμβάνουν την ενεργοποίηση της αναζήτησης, την παρακολούθηση των συναλλαγών και την ανίχνευση σφαλμάτων, την ανακάλυψη περιεχομένου, την ανάλυση αναφορών, την ασαφή αναζήτηση, τη συσσωμάτωση δεδομένων συμβάντων, την οπτικοποίηση δεδομένων. Η ελαστική αναζήτηση και η υπόλοιπη ελαστική στοίβα έχουν αποδειχθεί εξαιρετικά ευέλικτες και όπως βλέπετε παραπάνω, υπάρχουν πολλοί τρόποι ενσωμάτωσης της Elasticsearch σε αυτό που σας παρέχει το προϊόν σήμερα και προσθέστε επιπλέον πληροφορίες για αυτό.

Το χρησιμοποιούμε βαριά για αναζήτηση και αναλυτική ανάλυση στο Botmetric, δείξαμε περίπου ένα δισεκατομμύριο έγγραφα ημερησίως και χρησιμοποιούμε πολύπλοκα σύνολα για την απεικόνιση δεδομένων σε πραγματικό χρόνο.

Τούτου λεχθέντος, η εκκίνηση μιας εφαρμογής εναντίον της εκτέλεσής της στην παραγωγή και συντήρηση είναι εντελώς διαφορετική. Αυτό το aricle καλύπτει πολλούς από αυτούς τους παράγοντες από εμπειρίες πραγματικής ζωής και είναι τα βασικά κοινά στοιχεία που πρέπει να λάβετε υπόψη για την εκτέλεση της Elasticsearch στην παραγωγή.

Μνήμη:

Το Elasticsearch και το Lucene είναι γραμμένα σε Java, πράγμα που σημαίνει ότι πρέπει να προσέξετε τα στατιστικά στοιχεία του heapspace και του JVM. Όσο περισσότερος σωρός διατίθεται για το Elasticsearch, τόσο περισσότερη μνήμη μπορεί να χρησιμοποιήσει για φίλτρο και άλλη προσωρινή αποθήκευση για να αυξήσει την απόδοση ερωτήματος. Αλλά σημειώστε ότι πάρα πολύ σωρός μπορεί να σας υποβάλει σε μακρές παύσεις συλλογής σκουπιδιών. Μην ρυθμίζετε το Xmx πάνω από την αποκοπή που χρησιμοποιεί η JVM για δείκτες συμπιεσμένων αντικειμένων (συμπιεσμένοι ωμοί). η ακριβής αποκοπή ποικίλει αλλά είναι κοντά στα 32 GB.

Ένα κοινό πρόβλημα είναι η διαμόρφωση ενός σωρού που είναι πολύ μεγάλος. Έχετε ένα μηχάνημα 64 GB - και με άσχημο τρόπο, θέλετε να δώσετε στην Elasticsearch όλες τις 64 GB μνήμης. Περισσότερα είναι καλύτερα! Ο σωρός είναι σίγουρα σημαντικός για την Elasticsearch. Χρησιμοποιείται από πολλές δομές δεδομένων εντός μνήμης για γρήγορη λειτουργία. Αλλά με αυτό είπε, υπάρχει ένας άλλος σημαντικός χρήστης της μνήμης που είναι εκτός σωρού: cache αρχείο OS.

Το Lucene έχει σχεδιαστεί για τη μόχλευση του υποκείμενου λειτουργικού συστήματος για κρυπτογράφηση δεδομένων σε δομές δεδομένων. Τα τμήματα Lucene αποθηκεύονται σε μεμονωμένα αρχεία. Επειδή τα τμήματα είναι αμετάβλητα, αυτά τα αρχεία δεν αλλάζουν ποτέ. Αυτό τους κάνει πολύ cache φιλικό, και το υποκείμενο OS θα κρατήσει ευτυχώς ζεστό τμήματα που κατοικούν στη μνήμη για ταχύτερη πρόσβαση. Αυτά τα τμήματα περιλαμβάνουν τόσο την αντεστραμμένη ευρετήριο (για την αναζήτηση πλήρους κειμένου) όσο και τις τιμές doc (για συγκεντρώσεις). Η απόδοση της Lucene βασίζεται σε αυτή την αλληλεπίδραση με το λειτουργικό σύστημα. Αλλά αν δώσετε όλη τη διαθέσιμη μνήμη στον σωρό της Elasticsearch, δεν θα υπάρξει παραμονή για την προσωρινή μνήμη αρχείων OS. Αυτό μπορεί να επηρεάσει σοβαρά την απόδοση. Η συνήθης σύσταση είναι να δοθεί το 50% της διαθέσιμης μνήμης στον σωρό Elasticsearch, αφήνοντας το υπόλοιπο 50% δωρεάν. Δεν θα παραμείνει αχρησιμοποίητο. Η Lucene θα καταναλώσει ευτυχώς ό, τι έχει απομείνει για την προσωρινή μνήμη αρχείων. Ο σωρός ελαστικής αναζήτησης μπορεί να διαμορφωθεί με διάφορους τρόπους,

εξαγωγή ES_HEAP_SIZE = 10g

ή

ES_JAVA_OPTS = "- Xms10g -Xmx10g" ./bin/elasticsearch

ΕΠΕΞΕΡΓΑΣΤΗΣ:

Η ελαστική αναζήτηση υποστηρίζει συγκεντρώσεις και φιλτραρισμένα ερωτήματα. Η λειτουργία σύνθετων φιλτραρισμένων ερωτημάτων, η έντονη ευρετηρίαση, η διήθηση και οι ερωτήσεις σε σχέση με τους δείκτες χρειάζονται μεγάλη CPU, οπότε η ανάληψη του σωστού είναι κρίσιμη. Κάποιος πρέπει να καταλάβει τις προδιαγραφές της CPU και πώς συμπεριφέρονται με την Java καθώς τα ερωτήματα τρέχουν στο JVM.

Κάθε μπιλιάρδο τρέχει μια σειρά από νήματα, τα οποία μπορούν να διαμορφωθούν και έχουν μια ουρά. Αλλάζοντας αυτό δεν συνιστάται εκτός αν έχετε πολύ συγκεκριμένη απαίτηση, όπως η Elasticsearch κάνει την κατανομή των πυρήνων δυναμικά.

Τύποι πισίνας νήματος:

Το Elasticsearch διαθέτει 3 τύπους πισινών Thread.

  1. Cached: Η προσωρινή μνήμη κλωστηρίων είναι μια απεριόριστη δεξαμενή νήματος που θα δημιουργήσει ένα νήμα αν υπάρχουν αιτήματα που εκκρεμούν. Αυτός ο συνδυασμός νήματος χρησιμοποιείται για να αποτρέψει την παρεμπόδιση ή την απόρριψη αιτημάτων που υποβάλλονται σε αυτήν την ομάδα. Τα αχρησιμοποίητα νήματα σε αυτήν την ομάδα νήματος θα τερματιστούν μετά τη λήξη της ζωντανής αποθήκευσης (προεπιλογή σε πέντε λεπτά). Η μνήμη προσωρινής αποθήκευσης κλωστοϋφαντουργικών είναι αποκλειστικά για τη γενική δεξαμενή νήματος.
  2. Σταθερό: Η μόνιμη δεξαμενή νήματος διατηρεί ένα σταθερό μέγεθος νημάτων για να χειρίζεται τα αιτήματα με μια ουρά (προαιρετικά οριοθετημένη) για εκκρεμή αιτήματα που δεν έχουν θέματα για την εξυπηρέτησή τους. Η παράμετρος μεγέθους ελέγχει τον αριθμό των νημάτων και τις προεπιλογές στον αριθμό των χρόνων των πυρήνων 5.
  3. Κλιμάκωση: Η κλίμακα νήματος κλιμάκωσης διατηρεί έναν δυναμικό αριθμό νημάτων. Αυτός ο αριθμός είναι ανάλογος προς το φόρτο εργασίας και κυμαίνεται μεταξύ 1 και της τιμής της παραμέτρου μεγέθους.

Η ελαστική αναζήτηση διαχωρίζει τη χρήση της CPU σε πισίνες με διάφορα είδη:

  • γενική: για τις τυπικές λειτουργίες, όπως η ανακάλυψη και ο τύπος πισίνας νήματος, αποθηκεύονται προσωρινά.
  • ευρετήριο: για πράξεις ευρετηρίου / διαγραφής. Ο τύπος πισίνας είναι σταθερός.
  • αναζήτηση: για πράξεις μέτρησης / αναζήτησης. Ο τύπος πισίνας είναι σταθερός.
  • get: για να πάρετε λειτουργίες. Ο τύπος πισίνας είναι σταθερός.
  • χύμα: για χύδην εργασίες όπως χύδην ευρετηρίαση. Ο τύπος πισίνας είναι σταθερός. Η βέλτιστη διαμόρφωση των μαζικών εγγράφων εξαρτάται από τη διαμόρφωση του συμπλέγματος, κάτι που μπορεί να αναγνωριστεί με τη δοκιμή πολλαπλών τιμών.
  • percolate: για διήθηση. Ο τύπος πισίνας είναι σταθερός.
  • ανανέωση: Για εργασίες ανανέωσης. Ο τύπος πισίνας νήματος κλιμακώνεται.

Η αλλαγή μιας συγκεκριμένης ομάδας νήματος μπορεί να γίνει μέσω της ρύθμισης των παραμέτρων που αφορούν το συγκεκριμένο τύπο.

Διαβάστε περισσότερα https://www.elastic.co/guide/en/elasticsearch/reference/2.2/modules-threadpool.html#types

Μέγεθος σάρκας:

Το shard είναι η μονάδα στην οποία η Elasticsearch διανέμει δεδομένα μέσα στο σύμπλεγμα. Η ταχύτητα με την οποία το Elasticsearch μπορεί να μετακινήσει θραύσματα γύρω από την ισορροπία δεδομένων, π.χ. μετά από μια αποτυχία, θα εξαρτηθεί από το μέγεθος και τον αριθμό των θραυσμάτων καθώς και από την απόδοση του δικτύου και του δίσκου.

Στην Elasticsearch, κάθε ερώτημα εκτελείται σε ένα μόνο νήμα ανά τεμαχισμό. Εντούτοις, πολλαπλά κομμάτια μπορούν να υποβληθούν σε επεξεργασία παράλληλα, όπως και πολλαπλά ερωτήματα και συγκεντρώσεις κατά του ίδιου θραύσματος.

Αυτό σημαίνει ότι η ελάχιστη καθυστέρηση ερωτήματος, όταν δεν εμπλέκεται η προσωρινή αποθήκευση, θα εξαρτηθεί από τα δεδομένα, τον τύπο του ερωτήματος, καθώς και το μέγεθος του τεμαχίου. Η αναζήτηση πολλών μικρών τεμαχίων θα καταστήσει την επεξεργασία ανά τεμαχισμό γρηγορότερη, αλλά όσο περισσότερες εργασίες πρέπει να τεθούν σε σειρά και να επεξεργαστούν με τη σειρά τους, δεν είναι απαραιτήτως να γίνονται ταχύτερες από την αναζήτηση ενός μικρότερου αριθμού μεγαλύτερων θραυσμάτων. Έχοντας πολλά μικρά κομμάτια μπορεί επίσης να μειώσει τη διακίνηση ερωτήματος αν υπάρχουν πολλαπλές ταυτόχρονες ερωτήσεις.

Κάθε θραύσμα έχει δεδομένα που πρέπει να διατηρούνται στη μνήμη και χρησιμοποιεί χώρο σωρού. Αυτό περιλαμβάνει τις δομές δεδομένων που συγκρατούν πληροφορίες στο επίπεδο των shard και επίσης σε επίπεδο τμήματος για να καθορίσουν πού βρίσκονται τα δεδομένα στο δίσκο. Το μέγεθος αυτών των δομών δεδομένων δεν είναι σταθερό και θα ποικίλει ανάλογα με τη χρήση. Ένα σημαντικό χαρακτηριστικό των γενικών εξόδων που σχετίζονται με το τμήμα είναι ωστόσο ότι δεν είναι αυστηρά ανάλογο με το μέγεθος του τμήματος. Αυτό σημαίνει ότι τα μεγαλύτερα τμήματα έχουν λιγότερα επιβάρυνση ανά όγκο δεδομένων σε σύγκριση με μικρότερα τμήματα. Η διαφορά μπορεί να είναι σημαντική. Η επιλογή του σωστού αριθμού τεμαχίων είναι περίπλοκη επειδή δεν γνωρίζετε ποτέ πόσα έγγραφα θα λάβετε προτού ξεκινήσετε. Έχοντας πολλά κομμάτια μπορεί να είναι τόσο καλό όσο και τρομερό για ένα σύμπλεγμα. Οι δείκτες και η διαχείριση των κομματιών μπορούν να επιβαρύνουν τον κύριο κόμβο, ο οποίος μπορεί να μην ανταποκρίνεται, οδηγώντας σε κάποια παράξενη και δυσάρεστη συμπεριφορά. Κατανομή των κύριων κόμβων σας αρκετούς πόρους για να αντιμετωπίσετε το μέγεθος του συμπλέγματος.

Το κακό είναι ότι ο αριθμός των κομματιών είναι αμετάβλητος και ορίζεται όταν δημιουργείτε τον δείκτη. Μόλις δημιουργηθεί ο ευρετήριο, ο μόνος τρόπος για να αλλάξετε τον αριθμό των κομματιών είναι να διαγράψετε τους δείκτες σας, να τους δημιουργήσετε ξανά και να ξανακάνετε.

Αντιγραφή

Η ελαστική αναζήτηση υποστηρίζει την αναπαραγωγή, τα δεδομένα αντιγράφονται μεταξύ των κόμβων δεδομένων, έτσι ώστε η απώλεια κόμβου να μην οδηγήσει σε απώλεια δεδομένων. Ο προεπιλεγμένος παράγοντας αναπαραγωγής είναι 1, αλλά ανάλογα με τις απαιτήσεις του προϊόντος σας μπορεί να αυξηθεί. Τα περισσότερα αντίγραφα, πιο ανθεκτικά σε καταστροφές τα δεδομένα σας θα είναι. Ένα άλλο πλεονέκτημα της ύπαρξης περισσότερων αντιγράφων είναι ότι κάθε κόμβος διατηρεί ένα τεμάχιο αναπαραγωγής, το οποίο βελτιώνει την απόδοση του ερωτήματος καθώς χρησιμοποιούνται και αντίγραφα για την ερώτηση.

Ο τύπος αναπαραγωγής που χρησιμοποιείται από την Elasticsearch για συνεκτικότητα είναι,

(πρωτοβάθμια + αριθμός_εφαρμογών) / 2 + 1

Βελτιστοποίηση της κατανομής

Με βάση τις απαιτήσεις δεδομένων των προϊόντων, μπορούμε να ταξινομήσουμε τα δεδομένα σε ζεστό και κρύο. Οι δείκτες στους οποίους γίνεται πρόσβαση συχνότερα από τους άλλους, μπορούν να διατεθούν περισσότεροι κόμβοι δεδομένων, ενώ οι δείκτες που είναι λιγότερο προσπελάσιμοι δείκτες μπορούν να έχουν λιγότερους πόρους που διατίθενται. Αυτή η στρατηγική είναι ιδιαίτερα χρήσιμη για την αποθήκευση δεδομένων χρονοσειρών όπως τα αρχεία καταγραφής εφαρμογών (π.χ. ELK).

Αυτό μπορεί να επιτευχθεί με την εκτέλεση ενός cronjob που μετακινεί τους δείκτες σε διαφορετικούς κόμβους σε τακτά χρονικά διαστήματα.

Ο καυτός κόμβος είναι ένας τύπος κόμβου δεδομένων που εκτελεί όλα τα ευρετήρια μέσα στο σύμπλεγμα. Διαθέτουν επίσης τους πιο πρόσφατους δείκτες, καθώς αυτές γενικά τείνουν να αναζητούνται συχνότερα. Καθώς η ευρετηρίαση είναι μια εντατική λειτουργία CPU και IO, αυτοί οι διακομιστές πρέπει να είναι ισχυροί και να υποστηρίζονται από την προσαρτημένη αποθήκευση SSD. Συνιστούμε την εκτέλεση τουλάχιστον 3 Hot κόμβων για υψηλή διαθεσιμότητα. Ανάλογα με την ποσότητα των πρόσφατων δεδομένων που θέλετε να συλλέξετε και να κάνετε αναζήτηση, ίσως χρειαστεί να αυξήσετε αυτόν τον αριθμό για να επιτύχετε τους στόχους απόδοσης.

Ο ζεστός κόμβος είναι τύπος κόμβου δεδομένων που έχει σχεδιαστεί για να χειρίζεται μεγάλο αριθμό δεικτών μόνο για ανάγνωση, οι οποίοι δεν είναι τόσο πιθανό να ερωτηθούν συχνά. Δεδομένου ότι αυτοί οι δείκτες είναι μόνο για ανάγνωση, ο θερμός κόμβος τείνει να χρησιμοποιεί μεγάλους προσαρτημένους δίσκους (συνήθως περιστρεφόμενους δίσκους) αντί για SSD. Όπως και με τον καυτό κόμβο, συνιστούμε τουλάχιστον 3 ζεστό κόμβο για υψηλή διαθεσιμότητα. Και όπως και πριν, με την παρατήρηση ότι μεγαλύτερα ποσά δεδομένων μπορεί να απαιτούν πρόσθετους κόμβους για να πληρούν τις απαιτήσεις απόδοσης. Επίσης, σημειώστε ότι οι διαμορφώσεις CPU και μνήμης θα πρέπει συχνά να αντικατοπτρίζουν εκείνες των θερμών κόμβων σας. Αυτό μπορεί να προσδιοριστεί μόνο με δοκιμές με ερωτήματα παρόμοια με αυτά που θα αντιμετωπίσετε σε μια κατάσταση παραγωγής.

Για περισσότερες λεπτομέρειες σχετικά με τον ζεστό και ζεστό κόμβο, ανατρέξτε εδώ.

Μια άλλη στρατηγική που μπορείτε να προσαρμόσετε είναι η αρχειοθέτηση των δεικτών στο s3 και η αποκατάσταση όταν χρειάζεστε δεδομένα από αυτούς τους δείκτες. Μπορείτε να διαβάσετε περισσότερα για αυτό από εδώ.

Τοπολογία κόμβου:

Οι κόμβοι ελαστικής αναζήτησης μπορούν να χωριστούν σε τρεις κατηγορίες κύριου κόμβου, κόμβου δεδομένων, κόμβου πελάτη.

  1. Κύριος κόμβος: Ο κύριος κόμβος μπορεί να είναι μικρός εάν δεν είναι και ένας κόμβος δεδομένων, καθώς δεν αποθηκεύει δείκτες / θραύσματα. Η ευθύνη της είναι η αποθήκευση λεπτομερούς κατάστασης συμπλέγματος και η παροχή βοήθειας σε δεδομένα και άλλους κόμβους σε αναζήτηση μεταδεδομένων δεδομένων / τεμαχίων. Η ελαστική αναζήτηση θα πρέπει να έχει πολλαπλούς κύριους κόμβους για να αποφευχθεί το πρόβλημα του εγκεφάλου.
  2. Κόμβος δεδομένων: Ο κόμβος δεδομένων είναι υπεύθυνος για την αποθήκευση / ερώτηση των πραγματικών δεδομένων ευρετηρίου.
  3. Κόμβος πελάτη: Ο κόμβος πελάτη χρησιμοποιήθηκε ως διακομιστής μεσολάβησης για την ευρετηρίαση και την αναζήτηση. Αυτό συνιστάται ανεπιφύλακτα, εάν συγκεντρωθούν σε μεγάλο βαθμό. Αυτοί είναι ειδικοί κόμβοι ElasticSearch που δεν είναι ούτε κατάλληλοι για δεδομένα ούτε για master. Οι κόμβοι των πελατών είναι ενήμεροι για το σύμπλεγμα και επομένως μπορούν να λειτουργήσουν ως έξυπνοι αντισταθμιστές φορτίου. Μπορείτε να στείλετε τα ερωτήματά σας στους κόμβους του πελάτη που μπορούν στη συνέχεια να αναλάβουν το ακριβό έργο της συγκέντρωσης απαντήσεων στα αποτελέσματα των ερωτημάτων από κάθε κόμβο δεδομένων.

προσθέστε αυτές τις ρυθμίσεις στο αρχείο elasticsearch.yml για τους αντίστοιχους κόμβους.

Κύριος κόμβος: node.master: true node.data:false
Ο κόμβος δεδομένων: node.master: false node.data:true
Κόμβος πελάτη: node.master: false node.data:false

Συμβουλές αντιμετώπισης προβλημάτων:

Η απόδοση των ελαστικών εξαρτημάτων εξαρτάται σε μεγάλο βαθμό από το μηχάνημα στο οποίο είναι εγκατεστημένο. CPU, χρήση μνήμης και δίσκος εισόδου / εξόδου είναι βασικές μετρήσεις του λειτουργικού συστήματος για κάθε κόμβο Elasticsearch. Συνιστάται να εξετάζετε τις μετρήσεις Java Virtual Machine (JVM) όταν αυξάνεται η χρήση της CPU. Στο ακόλουθο παράδειγμα, ο λόγος για την ακίδα ήταν υψηλότερη δραστηριότητα συλλογής απορριμμάτων.

  1. Σωστή πίεση: Η υψηλή πίεση της μνήμης λειτουργεί με την απόδοση του cluster με δύο τρόπους: Καθώς η πίεση της μνήμης ανέρχεται στο 75% και παραπάνω, η μνήμη παραμένει διαθέσιμη και το σύμπλεγμα σας χρειάζεται επίσης να ξοδέψει κάποιους πόρους της CPU για να ανακτήσει τη μνήμη μέσω της συλλογής απορριμμάτων. Αυτοί οι κύκλοι CPU δεν είναι διαθέσιμοι για να χειρίζονται τα αιτήματα των χρηστών ενώ η συλλογή απορριμμάτων είναι ενεργοποιημένη. Ως αποτέλεσμα, οι χρόνοι απόκρισης για τα αιτήματα των χρηστών αυξάνονται καθώς το σύστημα γίνεται όλο και περισσότερο περιορισμένο από τους πόρους. Αν η πίεση της μνήμης συνεχίσει να αυξάνεται και φτάνει το 100%, χρησιμοποιείται μια πολύ πιο επιθετική μορφή συλλογής σκουπιδιών, η οποία με τη σειρά της θα επηρεάσει δραματικά τους χρόνους απόκρισης των συστάδων. Ο δείκτης "Χρόνος απόκρισης ευρετηρίου" δείχνει ότι η υψηλή πίεση μνήμης οδηγεί σε σημαντική επίπτωση επίδοσης.
  2. Ανάπτυξη στη μνήμη μη χώνης της JVM, τρώγοντας τη μνήμη που προορίζεται για την προσωρινή μνήμη σελίδων και ενδεχομένως να προκαλεί τη συλλογή OOM στο επίπεδο του πυρήνα.
  3. Αποφύγετε το πρόβλημα του εγκεφάλου. Ο διαχωρισμός του εγκεφάλου είναι ένα σενάριο όπου η ομάδα διασπάται. Για παράδειγμα, έχετε 6 σύμπλεγμα κόμβων. 2 κόμβοι αποσυνδέονται από το σύμπλεγμα, αλλά εξακολουθούν να μπορούν να δουν ο ένας τον άλλον. Αυτοί οι 2 κόμβοι δημιουργούν στη συνέχεια ένα άλλο σύμπλεγμα. Θα επιλέξουν ακόμη έναν νέο κύριο μεταξύ τους. Τώρα έχουμε δύο συμπλέγματα με το ίδιο όνομα, ένα με 4 κόμβους και άλλα με 2 κόμβους. Ο καθένας έχει και έναν κύριο κόμβο. Αυτό είναι αυτό που ονομάζεται ζήτημα διάσπασης-εγκεφάλου με συστάδες ES.Για να αποφευχθεί αυτό, ορίστε την ES παράμετρο discover.zen.minimum_master_nodes στο μισό αριθμό κόμβων + 1.
  4. Δεδομένου ότι η Elasticsearch χρησιμοποιεί συσκευές αποθήκευσης σε μεγάλο βαθμό, η παρακολούθηση του δίσκου I / O διασφαλίζει ότι αυτή η βασική ανάγκη εκπληρώνεται. Υπάρχουν πολλοί λόγοι για μειωμένο δίσκο εισόδου / εξόδου, το οποίο θεωρείται βασικό μετρικό για την πρόβλεψη πολλών ειδών θεμάτων. Είναι μια καλή μέτρηση για να ελέγξετε την αποτελεσματικότητα της ευρετηρίασης και της απόδοσης των ερωτήσεων. Η ανάλυση των λειτουργιών ανάγνωσης και εγγραφής δείχνει άμεσα τι χρειάζεται το σύστημα περισσότερο στην ειδική περίπτωση χρήσης. Οι ρυθμίσεις του λειτουργικού συστήματος για δίσκους εισόδου / εξόδου είναι η βάση για όλες τις άλλες βελτιστοποιήσεις, ο συντονισμός των δίσκων I / O μπορεί να αποφύγει πιθανά προβλήματα. Αν οι δίσκοι I / O εξακολουθούν να μην είναι επαρκείς, θα πρέπει να αξιολογούνται αντίμετρα όπως η βελτιστοποίηση του αριθμού των τεμαχίων και το μέγεθος τους, ο συγχρονισμός, η αντικατάσταση αργών δίσκων, η μετάβαση σε SSD ή η προσθήκη περισσότερων κόμβων ανάλογα με τις συνθήκες που προκαλούν την είσοδο / σημεία συμφόρησης.
  5. Για τις εφαρμογές που βασίζονται στην αναζήτηση, η εμπειρία του χρήστη σχετίζεται σε μεγάλο βαθμό με την καθυστέρηση των αιτημάτων αναζήτησης. Υπάρχουν πολλά πράγματα που μπορούν να επηρεάσουν την απόδοση του ερωτήματος, όπως κατασκευασμένα ερωτήματα, ακατάλληλα διαμορφωμένο σύμπλεγμα Elasticsearch, μνήμη JVM και θέματα συλλογής απορριμμάτων, δίσκο IO κ.ο.κ. Η λανθάνουσα ερώτηση είναι η μέτρηση που επηρεάζει άμεσα τους χρήστες, οπότε βεβαιωθείτε ότι έχετε τοποθετήσει ορισμένες ειδοποιήσεις σχετικά με αυτήν.
  6. Τα περισσότερα φίλτρα στο Elasticsearch αποθηκεύονται προσωρινά. Αυτό σημαίνει ότι κατά την πρώτη εκτέλεση ενός φιλτραρισμένου ερωτήματος, η Elasticsearch θα βρει έγγραφα που ταιριάζουν με το φίλτρο και θα δημιουργήσουν μια δομή που ονομάζεται "bitset" χρησιμοποιώντας αυτές τις πληροφορίες. Τα δεδομένα που είναι αποθηκευμένα στο bitset περιέχουν ένα αναγνωριστικό εγγράφου και αν ένα συγκεκριμένο έγγραφο ταιριάζει με το φίλτρο. Οι επακόλουθες εκτελέσεις των ερωτημάτων που έχουν το ίδιο φίλτρο θα επαναχρησιμοποιήσουν τις πληροφορίες που είναι αποθηκευμένες στο bitset, καθιστώντας έτσι την εκτέλεση ερωτήματος γρηγορότερη, αποθηκεύοντας τις λειτουργίες I / O και τους κύκλους CPU. Χρησιμοποιείται το φίλτρο στο ερώτημα. Για περισσότερες λεπτομέρειες, ανατρέξτε εδώ.
  7. Ο χρόνος ανανέωσης και ο χρόνος συγχώνευσης σχετίζονται στενά με την απόδοση ευρετηρίασης, συν επηρεάζουν τη συνολική απόδοση του συμπλέγματος. Ο χρόνος ανανέωσης αυξάνεται με τον αριθμό των λειτουργιών αρχείων για το δείκτη Lucene (shard).
  8. Η ενεργοποίηση της αργής καταγραφής ερωτήσεων θα σας βοηθήσει να εντοπίσετε ποια ερωτήματα είναι αργά και τι μπορεί να γίνει για να τα βελτιώσετε, ιδιαίτερα χρήσιμα για ερωτήματα μπαλαντέρ.
  9. Αυξήστε το μέγεθος ulimit για να επιτρέψετε μέγιστα αρχεία.
  10. Η απόδοση του ElasticSearch μπορεί να υποφέρει όταν το λειτουργικό σύστημα αποφασίσει να αλλάξει τη μη χρησιμοποιημένη μνήμη εφαρμογών. Απενεργοποιήστε την εναλλαγή ρυθμίζοντας τις ρυθμίσεις του επιπέδου λειτουργικού συστήματος ή ρυθμίστε τις παρακάτω στο ElasticSearch config bootstrap.mlockall: true
  11. Απενεργοποιήστε τη διαγραφή όλων των δεικτών με την αναζήτηση μπαλαντέρ. Για να βεβαιωθείτε ότι κάποιος δεν εκτελεί μια λειτουργία DELETE σε όλα τα ευρετήρια (* ή _all), ορίστε action.destructive_requires_name σε true.

Πριν τελειώσετε, εδώ είναι η λίστα των urls που είναι χρήσιμες για την παρακολούθηση των μετρήσεων.

  • / _cluster / health? pretty: Για τον δείκτη υγείας του συμπλέγματος.
  • / _status; pretty: Για όλες τις πληροφορίες σχετικά με όλους τους δείκτες.
  • / _nodes; pretty: Για όλες τις πληροφορίες σχετικά με τους κόμβους.
  • / _cat / master; όμορφο: Για κύριο κόμβο.
  • / _stats; pretty: Για κατανομή shard, stats stats.
  • / _nodes / stats? pretty: Για μεμονωμένα στατιστικά στοιχεία κόμβου, αυτό περιλαμβάνει, jvm, http, io stats για τον κόμβο.

Η συνάθροιση των μετρήσεων της Elasticsearch υποστηρίζεται από τα περισσότερα εργαλεία παρακολούθησης του συστήματος όπως το Datadog, TICK. Συνιστάται η χρήση τέτοιων εργαλείων και συνιστάται η δημιουργία χωνιού για τη συνεχή παρακολούθηση της ελαστικής αναζήτησης.

Συμπέρασμα:

Το Elasticsearch είναι ένας κατανεμημένος μηχανισμός αναζήτησης και αναλυτικών στοιχείων πλήρους κειμένου, ο οποίος επιτρέπει σε πολλούς ενοικιαστές να αναζητούν ολόκληρα σύνολα δεδομένων, ανεξάρτητα από το μέγεθός τους, σε πρωτοφανείς ταχύτητες. Εκτός από τις δυνατότητες αναζήτησης πλήρους κειμένου, το ElasticSearch διπλασιάζεται ως σύστημα ανάλυσης και κατανεμημένη βάση δεδομένων. Η ElasticSearch έχει εξαιρετικές προεπιλογές για να ξεκινήσετε. Αλλά μόλις περάσετε το αρχικό στάδιο πειραματισμού, θα πρέπει να αφιερώσετε λίγο χρόνο για να προσαρμόσετε τις ρυθμίσεις για τις ανάγκες σας. Συνιστάται να επανεξετάσετε τη διαμόρφωσή σας αργότερα, μαζί με την επίσημη τεκμηρίωση, για να διασφαλίσετε ότι το σύμπλεγμα σας έχει ρυθμιστεί ώστε να καλύπτει τις ανάγκες σας.