Clustering¶
Σημείωση
This feature is currently a technical preview with the following temporary limitation:
Active/passive setup to support two-node clusters, either by utilizing etcd Learner or Mirror, is not yet available. Use a Witness node instead.
Το NetHSM 4.0 και μετά υποστηρίζει ομαδοποίηση για τον άμεσο συγχρονισμό δεδομένων μεταξύ πολλών NetHSM. Αυτό υποστηρίζει υψηλή συχνότητα παραγωγής κλειδιών, πραγματοποιεί υψηλή διαθεσιμότητα και εξισορρόπηση φορτίου. Μια συστάδα NetHSM βασίζεται στο etcd το οποίο χρησιμοποιεί τον αλγόριθμο συναίνεσης Raft για ισχυρή συνέπεια. Αυτό εξασφαλίζει ότι τα δεδομένα (π.χ. κλειδιά) είναι σωστά σε όλα τα NetHSM ανά πάσα στιγμή.
Πριν από τη δημιουργία ενός συμπλέγματος NetHSM εξοικειωθείτε με αυτή την τεχνολογία και τους περιορισμούς της για να αποφύγετε τυχαίες διακοπές και απώλεια δεδομένων. Εκτός από αυτό το έγγραφο, μπορείτε να ανατρέξετε και στην τεκμηρίωση του etcd.
Operational Redundancy¶
Θα ονομάζουμε «κόμβο» ένα NetHSM που αναμένεται να είναι μέρος μιας συστάδας. Μια συστάδα κόμβων N θα συνεχίσει να λειτουργεί εφόσον τουλάχιστον οι κόμβοι (N/2)+1 είναι υγιείς και προσβάσιμοι. Αυτή η ελάχιστη ποσότητα υγιών, προσβάσιμων κόμβων ονομάζεται απαρτία.
Σε ένα σύμπλεγμα που πέφτει κάτω από αυτό το όριο (π.χ. λόγω προβλήματος δικτύου), δεν είναι δυνατή η εκλογή ηγέτη και η τοπική παρουσία του etcd σε κάθε κόμβο δεν είναι πλέον σε θέση να εκτελεί λειτουργίες ανάγνωσης και εγγραφής. Αυτό συνεπάγεται τα ακόλουθα σενάρια.
Ένας κόμβος πέφτει και η απαρτία εξακολουθεί να επιτυγχάνεται¶
Σε μια συστάδα 3 κόμβων, εάν ένας κόμβος αποτύχει (καταρρεύσει ή γίνει μη προσβάσιμος λόγω συνθηκών δικτύου), οι άλλοι δύο κόμβοι θα συνεχίσουν να λειτουργούν και να εξυπηρετούν τις αιτήσεις.
If the failed node is still healthy (e.g. it was just a network problem), it will be in the Failed state while isolated, refusing normal operations (not even read-only).
However if the node recovers, it will cleanly resynchronize with the rest of the cluster and exit the Failed state, resuming normal operation without losing data.
Εάν δεν ανακάμψει ποτέ, πρέπει να αφαιρεθεί ` <clustering.html#removing-a-node-cleanly>` __ από το σύμπλεγμα και είτε να υποβληθεί σε διαδικασία αποκατάστασης για να καταστεί δυνατή η πρόσβαση στα δεδομένα του (ωστόσο, δεν θα αποτελεί πλέον μέρος του συμπλέγματος), είτε να γίνει επαναφορά στις εργοστασιακές ρυθμίσεις και να ακολουθηθεί εκ νέου η διαδικασία ένταξης από την αρχή.
Συμβαίνει μια κατάτμηση δικτύου και η απαρτία εξακολουθεί να επιτυγχάνεται¶
Αυτό είναι απλώς μια γενίκευση του προηγούμενου σεναρίου. Σε μια συστάδα 5 κόμβων όπου π.χ. 3 κόμβοι βρίσκονται σε μια φυσική τοποθεσία Α και 2 κόμβοι σε μια άλλη τοποθεσία Β, ένα πρόβλημα δικτύου που απομονώνει τα Α και Β θα σήμαινε τα εξής:
Οι 3 κόμβοι στη θέση Α πληρούν την απαρτία (3 σε αυτή την περίπτωση), οπότε συνεχίζουν να λειτουργούν.
The 2 nodes in location B are not meeting the quorum (still 3), so they will enter the Failed state and stop operating (even read-only).
Εάν το πρόβλημα του δικτύου επιλυθεί, οι 2 κόμβοι θα επανενωθούν με καθαρότητα με τους άλλους 3.
Με άλλα λόγια, σε περίπτωση διαχωρισμού δικτύου στη χειρότερη δυνατή περίπτωση (σε ένα σύμπλεγμα με μονό αριθμό κόμβων), το μεγαλύτερο μισό του συμπλέγματος θα παραμείνει σε καλή λειτουργία, ενώ το μικρότερο μισό θα είναι εκτός λειτουργίας έως ότου επιλυθεί ο διαχωρισμός.
Η απαρτία χάνεται οριστικά¶
A failure causing all subsets of the cluster to lose quorum will render the cluster completely inoperable (all remaining nodes will be in the Failed state), unless the failure is resolved. In this case, manual recovery <clustering.html#recovering-a-failed-node> must be performed.
Αυτό μπορεί να συμβεί, για παράδειγμα, εάν ένας κόμβος αποτύχει σε μια συστάδα 2 κόμβων (όπου η απαρτία είναι 2). Σε αυτή την περίπτωση, ο αποτυχημένος κόμβος δεν μπορεί να αφαιρεθεί καθαρά από τη συστάδα εκ των υστέρων, επειδή ο εναπομείνας υγιής κόμβος είναι ήδη μη λειτουργικός, αφού έχει χάσει την απαρτία.
Ως εκ τούτου, συνιστάται να έχετε πάντα έναν περιττό αριθμό κόμβων σε μια συστάδα και να δημιουργείτε συχνά αντίγραφα ασφαλείας.
Για να γίνω σαφής, το προσωρινά απώλεια της απαρτίας (για παράδειγμα, αν επανεκκινείτε όλους τους κόμβους μιας συστάδας μαζί ή μια προσωρινή βλάβη του δικτύου απομονώνει τους κόμβους) δεν αποτελεί πρόβλημα: μόλις επανασυνδεθούν αρκετοί κόμβοι (χωρίς να χρειαστεί να επανασυνδεθούν χειροκίνητα) για να επιτευχθεί απαρτία, η συστάδα θα συνεχίσει την κανονική της λειτουργία. Μόνο μόνιμες αποτυχίες, όπως κατατμήσεις δικτύου, λανθασμένες ρυθμίσεις δικτύου, προβλήματα αυθεντικοποίησης ή βλάβες υλικού, θα απαιτήσουν χειροκίνητη ενέργεια.
Για περισσότερες πληροφορίες, ανατρέξτε στο ΣΥΧΝΈΣ ΕΡΩΤΉΣΕΙΣ του etcd.
Συστάδα 2 κόμβων¶
Δεν υποστηρίζεται ακόμα η ενεργή/παθητική συστάδα δύο κόμβων και θα προστεθεί σε μελλοντική έκδοση. Συνιστούμε την εισαγωγή ενός 3ου κόμβου, είτε ενός 3ου NetHSM είτε ενός «μάρτυρα» etcd, ο οποίος θα μπορούσε να λειτουργεί σε οποιονδήποτε κεντρικό υπολογιστή. Δείτε την επόμενη ενότητα «Μάρτυρας».
Μάρτυρας¶
Η φύση της συσταδοποίησης με etcd την καθιστά πιο αξιόπιστη όσο περισσότεροι κόμβοι υπάρχουν στη συστάδα. Όπως εξηγείται στην ενότητα Λειτουργικός πλεονασμός, οι συστάδες θα πρέπει ιδανικά να έχουν τουλάχιστον 3 κόμβους για να έχουν περιθώριο αποτυχίας, καθώς μια συστάδα 2 κόμβων θα αποτύχει πλήρως αν αποτύχει μόνο ο ένας.
Ωστόσο, ο σχεδιασμός της λειτουργίας είναι τέτοιος ώστε να μην χρειάζεται να προσθέσετε μια πλήρη, πραγματική συσκευή NetHSM στη συστάδα σας για να επιτύχετε έναν σταθερό αριθμό κόμβων. Αντ” αυτού, μπορείτε να αναπτύξετε και να προσθέσετε έναν κόμβο «μάρτυρα» μόνοι σας. Ένας τέτοιος κόμβος είναι απλώς μια περίπτωση του etcd που εκτελείται στο μηχάνημα της επιλογής σας (ή σε ένα container) και είναι συνδεδεμένο με τη συστάδα. Θα αναγνωρίζεται ως κανονικός κόμβος από τις πραγματικές συσκευές της συστάδας και θα λαμβάνει όλα τα δεδομένα και τις ενημερώσεις από τις συσκευές (αλλά φυσικά δεν θα μπορείτε να εκτελέσετε καμία λειτουργία HSM με αυτόν - αποθηκεύει μόνο δεδομένα).
Security Considerations¶
Ο κόμβος μάρτυρας (ή οποιοσδήποτε έχει πρόσβαση σε αυτόν) έχει άμεση πρόσβαση στο storage backend όλων των κόμβων της συστάδας (π.χ. μπορείτε να αποθηκεύσετε όλες τις καταχωρήσεις και τις αντίστοιχες τιμές με το etcdctl get "/" "0").
Ωστόσο, με εξαίρεση την έκδοση παραμέτρων (/config/version, η οποία θα πρέπει πάντα να είναι «1»), όλες οι τιμές είναι κρυπτογραφημένες (είτε με ένα κλειδί συσκευής για τις τιμές που αφορούν συγκεκριμένους κόμβους είτε με τα κλειδιά τομέα για τις υπόλοιπες), εξασφαλίζοντας την εμπιστευτικότητα των ευαίσθητων δεδομένων.
Σημειώστε ωστόσο ότι ένας κακόβουλος κόμβος μπορεί:
Write garbage as the value for any entry in the store, which will cause nodes to fail decrypting it (which may lead to crashes for some system entries).
List entry names such as users, namespaces and keys, which you may consider sensitive.
Creating a Cluster¶
Κάθε συστάδα θα ξεκινάει αρχικά από έναν κόμβο. Οι νέοι κόμβοι θα εντάσσονται στη συστάδα ένας προς έναν.
Preparing Nodes¶
Η δικτυακή κυκλοφορία μεταξύ των κόμβων κρυπτογραφείται και πιστοποιείται με τη χρήση του πιστοποιητικού TLS.
Όλοι οι κόμβοι που αναμένεται να είναι μέρος της ίδιας συστάδας πρέπει πρώτα να εγκαταστήσουν μια κοινή Αρχή Πιστοποιητικών (CA) που θα τους επιτρέψει να επαληθεύουν ότι οι άλλοι κόμβοι είναι νόμιμοι.
Στη συνέχεια, υποθέτουμε ότι όλοι οι κόμβοι είναι πρόσφατα εφοδιασμένοι και λειτουργικοί.
Networking¶
Nodes must first be reconfigured with their expected final network configuration using the /config/network endpoint (refer to the API documentation).
Δημιουργία και εγκατάσταση μιας CA¶
Οι χρήστες θα πρέπει να δημιουργήσουν μια CA με τα δικά τους μέσα και σύμφωνα με τους δικούς τους λειτουργικούς περιορισμούς, διασφαλίζοντας ότι επιτρέπει τουλάχιστον τη χρήση του κλειδιού keyCertSign.
Για παράδειγμα, μια ελάχιστη CA μπορεί να δημιουργηθεί με το openssl:
$ openssl genrsa -out CA.key 2048 # create a key
$ openssl req -x509 -new -nodes -key CA.key -sha256 -days 1825 -out CA.pem -addext keyUsage=critical,keyCertSign
Αυτή η CA πρέπει τώρα να εγκατασταθεί σε κάθε κόμβο.
To do this, first generate a Certificate Signing Request (CSR) from the node with the /config/tls/csr.pem endpoint (refer to the API documentation).
Σημείωση
To properly authenticate nodes, the clustering backend (etcd) expects that each node has a certificate with a properly filled Subject Alt Names (SAN) field.
Nodes are expected to be reached only via their IP and need to have a proper IP SAN in their certificate.
IP SANs can be requested for the CSR by prefixing «IP:» to the names, as in openssl:
"subjectAltNames": [ "normalname.org", "IP:192.168.1.1" ]
Εάν θέλετε να χρησιμοποιήσετε μια δημόσια αρχή πιστοποίησης (CA) για την υπογραφή των πιστοποιητικών σας, οι κόμβοι σας πρέπει να χρησιμοποιούν δημόσιες διευθύνσεις IP. Αυτό οφείλεται σε μια απαίτηση ασφαλείας που απαγορεύει σε μια δημόσια αρχή πιστοποίησης (CA) να εκδίδει πιστοποιητικά με ιδιωτική διεύθυνση IP στο πεδίο SAN της IP.
Με δεδομένο το CSR που αποκτήθηκε (ας το ονομάσουμε nethsm.csr), μπορούμε στη συνέχεια να δημιουργήσουμε ένα πιστοποιητικό για αυτό, έτοιμο για εγκατάσταση. Για παράδειγμα με το openssl:
$ openssl x509 -req -days 1825 -in nethsm.csr -CA CA.pem -copy_extensions copy \
-CAkey CA.key -out new_cert.pem -set_serial 01 -sha256
Then install the obtained new_cert.pem with the /config/tls/cert.pem endpoint (refer to the API documentation).
Τέλος, η CA (CA.pem) μπορεί τώρα να εγκατασταθεί με το τελικό σημείο /config/tls/cluster-ca.pem (ανατρέξτε στην τεκμηρίωση API). Αυτό είναι εφικτό μόνο όταν το εγκατεστημένο πιστοποιητικό TLS υπογραφεί από αυτήν. Διαφορετικά, η λειτουργία θα απορριφθεί.
Σημείωση
Αυτή η διαδικασία πρέπει να επαναληφθεί για κάθε κόμβο.
Συγχρονισμός ρολογιού¶
Βεβαιωθείτε ότι σε κάθε κόμβο έχει ρυθμιστεί η ακριβής ώρα συστήματος, κατά προτίμηση χρησιμοποιώντας NTP/NTS αντί για χειροκίνητη ρύθμιση της ώρας. Αυτό μπορεί να γίνει μέσω της διαμόρφωσης Time και NTS/NTP.
Adding a New Node¶
Adding a node to a cluster is done in three steps:
Register the addition to the cluster (through any one of its members)
Tell the new node to join
Μόλις καλύψει τη διαφορά, προάγετε τον κόμβο από «μαθητή» σε πλήρες μέλος
Configure a Backup Passphrase¶
Πρώτα βεβαιωθείτε ότι έχει ρυθμιστεί μια εφεδρική συνθηματική φράση στον κόμβο που θα χρησιμοποιηθεί για την εγγραφή ενός νέου εντασσόμενου (ανατρέξτε στην τεκμηρίωση API του σημείου τερματισμού /config/backup-passphrase).
Εγγραφή νέου κόμβου¶
Να έχετε στη διάθεσή σας την IP του κόμβου που θα συνδεθεί. Η πλήρης διεύθυνση URL (που ονομάζεται επίσης peer URL στην ορολογία etcd) αυτού του κόμβου θα είναι https://<IP_of_node>:2380 (π.χ. https://192.168.1.1:2380). Η θύρα πρέπει να είναι 2380, οπότε βεβαιωθείτε ότι οποιοδήποτε τείχος προστασίας μεταξύ των κόμβων επιτρέπει την κυκλοφορία TCP σε αυτή τη θύρα.
Μπορείτε να επιβεβαιώσετε ότι η διεύθυνση URL είναι σωστή καλώντας το GET /cluster/members στον κόμβο που αναμένεται να ενταχθεί. Αυτό θα πρέπει να εμφανίζει μόνο ένα μέλος: τον εαυτό του.
Στη συνέχεια, καταχωρίστε την αναμενόμενη διεύθυνση URL σε οποιονδήποτε υπάρχοντα κόμβο της συστάδας (αν δεν έχετε ακόμη συστάδα, κάντε το στον NetHSM που θα χρησιμεύσει ως ο αρχικός κόμβος της συστάδας). Αυτό γίνεται χρησιμοποιώντας το τελικό σημείο POST /cluster/members (ανατρέξτε στην τεκμηρίωση API), περνώντας του ένα σώμα JSON που περιέχει τη διεύθυνση URL.
Εάν είναι επιτυχής, επιστρέφει ένα σώμα JSON της φόρμας:
{
"members": [
{
"name": "",
"urls": [
"https://172.22.1.3:2380"
],
"learner": true
},
{
"name": "9ZVNM2MNWP",
"urls": [
"https://172.22.1.2:2380"
],
"learner": false
}
],
"joinerKit": "eyJiYWNrdXBfc2FsdCI6IkVlUzNPOEhHSEc5NnlNRktrdG1NZmc9PSIsInVubG9ja19zYWx0IjoiU3phMkEvYW13NlhxVWsrdHZMMmFubm5SZFlWd2ZQUjdpZ3IxK1RSdTdVaU14dmh3d0x2NWIvYVNkY2c9IiwibG9ja2VkX2RvbWFpbl9rZXkiOiIyMnNGVlkyelhQUVZ6S1pQenI3MmkwTk1WM3lmQ2k5dGwzeDhUbGtuOXM0WjFOd3JoZkRQTFZIVHp1WVl0YkQxaVZCMlovV3JHUHJlMXlwN0t4U0w4WkxjY2ZUTmUzcFg0WXE4YXNlY0wwREhXNGlIaXlPMlZnPT0ifQ=="
}
το οποίο περιέχει πληροφορίες που είναι απαραίτητες για την ένταξη του νέου κόμβου στη συστάδα. Συγκεκριμένα, παραθέτει όλα τα μέλη της συστάδας (όπου το μέλος με κενό όνομα είναι ο νέος εντασσόμενος). Περιέχει επίσης το κλειδί του τομέα που κρυπτογραφείται τόσο από τη φράση ξεκλειδώματος όσο και από την εφεδρική φράση πρόσβασης - επομένως πρέπει να έχει ρυθμιστεί προηγουμένως μια εφεδρική φράση πρόσβασης.
Σημείωση
Παρατηρήστε στην παραπάνω απάντηση ότι ο νέος συμμετέχων είναι «μαθητής»: μπορεί πλέον να συνδεθεί στο σύμπλεγμα και να λαμβάνει δεδομένα από αυτό, αλλά δεν μπορεί να συμμετάσχει μέχρι να αναβαθμιστεί, κάτι που θα εξηγηθεί παρακάτω.
Αν και αυτή η έννοια του «μαθητή» προσθέτει ένα επιπλέον βήμα (την προαγωγή), επιτρέπει την ασφαλέστερη λειτουργία του συμπλέγματος, καθώς οποιοδήποτε πρόβλημα με τον νέο κόμβο δεν μπορεί να προκαλέσει αστάθεια σε ολόκληρο το σύμπλεγμα πριν από την προαγωγή του.
Κρατήστε αυτή την απάντηση για το επόμενο βήμα.
Joining the Cluster as a Learner¶
Πάρτε την απόκριση από το τελευταίο βήμα και προσθέστε σε αυτήν ένα πεδίο backupPassphrase που περιέχει την εφεδρική συνθηματική φράση του κόμβου στον οποίο έχει εγγραφεί ο νέος εντασσόμενος και μεταβιβάστε αυτά τα δεδομένα σε μια κλήση προς POST /cluster/join (ανατρέξτε στην τεκμηρίωση του API ` <https://nethsmdemo.nitrokey.com/api_docs/index.html>` __) στον κόμβο που αναμένεται να ενταχθεί.
Προειδοποίηση
Η κλήση προς το POST /cluster/join θα παραμείνει σε αναμονή έως ότου ο νέος κόμβος προαχθεί χειροκίνητα (βλ. παρακάτω). Αυτό είναι φυσιολογικό. Όταν η κλήση επιστρέψει με επιτυχία, αυτό σημαίνει ότι η προσθήκη και η προαγωγή ολοκληρώθηκαν με επιτυχία.
Assuming both the cluster and the node can reach each other, this will enact the actual join, wiping the data on the new joiner to instead synchronize its state with that of the cluster. If this operation fails immediately (e.g. the cluster was not reachable or authentication failed), this node’s state will not be wiped and the join will be reverted. However as soon as a first join is successful, this operation is final and can only be reverted by a factory reset.
Σε αυτό το στάδιο, ο νέος κόμβος έχει ενταχθεί ως κόμβος « » ( ): βρίσκεται σε διαδικασία συγχρονισμού με το σύμπλεγμα, αλλά δεν είναι ακόμη λειτουργικός. Από την άλλη πλευρά, οποιοδήποτε πρόβλημα προκύψει με τον κόμβο σε αυτό το στάδιο δεν θα προκαλέσει προβλήματα στο σύμπλεγμα, καθιστώντας τη διαδικασία αυτή ασφαλή.
Το τελευταίο βήμα για την ολοκλήρωση της ένταξης είναι η αναβάθμιση του νέου κόμβου σε πλήρες μέλος.
Promoting the New Learner¶
Ανάλογα με τις συνθήκες του δικτύου και του συμπλέγματος, μπορεί να χρειαστεί λίγος χρόνος μέχρι το νέο μέλος να συγχρονιστεί με το σύμπλεγμα. Μόλις ολοκληρωθεί αυτή η διαδικασία, μπορεί να προαχθεί από «μαθητή» σε πλήρες μέλος.
Προειδοποίηση
Η αναβάθμιση ενός κόμβου αυξάνει το όριο απαρτίας του συμπλέγματος (ανατρέξτε στην τεκμηρίωση του API « » και στην ενότητα « : Operational Redundancy» του παρόντος εγγράφου). Βεβαιωθείτε ότι ο νέος κόμβος διαθέτει σταθερή σύνδεση με το σύμπλεγμα πριν από την αναβάθμισή του.
Μπορείτε να προσπαθήσετε να προάγετε το νέο μέλος με την κλήση προς το POST /cluster/members/{MemberID}/promote (ανατρέξτε στην τεκμηρίωση του API του ` <https://nethsmdemo.nitrokey.com/api_docs/index.html>` __). Εάν ο μαθητής δεν έχει ακόμη καλύψει τη διαφορά, τότε η διαδικασία θα αποτύχει με κωδικό HTTP 412 και η προαγωγή θα πρέπει να επαναληφθεί αργότερα.
If this promotion is successful, the node will now have fully joined the cluster and the earlier call to /cluster/join will have returned. The node ends up in a Locked state and has to be unlocked with the unlock passphrase of the node that was used for registration. Afterwards the unlock passphrase can be changed (unlock passphrases remain node-specific and are not shared across nodes).
Adding a Witness Node¶
Prepare a Witness¶
Θα χρειαστείτε ένα περιβάλλον με διαθέσιμο το etcd v3.6, με διεύθυνση IPv4 (τουλάχιστον) προσβάσιμη από τα άλλα μέλη της συστάδας σας. Πρέπει να επιτρέπεται η κυκλοφορία TCP από και προς τη θύρα 2380.
Δημιουργήστε έναν άδειο κατάλογο όπου το etcd θα αποθηκεύει τα δεδομένα του, και γράψτε τη διαδρομή του (θα χρησιμοποιήσουμε το /var/etcd/data). Βεβαιωθείτε ότι ο χρήστης που θα εκκινήσει τη διαδικασία έχει δικαίωμα ανάγνωσης και εγγραφής στον κατάλογο.
Transfer to the machine the CA certificate that is being used to authenticate
nodes in the cluster. You should have created one in the
Creating and Installing a CA section. We’ll
store it in /var/etcd/CA.pem.
Στη συνέχεια, θα πρέπει να δημιουργήσετε ένα πιστοποιητικό για τον μάρτυρα και να το υπογράψετε με την CA, ώστε να μπορεί να επικοινωνεί με τους ομότιμούς του. Αυτό μπορεί να γίνει για παράδειγμα μέσω του openssl:
# Create a key
$ openssl genrsa -out witness.key 2048
# Create a CSR with a SAN that corresponds to the witness's IP or hostname
$ openssl req -new -sha256 -key own.key -subj "/C=US/ST=CA/O=MyOrg, Inc./CN=witness" \
-addext "subjectAltName=IP:172.22.1.3" --out witness.csr
# Sign it
$ openssl x509 -req -days 1825 -in witness.csr -CA CA.pem -copy_extensions copy \
-CAkey CA.key -out witness.pem -set_serial 01 -sha256
Αποθηκεύστε τα προκύπτοντα witness.key και witness.pem στο /var/etcd επίσης.
Register Witness to Cluster¶
Follow the normal instructions from the Registering a New Node section to signal the existing cluster the addition of a new member with the given URL(s).
Καταγράψτε την απάντηση από το σύμπλεγμα: θα πρέπει να περιέχει τη λίστα των μελών του συμπλέγματος και ένα κιτ σύνδεσης (δεν θα χρειαστείτε αυτό το μέρος).
Configure etcd¶
Σε αντίθεση με τα NetHSM που επιλέγουν αυτόματα ένα όνομα κόμβου για τον εαυτό τους (χρησιμοποιώντας το αναγνωριστικό συσκευής), πρέπει να επιλέξετε ένα όνομα για κάθε μάρτυρα που προσθέτετε, φροντίζοντας τα ονόματα να είναι μοναδικά. Θα χρησιμοποιήσουμε το «witness1» στα ακόλουθα παραδείγματα.
Με την απάντηση του NetHSM για την εγγραφή του μάρτυρα, ετοιμάστε μεταβλητές του εντύπου:
export ETCD_NAME="witness1"
export ETCD_DATA_DIR="/var/etcd/data"
export ETCD_INITIAL_CLUSTER="peer1=url1,peer1=url2,peer2=url1,peer2=url2,..."
export ETCD_INITIAL_ADVERTISE_PEER_URLS="my_url1,my_url2,..."
Υποθέτοντας ότι η απόκριση NetHSM είναι αποθηκευμένη σε ένα αρχείο response.json, μπορείτε να δημιουργήσετε αυτές τις δύο τελευταίες μεταβλητές αυτόματα με τις ακόλουθες εκφράσεις jq:
export ETCD_INITIAL_CLUSTER=$(jq --raw-output '[.members[] | ["\(if .name == "" then "witness1" else .name end)=\(.urls[])"]] | flatten | join(",")' < response.json)
export ETCD_INITIAL_ADVERTISE_PEER_URLS=$(jq --raw-output '.members[] | select(.name=="") | .urls | join(",")' < response.json)
For example with the example response provided in the Registering a New Node section, you will have:
ETCD_NAME="witness1"
ETCD_DATA_DIR="/var/etcd/data"
ETCD_INITIAL_CLUSTER="witness1=https://172.22.1.3:2380,9ZVNM2MNWP=https://172.22.1.2:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://172.22.1.3:2380"
Τέλος, δημιουργήστε ένα αρχείο etcd.conf.yml χρησιμοποιώντας το πρότυπο αρχείο που παρέχεται στο docs/etcd_witness.conf.template:
$ envsubst < NETHSM_ROOT/docs/etcd_witness.conf.template > /var/etcd/witness.conf.yml
$ cat witness.conf.yml
Αυτό θα σας δώσει ένα αρχείο της φόρμας:
name: witness1
data-dir: /var/etcd/data
log-level: warn
log-format: console
listen-peer-urls: https://0.0.0.0:2380
listen-client-urls: http://localhost:2379
initial-advertise-peer-urls: https://172.22.1.3:2380
advertise-client-urls: http://localhost:2379
initial-cluster: witness1=https://172.22.1.3:2380,9ZVNM2MNWP=https://172.22.1.2:2380
initial-cluster-state: 'existing'
peer-transport-security:
cert-file: witness.pem
key-file: witness.key
client-cert-auth: true
trusted-ca-file: CA.pem
skip-client-san-verification: true
Start etcd¶
Εκκινήστε το etcd με τον τρόπο που προτιμάτε (χειροκίνητα, systemd υπηρεσία, δοχείο κ.λπ.), δείχνοντάς του το αρχείο ρυθμίσεων που δημιουργήθηκε στο προηγούμενο βήμα:
$ cd /var/etcd
$ etcd --config-file witness.conf.yml
Θα πρέπει να δείτε να ξεκινά, να ενταχθεί στο σύμπλεγμα ως «μαθητής» και να καλύψει τη διαφορά στα δεδομένα.
Promote the Witness¶
Τέλος, μετά από λίγο, ακολουθήστε τις συνήθεις οδηγίες που αναφέρονται στην ενότητα « » (Προώθηση του νέου μαθητή) για να προωθήσετε τον μάρτυρα. Αν αυτό δεν πετύχει, δοκιμάστε ξανά αργότερα.
After a successful promotion, you should be able to check that it is healthy with the etcdctl client:
etcdctl get /config/version
Αυτό το κλειδί πρέπει να υπάρχει και να περιέχει «1».
Make sure this process keeps running, as it is now a proper member of your cluster. If you need to decommission it, first properly remove it from the cluster. If its reachable IP changes, update its URL from the cluster.
Operating a Cluster¶
Δημιουργία αντιγράφων ασφαλείας και επαναφορά¶
Η λειτουργία δημιουργίας αντιγράφων ασφαλείας λειτουργεί όπως και χωρίς συστάδα και μπορεί να ζητηθεί από οποιονδήποτε κόμβο της συστάδας. Θα δημιουργήσει αντίγραφα ασφαλείας των δεδομένων ολόκληρης της συστάδας, συμπεριλαμβανομένων των πεδίων που αφορούν συγκεκριμένους κόμβους (αν και αυτά θα αγνοηθούν, εκτός αν επαναφέρετε το αντίγραφο ασφαλείας σε έναν κόμβο χωρίς πρόβλεψη).
Ένα αντίγραφο ασφαλείας που έχει γίνει σε μια συστάδα μπορεί να αποκατασταθεί στην ίδια συστάδα, ακόμη και αν έχουν προστεθεί ή αφαιρεθεί κάποιοι κόμβοι από τότε. Τέτοιες επαναφορές που γίνονται σε λειτουργικές συστάδες δεν θα επηρεάσουν τις τιμές διαμόρφωσης (μόνο τα κλειδιά, τους χρήστες, τους χώρους ονομάτων), όπως κάθε άλλη μερική επαναφορά.
Η επαναφορά ενός αντιγράφου ασφαλείας σε έναν κόμβο που δεν έχει προγραμματιστεί, θα επαναφέρει τα πεδία που αφορούν τον κόμβο (όπως ρυθμίσεις δικτύου, πιστοποιητικά κ.λπ.) του κόμβου που χρησιμοποιήθηκε για τη δημιουργία του αντιγράφου ασφαλείας.
Η επαναφορά ενός μεγάλου αντιγράφου ασφαλείας μπορεί να επιβαρύνει τη συστάδα για κάποιο χρονικό διάστημα, ενώ ο κόμβος που εφαρμόζει την επαναφορά προωθεί τις αλλαγές στους υπόλοιπους.
Αυτή η λειτουργία παραμένει συμβατή με τα αντίγραφα ασφαλείας που έχουν γίνει σε προηγούμενες εκδόσεις του NetHSM.
Σημείωση
Η επαναφορά σε έναν κόμβο Α ενός αντιγράφου ασφαλείας που έχει δημιουργηθεί σε έναν άλλο κόμβο Ζ με διαφορετικό κλειδί τομέα θα επανεγγράψει σωστά το κλειδί τομέα του Α, όπως και πριν. Ωστόσο, εάν ο Α βρισκόταν σε συστάδα με τον κόμβο Β, ο Β θα καταστεί μη λειτουργικός, καθώς το κλειδί τομέα του Ζ δεν θα επαναφερθεί στον Β.
Με άλλα λόγια, εκτελείτε επαναφορά μόνο σε ένα σύμπλεγμα με αντίγραφα ασφαλείας που έχουν γίνει στο ίδιο σύμπλεγμα (αν και πάλι οι κόμβοι μπορεί να έχουν αφαιρεθεί ή προστεθεί από τότε). Αν θέλετε να επαναφέρετε ένα ξένο αντίγραφο ασφαλείας σε έναν κόμβο, πρώτα αφαιρέστε τον με ασφάλεια από τη συστάδα του, στη συνέχεια επαναφέρετε τον εργοστασιακά και επαναφέρετε το αντίγραφο ασφαλείας.
Καθαρή αφαίρεση ενός κόμβου¶
Εφόσον κάποιο τμήμα της συστάδας εξακολουθεί να πληροί την απαρτία, οποιοδήποτε από τα μέλη της μπορεί να χρησιμοποιηθεί για την απομάκρυνση ενός άλλου κόμβου από τη συστάδα, είτε αυτός ο κόμβος είναι ήδη μη προσβάσιμος είτε αναμένεται να γίνει.
Πρέπει πρώτα να γνωρίζετε το αναγνωριστικό του κόμβου που θέλετε να αφαιρέσετε, απαριθμώντας όλους τους κόμβους μέσω του GET /cluster/members και αναζητώντας τον σωστό.
Then it can be removed by calling DELETE /cluster/members/<id>. If the node in question was still healthy, this will isolate it from the rest of the cluster and transition it to the Failed state.
Σημείωση
Ένας κόμβος που έχει ενταχθεί στο σύμπλεγμα αλλά δεν έχει ακόμη αναβαθμιστεί μπορεί επίσης να αφαιρεθεί με ασφάλεια με αυτόν τον τρόπο.
Recovering a Failed Node¶
Ένας κόμβος που αναφέρει κατάσταση « » (Αποτυχία) θα αρνείται να ανταποκριθεί στις περισσότερες κανονικές λειτουργίες. Παρόλα αυτά, μπορεί να τεθεί εκτός λειτουργίας, να επανεκκινηθεί, να επαναρυθμιστεί, να υποβληθεί σε διάγνωση ή να απομονωθεί.
Προειδοποίηση
force-new`Η ύπαρξη των λειτουργιών « », «Failed », « ` », «diagnose` » και « ` » ισχύει μόνο για την έκδοση 5.0 και τις νεότερες εκδόσεις. Στην έκδοση 4.0, ένας κόμβος που έχει χάσει το κουόρουμ θα σταματήσει να ανταποκρίνεται σε όλα τα αιτήματα και. Θα πρέπει να επαναφερθεί στις εργοστασιακές ρυθμίσεις.
Μεταξύ των συνήθων αιτιών για τις οποίες ένας κόμβος βρίσκεται στην κατάσταση « » (Αποτυχία) περιλαμβάνονται:
Μια μόνιμη απώλεια απαρτίας ` <clustering.html#the-quorum-is-durably-lost>` __.
Προσωρινή απώλεια απαρτίας (π.χ. όταν προστίθεται ένας δεύτερος κόμβος στο σύμπλεγμα και ο δεύτερος κόμβος δεν έχει ενταχθεί ακόμα).
Το `etcd` βρίσκεται αυτή τη στιγμή σε διαδικασία επανεκκίνησης (π.χ. επειδή έχουν αλλάξει τα πιστοποιητικά ή έχει γίνει αναδιαμόρφωση του δικτύου).
Το σύμπλεγμα βρίσκεται υπό πολύ υψηλό φορτίο (π.χ. κατά τη διάρκεια της επαναφοράς ενός πολύ μεγάλου αντιγράφου ασφαλείας).
Ανεξάρτητα από την αιτία, το NetHSM θα μεταβεί στην κατάσταση « Failed» ( ) μόνο αφού περάσει τουλάχιστον ένα ολόκληρο λεπτό από ανεπιτυχείς προσπάθειες επικοινωνίας με τη βάση δεδομένων του. Αυτό γίνεται για να αποφευχθούν ψευδείς μεταβάσεις που προκαλούνται από πολύ σύντομες αστάθειες.
Για να σας βοηθήσουμε να καταλάβετε σε ποια κατάσταση βρίσκεται ο κόμβός σας, το σημείο πρόσβασης GET /health/diagnose παραμένει διαθέσιμο και επιστρέφει πληροφορίες σχετικά με την τρέχουσα κατάσταση του etcd και της βάσης δεδομένων του, συμπεριλαμβανομένων των αρχείων καταγραφής (ανατρέξτε στην τεκμηρίωση του API).
Σημείωση
Εάν και όταν η βάση δεδομένων καταστεί και πάλι διαθέσιμη (π.χ. όταν αποκατασταθεί η απαρτία λόγω επίλυσης του προβλήματος δικτύου), το NetHSM θα μεταβεί αυτόματα από την κατάσταση « » («Αποτυχία βάσης δεδομένων») στην κατάσταση στην οποία βρισκόταν προηγουμένως (ή θα συνεχίσει την κανονική ακολουθία εκκίνησης, εάν βρισκόταν σε διαδικασία εκκίνησης), χωρίς να απαιτείται καμία χειροκίνητη ενέργεια. Θα χρειαστεί έως και ένα λεπτό μετά την επίλυση του προβλήματος για να σταθεροποιηθεί το σύμπλεγμα, να ανιχνεύσει το HSM την επίλυση και να αλλάξει κατάσταση.
Εάν καταλήξετε στο συμπέρασμα ότι η βλάβη είναι μόνιμη (π.χ. απώλεια απαρτίας χωρίς ελπίδα επίλυσης της υποκείμενης κατάστασης), μπορείτε είτε:
Επαναφέρετε τον κόμβο στις εργοστασιακές ρυθμίσεις ( ), διαδικασία που θα διαγράψει όλα τα δεδομένα, και επαναφέρετε ένα αντίγραφο ασφαλείας.
Απομονώστε τον κόμβο με το
POST /cluster/force-newτελικό σημείο, ο οποίος θα ξεχάσει ανεπανόρθωτα όλα τα άλλα μέλη του συμπλέγματος, θα ανακτήσει ταetcdδεδομένα που υπάρχουν στο δίσκο και θα επανεκκινήσει. Εάν η υποκείμενη βλάβη σχετιζόταν με το σύμπλεγμα, ο κόμβος θα ακολουθήσει την κανονική ακολουθία εκκίνησης και θα καταλήξει είτε στην κατάσταση Locked είτε στην κατάσταση Operational, ανάλογα με τη ρύθμιση αυτόματης εκκίνησης.
Σημείωση
Εάν ένας κόμβος απομονωθεί με την εντολή ` `` force-new`, θα αποσυγχρονιστεί πλέον από το σύμπλεγμα: τυχόν νέες εγγραφές σε αυτόν ή στο σύμπλεγμα δεν θα μπορούν να εναρμονιστούν. Ο κόμβος μπορεί ακόμα να επανενταχθεί στο σύμπλεγμα, αλλά θα χάσει όλες τις τοπικές τροποποιήσεις του.
Το σημείο τερματισμού POST /cluster/force-new, το οποίο είναι διαθέσιμο μόνο στην κατάσταση «Αποτυχία» (Failed) ** , απαιτεί έλεγχο ταυτότητας, καθώς ενδέχεται να προκαλέσει καταστροφή. Ωστόσο, δεδομένου ότι οι χρήστες και οι ρόλοι του HSM δεν είναι διαθέσιμοι σε αυτή την κατάσταση, το σημείο τερματισμού αναμένει από τους πελάτες HTTPS να πραγματοποιούν πάντα έλεγχο ταυτότητας χρησιμοποιώντας τον εικονικό χρήστη unlock και την πιο πρόσφατη γνωστή φράση πρόσβασης ξεκλειδώματος ως κωδικό πρόσβασης.
Προειδοποίηση
Μετά από ενημέρωση από έκδοση < 5.0, το σημείο πρόσβασης force-new θα εμφανίζει πάντα το μήνυμα «Unauthorized» έως ότου ξεκλειδωθεί το HSM ή αλλάξει τουλάχιστον μία φορά ο κωδικός πρόσβασης ξεκλειδώματος.
Software Updates in Clusters¶
Οι μελλοντικές ενημερώσεις θα επισημαίνονται ως «cluster-safe» (αυτή θα πρέπει να είναι η πλειοψηφία) ή «cluster-unsafe».
Οι ασφαλείς για τη συστάδα ενημερώσεις μπορούν να εφαρμοστούν σε κόμβους που αποτελούν μέρος μιας συστάδας χωρίς να τους αφαιρέσετε πρώτα από τη συστάδα. Ωστόσο, όπως συμβαίνει με όλες τις λειτουργίες, θα πρέπει να βεβαιωθείτε ότι το κάνετε αυτό σε έναν κόμβο κάθε φορά και σε ένα σύμπλεγμα όπου η αφαίρεση ενός κόμβου δεν μειώνει την απαρτία (π.χ. αν η ενημέρωση αποτύχει).
Οι ενημερώσεις που δεν είναι ασφαλείς για συστάδες πρέπει να εφαρμόζονται σε απομονωμένους κόμβους. Θα πρέπει να διαλύσετε τη συστάδα (αφαιρώντας έναν έναν τους κόμβους), να επαναφέρετε όλους τους κόμβους εκτός από έναν, να εφαρμόσετε την ενημέρωση σε κάθε κόμβο και, στη συνέχεια, να κάνετε όλους τους κόμβους που έχουν επαναφερθεί να ενωθούν με τον εναπομείναντα κόμβο.
Φροντίστε να δημιουργείτε αντίγραφα ασφαλείας πριν από τέτοιες λειτουργίες.
Επαναδιαμόρφωση υπάρχουσας συστάδας¶
Changing the Cluster CA¶
Μια υπάρχουσα συστάδα (με δύο ή περισσότερους κόμβους) δεν μπορεί να αλλάξει την CA της συστάδας ενώ βρίσκεται σε λειτουργία. Εάν πρέπει να αλλάξετε αυτό το πιστοποιητικό: επιλέξτε έναν κόμβο, αφαιρέστε όλους τους άλλους κόμβους, ενημερώστε την CA και, στη συνέχεια, βάλτε τα άλλα μέλη να επανενταχθούν.
Changing the Network Configuration of Nodes¶
Η τροποποίηση των ρυθμίσεων δικτύου ενός κόμβου (π.χ. αλλαγή της IP του) θα ενημερώσει αυτόματα τους άλλους κόμβους για την ενημέρωση. Ωστόσο, θα πρέπει να βεβαιωθείτε ότι εκτελείτε τέτοιες ενημερώσεις μόνο σε έναν κόμβο κάθε φορά και σε μια συστάδα όπου η απώλεια του κόμβου αυτού δεν θα χάσει την απαρτία.