Clustering¶
Notitie
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.
Het is nog niet in een voldoende aantal productieomgevingen getest, en er kunnen fouten in zitten.
Vanaf NetHSM 4.0 wordt clustering ondersteund om gegevens tussen verschillende NetHSM’s direct te synchroniseren. Dit ondersteunt een hoge frequentie van sleutelgeneraties, realiseert hoge beschikbaarheid en load balancing. Een NetHSM cluster is gebaseerd op etcd die het Raft consensus algoritme gebruikt voor sterke consistentie. Dit zorgt ervoor dat de gegevens (bijv. sleutels) altijd correct zijn in alle NetHSM’s.
Maak jezelf vertrouwd met deze technologie en de beperkingen ervan voordat je een NetHSM cluster opzet om onbedoelde uitval en gegevensverlies te voorkomen. In aanvulling op dit document kun je ook etcd’s documentatie raadplegen.
Operational Redundancy¶
We noemen een “knooppunt” een NetHSM waarvan verwacht wordt dat het deel uitmaakt van een cluster. Een cluster van N nodes zal blijven werken zolang tenminste (N/2)+1 nodes gezond en bereikbaar zijn. Dat minimale aantal gezonde, bereikbare knooppunten wordt het quorum genoemd.
Op een cluster dat onder deze drempelwaarde komt (bijvoorbeeld vanwege een netwerkprobleem), kan er geen leider worden gekozen en kan de lokale instantie van etcd op elk knooppunt geen lees- en schrijfbewerkingen meer uitvoeren. Dit leidt tot de volgende scenario’s.
Eén node valt uit en het quorum is nog steeds bereikt¶
In een cluster met 3 knooppunten zullen, als er één knooppunt uitvalt (crasht of onbereikbaar wordt door netwerkomstandigheden), de twee andere knooppunten blijven werken en verzoeken bedienen.
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.
Als het apparaat zich niet herstelt, moet het uit het cluster worden verwijderd en ofwel een herstelprocedure ondergaan ` <clustering.html#recovering-a-failed-node>` __ om toegang te krijgen tot de gegevens (maar het zal dan geen deel meer uitmaken van het cluster), ofwel worden teruggezet naar de fabrieksinstellingen en het toetredingsproces helemaal opnieuw doorlopen.
Er vindt een netwerkscheiding plaats en het quorum is nog steeds bereikt¶
Dit is slechts een veralgemening van het vorige scenario. In een cluster van 5 knooppunten waar zich bijvoorbeeld 3 knooppunten op een fysieke locatie A bevinden en 2 knooppunten op een andere locatie B, zou een netwerkprobleem dat A en B isoleert het volgende betekenen:
De 3 knooppunten op locatie A voldoen aan het quorum (3 in dit geval), dus ze blijven werken.
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).
Als het netwerkprobleem is opgelost, zullen de 2 knooppunten netjes terug aansluiten bij de 3 anderen.
Met andere woorden: bij een netwerkpartitie in het ergste geval (in een cluster met een oneven aantal knooppunten) blijft de grotere helft van het cluster intact, terwijl de kleinere helft buiten werking blijft totdat de partitie is verholpen.
Het Quorum is duurzaam verloren¶
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.
Dit kan bijvoorbeeld gebeuren als een enkel knooppunt faalt in een cluster met 2 knooppunten (waar het quorum 2 is). In deze situatie kan het defecte knooppunt achteraf niet netjes uit het cluster verwijderd worden, omdat het overgebleven gezonde knooppunt al onbruikbaar is omdat het quorum verloren is gegaan.
Daarom wordt geadviseerd om altijd een oneven aantal nodes in een cluster te hebben en om vaak een back-up te maken.
Om duidelijk te zijn, tijdelijk quorum verliezen (bijvoorbeeld als je alle nodes van een cluster samen herstart, of een tijdelijke netwerkstoring nodes isoleert) is geen probleem: zodra genoeg nodes opnieuw verbonden zijn (zonder handmatig opnieuw te moeten verbinden) om quorum te bereiken, zal het cluster zijn normale werking hervatten. Alleen permanente storingen zoals netwerkpartities, netwerkfoutconfiguraties, authenticatieproblemen of hardwarestoringen vereisen handmatige actie.
Zie voor meer informatie etcd’s FAQ.
2-node cluster¶
Een actief/passief cluster met twee knooppunten wordt nog niet ondersteund en zal in een toekomstige versie worden toegevoegd. We raden aan om een 3de node te introduceren, ofwel een 3de NetHSM of een etcd “getuige” die op elke host kan draaien. Zie de volgende sectie “Getuige”.
Getuige¶
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.
De functie is echter zo ontworpen dat je geen volledig, echt NetHSM-apparaat aan je cluster hoeft toe te voegen om een stabiel aantal knooppunten te bereiken. In plaats daarvan kun je zelf een “getuige” knooppunt implementeren en toevoegen. Zo’n knooppunt is gewoon een instantie van etcd die op een machine naar keuze (of in een container) draait en verbonden is met het cluster. Het wordt herkend als een normaal knooppunt van de echte apparaten in het cluster en ontvangt alle gegevens en updates van apparaten (maar natuurlijk kun je er geen HSM-bewerkingen mee uitvoeren - het slaat alleen gegevens op).
Security Considerations¶
Het witness knooppunt (of iedereen die daar toegang toe heeft) heeft direct toegang tot de opslag backend van alle knooppunten in het cluster (je kunt bijvoorbeeld alle entries en bijbehorende waarden dumpen met etcdctl get "/" "0").
Echter, met uitzondering van de config versie (/config/version, die altijd “1” moet zijn), worden strikt alle waarden versleuteld (met ofwel een apparaatsleutel voor knooppuntspecifieke waarden of de domeinsleutels voor andere waarden), waardoor de vertrouwelijkheid van gevoelige gegevens wordt gegarandeerd.
Merk echter op dat een kwaadwillende node:
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¶
Elk cluster zal initieel starten met een enkel knooppunt. Nieuwe knooppunten voegen zich één voor één bij het cluster.
Preparing Nodes¶
Netwerkverkeer tussen nodes wordt versleuteld en geverifieerd met behulp van hun TLS-certificaat.
Alle nodes waarvan verwacht wordt dat ze deel uitmaken van hetzelfde cluster moeten eerst een gemeenschappelijke Certificate Authority (CA) installeren waarmee ze kunnen verifiëren dat andere nodes legitiem zijn.
In het volgende gaan we ervan uit dat alle knooppunten pas beschikbaar en operationeel zijn.
Networking¶
Nodes must first be reconfigured with their expected final network configuration as described in the section Network.
Een CA aanmaken en installeren¶
Gebruikers moeten op hun eigen manier en volgens hun eigen operationele beperkingen een CA aanmaken, en ervoor zorgen dat deze op zijn minst het gebruik van de sleutel keyCertSign toestaat.
Een minimale CA kan bijvoorbeeld aangemaakt worden met 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
Deze CA moet nu op elk knooppunt geïnstalleerd worden.
Om dit te doen, moet je eerst een Certificate Signing Request (CSR) genereren vanaf het knooppunt, zoals beschreven in de paragraaf TLS-certificaat. Met nitropie doe je dit met nitropy nethsm --host $NETHSM_HOST csr --api.
Notitie
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" ]
Gebruik bij nitropie de optie --san, bijvoorbeeld --san "IP:192.168.1.1".
Als je een openbare CA wilt gebruiken voor het ondertekenen van je certificaten, moeten je knooppunten openbare IP-adressen gebruiken. Dit komt door een beveiligingsvereiste die een openbare CA verbiedt om certificaten uit te geven met een privé-IP-adres in de IP-SAN.
Gegeven het verkregen CSR (laten we het nethsm.csr noemen), kunnen we er een certificaat voor genereren, klaar om geïnstalleerd te worden. Bijvoorbeeld met 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
Installeer vervolgens het verkregen new_cert.pem zoals beschreven in de paragraaf TLS-certificaat (met nitropie: 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.
Argumenten
Argument |
Beschrijving |
|---|---|
|
The path of the CA file |
Voorbeeld
$ nitropy nethsm --host $NETHSM_HOST set-cluster-ca-certificate CA.pem
De geïnstalleerde cluster-CA kan worden opgehaald via 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.
Notitie
Dit proces moet voor elk knooppunt herhaald worden.
Klok Synchronisatie¶
Zorg ervoor dat elk knooppunt is voorzien van een nauwkeurige systeemtijd, bij voorkeur via NTP/NTS in plaats van handmatige tijdinstelling. Dit kan worden geregeld via Time en NTS/NTP configuratie.
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
Zodra het zijn achterstand heeft ingehaald, promoveer je het knooppunt van leerling tot volwaardig lid
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.
Een nieuwe node registreren¶
Houd het IP-adres bij de hand van het knooppunt dat zich zal aansluiten. De volledige URL (ook wel peer URL genoemd in etcd terminologie) van dat knooppunt zal https://<IP_of_node>:2380 zijn (bijvoorbeeld https://192.168.1.1:2380).** De poort **moet 2380 zijn, dus zorg ervoor dat een firewall tussen de knooppunten TCP-verkeer op die poort toestaat.
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.
Voorbeeld
$ 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).
Optionele opties
Optie |
Beschrijving |
|---|---|
|
De peer-URL van het nieuwe knooppunt (kan meerdere keren worden ingesteld) |
Argumenten
Argument |
Beschrijving |
|---|---|
|
Het pad naar het bestand waarin de samengevoegde gegevens worden opgeslagen |
Voorbeeld
$ nitropy nethsm --host $NETHSM_HOST add-cluster-member --url https://192.168.1.1:2380 join-data.json
Het commando geeft een overzicht van de clusterleden en schrijft de gegevens die het nieuwe knooppunt nodig heeft om zich bij het cluster aan te sluiten (inclusief de joiner-kit) naar het bestand. Bewaar dit bestand voor de volgende stap.
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=="
}
die informatie bevat die nodig is voor het nieuwe knooppunt om zich bij het cluster aan te sluiten. Het bevat in het bijzonder een lijst met alle leden van het cluster (waarbij het lid met een lege naam de nieuwe toetreder is). Het bevat ook de domeinsleutel die versleuteld is door zowel de ontgrendel- als de back-uppasphrase - er moet dus eerder een back-uppasphrase zijn geconfigureerd.
Notitie
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.
Hoewel dit concept van „learner“ een extra stap (promotie) met zich meebrengt, zorgt het voor een veiligere werking van het cluster, aangezien een eventueel probleem met het nieuwe knooppunt geen instabiliteit in het hele cluster kan veroorzaken voordat het wordt gepromoveerd.
Bewaar het koppelingsgegevensbestand voor de volgende stap (of het antwoord, als je de REST API hebt gebruikt).
Joining the Cluster as a Learner¶
Sluit je aan bij het cluster op het knooppunt dat zich naar verwachting zal aansluiten, met behulp van de gegevens uit de vorige stap en de back-up-toegangscode van het knooppunt waarop de nieuwe deelnemer is geregistreerd.
Verplichte opties
Optie |
Beschrijving |
|---|---|
|
De back-upwachtzin van het knooppunt waarop de nieuwe deelnemer is geregistreerd |
Argumenten
Argument |
Beschrijving |
|---|---|
|
Het pad naar het samenvoegingsgegevensbestand uit de vorige stap |
Voorbeeld
$ 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).
Waarschuwing
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.
In dit stadium is het nieuwe knooppunt toegevoegd als een ‘ ’ leer- -knooppunt: het is bezig met synchroniseren met het cluster, maar is nog niet operationeel. Aan de andere kant zal een eventueel probleem met het knooppunt in dit stadium geen gevolgen hebben voor het cluster, waardoor deze handeling veilig is.
De laatste stap om de toetreding af te ronden, is het nieuwe lid tot volwaardig lid te benoemen.
Promoting the New Learner¶
Afhankelijk van de netwerk- en clusteromstandigheden kan het even duren voordat het nieuwe lid de achterstand op het cluster heeft ingehaald. Zodra dit is gebeurd, kan het worden gepromoveerd van leerling tot volwaardig lid.
Waarschuwing
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.
Je kunt het nieuwe lid als volgt promoten. Je kunt het lid-ID vinden door de clusterleden weer te geven.
Argumenten
Argument |
Beschrijving |
|---|---|
|
The ID of the learner to be promoted |
Voorbeeld
$ nitropy nethsm --host $NETHSM_HOST promote-cluster-member $MEMBER_ID
Call POST /cluster/members/{MemberID}/promote (refer to the API documentation).
Als de cursist de achterstand nog niet heeft ingehaald, zal dit mislukken (HTTP-code 412 in de REST API) en moet de overgang later opnieuw worden geprobeerd.
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¶
Je hebt een omgeving nodig met etcd v3.6 beschikbaar, met (minstens) een IPv4-adres dat bereikbaar is voor de andere leden van je cluster. TCP-verkeer van en naar poort 2380 moet worden toegestaan.
Maak een lege map aan waar etcd zijn gegevens zal opslaan en schrijf het pad op (we gebruiken /var/etcd/data). Zorg ervoor dat de gebruiker die het proces zal starten lees- en schrijfrechten heeft in de map.
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.
Je moet dan een certificaat aanmaken voor de getuige en het ondertekenen met de CA zodat het kan communiceren met zijn peers. Dit kan bijvoorbeeld via 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
Sla de resulterende witness.key en witness.pem ook op in /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¶
In tegenstelling tot NetHSM’s die automatisch een knooppuntnaam voor zichzelf kiezen (met behulp van het apparaat-ID), moet je een naam kiezen voor elke getuige die je toevoegt, zorg ervoor dat de namen uniek zijn. We zullen “witness1” gebruiken in de volgende voorbeelden.
Met het antwoord van de NetHSM op de registratie van de getuige, maak je variabelen van het formulier:
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"
Maak tenslotte een etcd.conf.yml bestand aan door het sjabloonbestand te gebruiken dat is geleverd in docs/etcd_witness.conf.template:
$ envsubst < NETHSM_ROOT/docs/etcd_witness.conf.template > /var/etcd/witness.conf.yml
$ cat witness.conf.yml
Dit zou je een bestand van het formulier moeten geven:
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¶
Start etcd op de gewenste manier (handmatig, systemd service, container, etc.) en wijs het naar het configuratiebestand dat in de vorige stap is gemaakt:
$ cd /var/etcd
$ etcd --config-file witness.conf.yml
Je zou moeten zien dat het opstart, dat je als leerling lid wordt van het cluster en dat je de gegevens inhaalt.
Promote the Witness¶
Volg ten slotte, na enige tijd, de gebruikelijke instructies uit de sectie „ : Promoting the New Learner” om de getuige te bevorderen. Probeer het later nog eens als dit niet lukt.
After a successful promotion, you should be able to check that it is healthy with the etcdctl client:
etcdctl get /config/version
Deze sleutel moet bestaan en “1” bevatten.
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¶
Back-up en herstel¶
De back-upbewerking werkt hetzelfde als zonder cluster en kan vanaf elk knooppunt van het cluster worden aangevraagd. Er wordt een back-up gemaakt van gegevens voor het hele cluster, inclusief node-specifieke velden (deze worden echter genegeerd tenzij de back-up op een niet geprovisioneerd knooppunt wordt teruggezet).
Een back-up die op een cluster is gemaakt, kan op hetzelfde cluster worden teruggezet, zelfs als er sindsdien enkele nodes zijn toegevoegd of verwijderd. Zulke terugzettingen op operationele clusters hebben geen invloed op de configuratiewaarden (alleen sleutels, gebruikers, naamruimten), net als alle andere gedeeltelijke terugzettingen.
Als je een back-up herstelt op een knooppunt zonder voorzieningen, worden de knooppuntspecifieke velden (zoals netwerkconfiguratie, certificaten, enzovoort) hersteld van het knooppunt dat werd gebruikt om de back-up te maken.
Het terugzetten van een grote back-up kan het cluster enige tijd overspoelen, terwijl het knooppunt dat de restore uitvoert wijzigingen doorstuurt naar de anderen.
Deze bewerking blijft compatibel met back-ups die op eerdere versies van de NetHSM zijn gemaakt.
Notitie
Het terugzetten op een knooppunt A van een back-up gemaakt op een ander knooppunt Z met een andere domeinsleutel zal de domeinsleutel van A correct herschrijven, zoals voorheen. Maar als A in een cluster met node B zat, zal B onbruikbaar worden omdat de domeinsleutel van Z niet hersteld zal worden op B.
Met andere woorden, voer alleen een restore uit in een cluster met back-ups die in hetzelfde cluster zijn gemaakt (hoewel er sindsdien nodes verwijderd of toegevoegd kunnen zijn). Als je een buitenlandse back-up op een node wilt terugzetten, verwijder deze dan eerst veilig uit zijn cluster, reset hem dan in de fabriek en zet de back-up terug.
Een node netjes verwijderen¶
Zolang een deel van het cluster nog aan het quorum voldoet, kan elk van zijn leden gebruikt worden om een ander knooppunt uit het cluster te verwijderen, ongeacht of dit knooppunt al onbereikbaar is of naar verwachting zal zijn.
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.
Argumenten
Argument |
Beschrijving |
|---|---|
|
The ID of the node to be removed |
Voorbeeld
$ nitropy nethsm --host $NETHSM_HOST remove-cluster-member $MEMBER_ID
Maak een lijst van de knooppunten met ` `` GET /cluster/members` en verwijder er één door ` `` DELETE /cluster/members/<id>` aan te roepen.
Notitie
Een knooppunt dat zich bij het cluster heeft aangesloten maar nog niet is gepromoveerd, kan op deze manier ook veilig worden verwijderd.
Recovering a Failed Node¶
Een knooppunt dat de status ‘ ’ of ‘Failed’ meldt, zal niet reageren op de meeste normale bewerkingen. Het kan nog steeds worden uitgeschakeld, opnieuw opgestart, gereset , gediagnosticeerd of geïsoleerd ** .
Waarschuwing
De bewerkingen Failed state, diagnose en force-new zijn alleen van toepassing op versie 5.0 en hoger. In versie 4.0 reageert een knooppunt dat zijn quorum heeft verloren niet meer op alle verzoeken. Het moet worden teruggezet naar de fabrieksinstellingen.
Veelvoorkomende oorzaken waardoor een knooppunt zich in de status „ Failed“ bevindt, zijn onder meer:
Een blijvend verloren quorum.
Een tijdelijk ontbrekend quorum (bijvoorbeeld wanneer een tweede knooppunt aan het cluster wordt toegevoegd en het tweede knooppunt nog niet is aangesloten).
etcdwordt momenteel opnieuw opgestart (bijvoorbeeld omdat de certificaten zijn gewijzigd of omdat het netwerk opnieuw is geconfigureerd).Het cluster wordt zwaar belast (bijvoorbeeld tijdens het terugzetten van een zeer grote back-up).
Wat de oorzaak ook moge zijn, de NetHSM zal pas overgaan naar de status „ Failed” na ten minste een volle minuut van mislukte pogingen om verbinding te maken met de database. Dit is om onterechte overgangen als gevolg van zeer kortstondige instabiliteiten te voorkomen.
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.
Voorbeeld
$ nitropy nethsm --host $NETHSM_HOST get-cluster-diagnostics
Roep ` `` GET /health/diagnose` aan (zie de API-documentatie).
Notitie
Zodra de database weer beschikbaar is (bijvoorbeeld wanneer het quorum is hersteld omdat het netwerkprobleem is opgelost), zal de NetHSM automatisch vanuit de status ‘ Failed’ overschakelen naar de status waarin hij zich eerder bevond (of de normale opstartvolgorde hervatten als hij aan het opstarten was), zonder dat er handmatige actie nodig is. Het duurt maximaal een minuut nadat het probleem is opgelost voordat het cluster zich heeft gestabiliseerd, de HSM de oplossing heeft gedetecteerd en van status is veranderd.
Als je tot de conclusie komt dat de storing van blijvende aard is (bijvoorbeeld een verloren quorum zonder uitzicht op een oplossing voor de onderliggende oorzaak), kun je het volgende doen:
Zet het apparaat terug naar de fabrieksinstellingen ( ) en voer een back-up terug.
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.
Notitie
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
Waarschuwing
Na een update vanaf een versie < 5.0 zal het eindpunt force-new altijd de status „Unauthorized“ hebben, totdat de HSM is ontgrendeld of de ontgrendelingswachtwoordzin ten minste één keer is gewijzigd.
Software Updates in Clusters¶
Toekomstige updates zullen gemarkeerd worden als “cluster-veilig” (dit zou de meerderheid moeten zijn) of “cluster-onveilig”.
Cluster-veilige updates kunnen worden toegepast op knooppunten die deel uitmaken van een cluster zonder ze eerst uit het cluster te verwijderen. Maar zoals met alle operaties, moet je ervoor zorgen dat je dit op één node per keer doet, en in een cluster waar het verwijderen van een node het quorum niet onderschrijdt (bijvoorbeeld als de update mislukt).
Cluster-onveilige updates moeten worden toegepast op geïsoleerde nodes. Je moet het cluster ontmantelen (knooppunten één voor één verwijderen), alle knooppunten op één na in de fabriek resetten, de update op elk knooppunt toepassen en vervolgens alle geresette knooppunten laten aansluiten op het overgebleven knooppunt.
Zorg ervoor dat u een back-up maakt voordat u dergelijke bewerkingen uitvoert.
Een bestaand cluster herconfigureren¶
Changing the Cluster CA¶
Een bestaand cluster (met twee of meer nodes) kan zijn cluster-CA niet wijzigen terwijl het in werking is. Als je dit certificaat moet wijzigen: kies een knooppunt, verwijder alle andere knooppunten, werk de CA bij en laat de andere leden zich weer aansluiten.
Changing the Network Configuration of Nodes¶
Het wijzigen van de netwerkconfiguratie van een knooppunt (bijvoorbeeld het wijzigen van het IP-adres) zal automatisch de andere knooppunten informeren over de update. Je moet er echter voor zorgen dat je zulke updates alleen uitvoert op een enkel knooppunt tegelijk en in een cluster waar het verlies van dat knooppunt het quorum niet zou verliezen.