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 must be performed.
Αυτό μπορεί να συμβεί, για παράδειγμα, εάν ένας κόμβος αποτύχει σε μια συστάδα 2 κόμβων (όπου η απαρτία είναι 2). Σε αυτή την περίπτωση, ο αποτυχημένος κόμβος δεν μπορεί να αφαιρεθεί καθαρά από τη συστάδα εκ των υστέρων, επειδή ο εναπομείνας υγιής κόμβος είναι ήδη μη λειτουργικός, αφού έχει χάσει την απαρτία.
Ως εκ τούτου, συνιστάται να έχετε πάντα έναν περιττό αριθμό κόμβων σε μια συστάδα και να δημιουργείτε συχνά αντίγραφα ασφαλείας.
Για να γίνω σαφής, το προσωρινά απώλεια της απαρτίας (για παράδειγμα, αν επανεκκινείτε όλους τους κόμβους μιας συστάδας μαζί ή μια προσωρινή βλάβη του δικτύου απομονώνει τους κόμβους) δεν αποτελεί πρόβλημα: μόλις επανασυνδεθούν αρκετοί κόμβοι (χωρίς να χρειαστεί να επανασυνδεθούν χειροκίνητα) για να επιτευχθεί απαρτία, η συστάδα θα συνεχίσει την κανονική της λειτουργία. Μόνο μόνιμες αποτυχίες, όπως κατατμήσεις δικτύου, λανθασμένες ρυθμίσεις δικτύου, προβλήματα αυθεντικοποίησης ή βλάβες υλικού, θα απαιτήσουν χειροκίνητη ενέργεια.
Για περισσότερες πληροφορίες, ανατρέξτε στο ΣΥΧΝΈΣ ΕΡΩΤΉΣΕΙΣ του etcd.
Συστάδα 2 κόμβων¶
Δεν υποστηρίζεται ακόμα η ενεργή/παθητική συστάδα δύο κόμβων και θα προστεθεί σε μελλοντική έκδοση. Συνιστούμε την εισαγωγή ενός 3ου κόμβου, είτε ενός 3ου NetHSM είτε ενός «μάρτυρα» etcd, ο οποίος θα μπορούσε να λειτουργεί σε οποιονδήποτε κεντρικό υπολογιστή. Δείτε την επόμενη ενότητα «Μάρτυρας».
Μάρτυρας¶
The nature of clustering with etcd makes it more reliable the more nodes there are in the cluster. As explained in the Operational Redundancy section, clusters should ideally have at least 3 nodes to have room to fail, since a 2-node cluster will entirely fail if only one fails.
Ωστόσο, ο σχεδιασμός της λειτουργίας είναι τέτοιος ώστε να μην χρειάζεται να προσθέσετε μια πλήρη, πραγματική συσκευή 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 as described in the section Network.
Δημιουργία και εγκατάσταση μιας 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 πρέπει τώρα να εγκατασταθεί σε κάθε κόμβο.
Για να το κάνετε αυτό, δημιουργήστε πρώτα ένα αίτημα υπογραφής πιστοποιητικού (CSR) από τον κόμβο, όπως περιγράφεται στην ενότητα « » TLS Certificate. Με το νιτροπία αυτό γίνεται με το nitropy nethsm --host $NETHSM_HOST csr --api.
Σημείωση
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" ]
Με το νιτροπία χρησιμοποιήστε την επιλογή --san, π.χ. --san "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
Στη συνέχεια, εγκαταστήστε το αρχείο που λάβατε new_cert.pem, όπως περιγράφεται στην ενότητα Πιστοποιητικό TLS (με νιτροπία: nitropy nethsm --host $NETHSM_HOST set-certificate --api new_cert.pem).
Finally, the CA (CA.pem) can now be installed. This is only possible once the installed TLS certificate is signed by it. Otherwise, the operation will be rejected.
Επιχειρήματα
Επιχειρήματα |
Περιγραφή |
|---|---|
|
The path of the CA file |
Παράδειγμα
$ nitropy nethsm --host $NETHSM_HOST set-cluster-ca-certificate CA.pem
Μπορείτε να βρείτε την εγκατεστημένη CA του cluster με την εντολή ` nitropy nethsm –host $NETHSM_HOST get-cluster-ca-certificate `.
Information about the /config/tls/cluster-ca.pem endpoint can be found in the API documentation.
Σημείωση
Αυτή η διαδικασία πρέπει να επαναληφθεί για κάθε κόμβο.
Συγχρονισμός ρολογιού¶
Βεβαιωθείτε ότι σε κάθε κόμβο έχει ρυθμιστεί η ακριβής ώρα συστήματος, κατά προτίμηση χρησιμοποιώντας 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¶
First make sure a backup passphrase is configured on the node that will be used to register a new joiner as described in the section Backup.
Εγγραφή νέου κόμβου¶
Να έχετε στη διάθεσή σας την IP του κόμβου που θα συνδεθεί. Η πλήρης διεύθυνση URL (που ονομάζεται επίσης peer URL στην ορολογία etcd) αυτού του κόμβου θα είναι https://<IP_of_node>:2380 (π.χ. https://192.168.1.1:2380). Η θύρα πρέπει να είναι 2380, οπότε βεβαιωθείτε ότι οποιοδήποτε τείχος προστασίας μεταξύ των κόμβων επιτρέπει την κυκλοφορία TCP σε αυτή τη θύρα.
You can double-check the URL is correct by listing the cluster members on the node that is expected to join. This should list just one member: itself.
Παράδειγμα
$ nitropy nethsm --host $NETHSM_HOST list-cluster-members
Call GET /cluster/members (refer to the API documentation).
Then register that expected URL on any existing node of the cluster (if you don’t have a cluster yet, do this on the NetHSM that will serve as the initial node of the cluster).
Προαιρετικές επιλογές
Επιλογή |
Περιγραφή |
|---|---|
|
Η διεύθυνση URL ομότιμου του νέου κόμβου (μπορεί να οριστεί περισσότερες από μία φορές) |
Επιχειρήματα
Επιχειρήματα |
Περιγραφή |
|---|---|
|
Η διαδρομή του αρχείου στο οποίο εγγράφονται τα δεδομένα της ένωσης |
Παράδειγμα
$ nitropy nethsm --host $NETHSM_HOST add-cluster-member --url https://192.168.1.1:2380 join-data.json
Η εντολή εμφανίζει τα μέλη του συμπλέγματος και αποθηκεύει στο αρχείο τα δεδομένα που απαιτούνται από τον νέο κόμβο για να ενταχθεί στο σύμπλεγμα (συμπεριλαμβανομένου του πακέτου ενσωμάτωσης). Φυλάξτε αυτό το αρχείο για το επόμενο βήμα.
Call the POST /cluster/members endpoint (refer to the API documentation), passing it a JSON body containing the URL.
A successful call returns a JSON body of the form:
{
"members": [
{
"name": "",
"urls": [
"https://172.22.1.3:2380"
],
"learner": true
},
{
"name": "9ZVNM2MNWP",
"urls": [
"https://172.22.1.2:2380"
],
"learner": false
}
],
"joinerKit": "eyJiYWNrdXBfc2FsdCI6IkVlUzNPOEhHSEc5NnlNRktrdG1NZmc9PSIsInVubG9ja19zYWx0IjoiU3phMkEvYW13NlhxVWsrdHZMMmFubm5SZFlWd2ZQUjdpZ3IxK1RSdTdVaU14dmh3d0x2NWIvYVNkY2c9IiwibG9ja2VkX2RvbWFpbl9rZXkiOiIyMnNGVlkyelhQUVZ6S1pQenI3MmkwTk1WM3lmQ2k5dGwzeDhUbGtuOXM0WjFOd3JoZkRQTFZIVHp1WVl0YkQxaVZCMlovV3JHUHJlMXlwN0t4U0w4WkxjY2ZUTmUzcFg0WXE4YXNlY0wwREhXNGlIaXlPMlZnPT0ifQ=="
}
το οποίο περιέχει πληροφορίες που είναι απαραίτητες για την ένταξη του νέου κόμβου στη συστάδα. Συγκεκριμένα, παραθέτει όλα τα μέλη της συστάδας (όπου το μέλος με κενό όνομα είναι ο νέος εντασσόμενος). Περιέχει επίσης το κλειδί του τομέα που κρυπτογραφείται τόσο από τη φράση ξεκλειδώματος όσο και από την εφεδρική φράση πρόσβασης - επομένως πρέπει να έχει ρυθμιστεί προηγουμένως μια εφεδρική φράση πρόσβασης.
Σημείωση
Notice in the list of members (learner: True in the nitropy output, "learner": true in the REST API response) that the new joiner is a «learner»: it can now
connect to the cluster and receive data from it, but cannot participate until
it is promoted, which will be covered below.
Αν και αυτή η έννοια του «μαθητή» προσθέτει ένα επιπλέον βήμα (την προαγωγή), επιτρέπει την ασφαλέστερη λειτουργία του συμπλέγματος, καθώς οποιοδήποτε πρόβλημα με τον νέο κόμβο δεν μπορεί να προκαλέσει αστάθεια σε ολόκληρο το σύμπλεγμα πριν από την προαγωγή του.
Φυλάξτε το αρχείο δεδομένων σύνδεσης για το επόμενο βήμα (ή την απόκριση, αν χρησιμοποιήσατε το REST API).
Joining the Cluster as a Learner¶
Προσθέστε τον κόμβο στο σύμπλεγμα, χρησιμοποιώντας τα δεδομένα από το προηγούμενο βήμα και τον εφεδρικό κωδικό πρόσβασης του κόμβου στον οποίο είχε καταχωρηθεί ο νέος κόμβος.
Απαιτούμενες επιλογές
Επιλογή |
Περιγραφή |
|---|---|
|
Ο κωδικός πρόσβασης ασφαλείας του κόμβου στον οποίο καταχωρήθηκε ο νέος χρήστης |
Επιχειρήματα
Επιχειρήματα |
Περιγραφή |
|---|---|
|
Η διαδρομή του αρχείου δεδομένων σύνδεσης από το προηγούμενο βήμα |
Παράδειγμα
$ nitropy nethsm --host $NETHSM_HOST join-cluster --backup-passphrase $BACKUP_PASSPHRASE join-data.json
Take the response from the last step and append to it a backupPassphrase field containing the backup passphrase, and pass that data to a call to POST /cluster/join (refer to the API documentation).
Προειδοποίηση
The join call (nitropy nethsm join-cluster or POST /cluster/join) will hang until the new node is manually
promoted (see below). This is normal. When the call returns successfully, it
indicates that join and promotion have been successful. Don’t cancel this join call.
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¶
Ανάλογα με τις συνθήκες του δικτύου και του συμπλέγματος, μπορεί να χρειαστεί λίγος χρόνος μέχρι το νέο μέλος να συγχρονιστεί με το σύμπλεγμα. Μόλις ολοκληρωθεί αυτή η διαδικασία, μπορεί να προαχθεί από «μαθητή» σε πλήρες μέλος.
Προειδοποίηση
Promoting a node increases the cluster’s quorum threshold (refer to the API documentation and the Operational Redundancy section of this document). Ensure this new node has a stable connection to the cluster before promoting it.
Μπορείτε να προσπαθήσετε να προωθήσετε το νέο μέλος με τον ακόλουθο τρόπο. Μπορείτε να βρείτε τον κωδικό μέλους εμφανίζοντας τη λίστα των μελών του συμπλέγματος.
Επιχειρήματα
Επιχειρήματα |
Περιγραφή |
|---|---|
|
The ID of the learner to be promoted |
Παράδειγμα
$ nitropy nethsm --host $NETHSM_HOST promote-cluster-member $MEMBER_ID
Call POST /cluster/members/{MemberID}/promote (refer to the API documentation).
Εάν ο μαθητής δεν έχει καλύψει ακόμα την υστέρηση, τότε η διαδικασία θα αποτύχει (κωδικός HTTP 412 στο REST API) και η προαγωγή θα πρέπει να επιχειρηθεί ξανά αργότερα.
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).
Keep the join data file written by nitropy nethsm add-cluster-member (or the response from the cluster, if you used the REST API): it contains the list of cluster members and a joiner kit (you won’t need this part).
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,..."
Assuming the join data file written by nitropy (or the NetHSM REST API response) is stored in a response.json file, you can generate these last two variables automatically with the following jq expressions:
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.
Σημείωση
Η επαναφορά σε έναν κόμβο Α ενός αντιγράφου ασφαλείας που έχει δημιουργηθεί σε έναν άλλο κόμβο Ζ με διαφορετικό κλειδί τομέα θα επανεγγράψει σωστά το κλειδί τομέα του Α, όπως και πριν. Ωστόσο, εάν ο Α βρισκόταν σε συστάδα με τον κόμβο Β, ο Β θα καταστεί μη λειτουργικός, καθώς το κλειδί τομέα του Ζ δεν θα επαναφερθεί στον Β.
Με άλλα λόγια, εκτελείτε επαναφορά μόνο σε ένα σύμπλεγμα με αντίγραφα ασφαλείας που έχουν γίνει στο ίδιο σύμπλεγμα (αν και πάλι οι κόμβοι μπορεί να έχουν αφαιρεθεί ή προστεθεί από τότε). Αν θέλετε να επαναφέρετε ένα ξένο αντίγραφο ασφαλείας σε έναν κόμβο, πρώτα αφαιρέστε τον με ασφάλεια από τη συστάδα του, στη συνέχεια επαναφέρετε τον εργοστασιακά και επαναφέρετε το αντίγραφο ασφαλείας.
Καθαρή αφαίρεση ενός κόμβου¶
Εφόσον κάποιο τμήμα της συστάδας εξακολουθεί να πληροί την απαρτία, οποιοδήποτε από τα μέλη της μπορεί να χρησιμοποιηθεί για την απομάκρυνση ενός άλλου κόμβου από τη συστάδα, είτε αυτός ο κόμβος είναι ήδη μη προσβάσιμος είτε αναμένεται να γίνει.
You first have to know the ID of the node you want to remove, by listing all nodes and looking for the right one. Then it can be removed. 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.
Επιχειρήματα
Επιχειρήματα |
Περιγραφή |
|---|---|
|
The ID of the node to be removed |
Παράδειγμα
$ nitropy nethsm --host $NETHSM_HOST remove-cluster-member $MEMBER_ID
Εμφανίστε τους κόμβους με την εντολή ` `` GET /cluster/members` και διαγράψτε έναν καλώντας την εντολή ` `` DELETE /cluster/members/<id>`.
Σημείωση
Ένας κόμβος που έχει ενταχθεί στο σύμπλεγμα αλλά δεν έχει ακόμη αναβαθμιστεί μπορεί επίσης να αφαιρεθεί με ασφάλεια με αυτόν τον τρόπο.
Recovering a Failed Node¶
Ένας κόμβος που αναφέρει κατάσταση « » (Αποτυχία) θα αρνείται να ανταποκριθεί στις περισσότερες κανονικές λειτουργίες. Παρόλα αυτά, μπορεί να τεθεί εκτός λειτουργίας, να επανεκκινηθεί, να επαναρυθμιστεί, να υποβληθεί σε διάγνωση ή να απομονωθεί.
Προειδοποίηση
force-new`Η ύπαρξη των λειτουργιών « », «Failed », « ` », «diagnose` » και « ` » ισχύει μόνο για την έκδοση 5.0 και τις νεότερες εκδόσεις. Στην έκδοση 4.0, ένας κόμβος που έχει χάσει το κουόρουμ θα σταματήσει να ανταποκρίνεται σε όλα τα αιτήματα και. Θα πρέπει να επαναφερθεί στις εργοστασιακές ρυθμίσεις.
Μεταξύ των συνήθων αιτιών για τις οποίες ένας κόμβος βρίσκεται στην κατάσταση « » (Αποτυχία) περιλαμβάνονται:
Μια μόνιμη απώλεια απαρτίας ` <clustering.html#the-quorum-is-durably-lost>` __.
Προσωρινή απώλεια απαρτίας (π.χ. όταν προστίθεται ένας δεύτερος κόμβος στο σύμπλεγμα και ο δεύτερος κόμβος δεν έχει ενταχθεί ακόμα).
Το `etcd` βρίσκεται αυτή τη στιγμή σε διαδικασία επανεκκίνησης (π.χ. επειδή έχουν αλλάξει τα πιστοποιητικά ή έχει γίνει αναδιαμόρφωση του δικτύου).
Το σύμπλεγμα βρίσκεται υπό πολύ υψηλό φορτίο (π.χ. κατά τη διάρκεια της επαναφοράς ενός πολύ μεγάλου αντιγράφου ασφαλείας).
Ανεξάρτητα από την αιτία, το NetHSM θα μεταβεί στην κατάσταση « Failed» ( ) μόνο αφού περάσει τουλάχιστον ένα ολόκληρο λεπτό από ανεπιτυχείς προσπάθειες επικοινωνίας με τη βάση δεδομένων του. Αυτό γίνεται για να αποφευχθούν ψευδείς μεταβάσεις που προκαλούνται από πολύ σύντομες αστάθειες.
To help you understand which case your node is in, the diagnose function
remains available and returns information about the current status of
etcd and its database, including logs.
Παράδειγμα
$ nitropy nethsm --host $NETHSM_HOST get-cluster-diagnostics
Καλέστε τη συνάρτηση ` `` GET /health/diagnose` (ανατρέξτε στην τεκμηρίωση του API).
Σημείωση
Εάν και όταν η βάση δεδομένων καταστεί και πάλι διαθέσιμη (π.χ. όταν αποκατασταθεί η απαρτία λόγω επίλυσης του προβλήματος δικτύου), το NetHSM θα μεταβεί αυτόματα από την κατάσταση « » («Αποτυχία βάσης δεδομένων») στην κατάσταση στην οποία βρισκόταν προηγουμένως (ή θα συνεχίσει την κανονική ακολουθία εκκίνησης, εάν βρισκόταν σε διαδικασία εκκίνησης), χωρίς να απαιτείται καμία χειροκίνητη ενέργεια. Θα χρειαστεί έως και ένα λεπτό μετά την επίλυση του προβλήματος για να σταθεροποιηθεί το σύμπλεγμα, να ανιχνεύσει το HSM την επίλυση και να αλλάξει κατάσταση.
Εάν καταλήξετε στο συμπέρασμα ότι η βλάβη είναι μόνιμη (π.χ. απώλεια απαρτίας χωρίς ελπίδα επίλυσης της υποκείμενης κατάστασης), μπορείτε είτε:
Επαναφέρετε τον κόμβο στις εργοστασιακές ρυθμίσεις ( ), διαδικασία που θα διαγράψει όλα τα δεδομένα, και επαναφέρετε ένα αντίγραφο ασφαλείας.
Isolate the node with
nitropy nethsm force-new-cluster(REST API:POST /cluster/force-new), which will irreversibly forget all other cluster members, recover theetcddata present on disk and reboot. If the underlying failure was cluster-related, the node will follow the normal boot sequence and end up in either the Locked or Operational state depending on the unattended boot setting.
Σημείωση
If a node is isolated with force-new, it will desynchronized with
the cluster: any new writes on it or the cluster cannot be reconciled. The
node can still rejoin the cluster but will lose all its local
modifications.
The force-new operation, which is only available in the
Failed state, requires authentication as it is potentially destructive.
However since HSM users and roles are not available in that state, the endpoint
expects HTTPS clients to always authenticate with the unlock fake user, and
the latest known unlock passphrase as the password. With nitropy, pass them as
--username unlock --password $UNLOCK_PASSPHRASE:
$ nitropy nethsm --host $NETHSM_HOST --username unlock --password $UNLOCK_PASSPHRASE force-new-cluster
Προειδοποίηση
Μετά από ενημέρωση από έκδοση < 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 του) θα ενημερώσει αυτόματα τους άλλους κόμβους για την ενημέρωση. Ωστόσο, θα πρέπει να βεβαιωθείτε ότι εκτελείτε τέτοιες ενημερώσεις μόνο σε έναν κόμβο κάθε φορά και σε μια συστάδα όπου η απώλεια του κόμβου αυτού δεν θα χάσει την απαρτία.