Clustering¶
Pastaba
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.
Tai dar nebuvo išbandyta pakankamai daugelyje gamybinių diegimų, todėl gali būti klaidų.
NetHSM 4.0 ir vėlesnėse versijose palaikomas klasterizavimas, kad būtų galima tiesiogiai sinchronizuoti duomenis tarp kelių NetHSM. Taip palaikomas didelis raktų generavimo dažnumas, įgyvendinamas didelis prieinamumas ir apkrovos balansavimas. NetHSM klasteris yra pagrįstas etcd, kuriame naudojamas Raft konsensuso algoritmas, užtikrinantis stiprų nuoseklumą. Taip užtikrinama, kad duomenys (pvz., raktai) visuomet būtų teisingi visuose NetHSM.
Prieš kurdami NetHSM klasterį susipažinkite su šia technologija ir jos apribojimais, kad išvengtumėte atsitiktinio gedimo ir duomenų praradimo. Be šio dokumento, taip pat galite susipažinti su etcd dokumentacija.
Operational Redundancy¶
„Mazgu“ vadinsime NetHSM, kuris turėtų būti klasterio dalis. **** ` N` mazgų klasteris veiks tol, kol bent (N/2)+1 mazgai bus sveiki ir pasiekiami. Šis minimalus sveikų ir pasiekiamų mazgų kiekis vadinamas kvorumu.
Klasteryje, kuriame šis slenkstis nepasiekiamas (pvz., dėl tinklo sutrikimų), neįmanoma išrinkti lyderio, o kiekviename mazge esantis „ ` “ vietinis egzempliorius etcd` nebegali atlikti skaitymo ir rašymo operacijų. Tai reiškia, kad gali susiklostyti šie scenarijai.
Vienas mazgas neveikia, o kvorumas vis tiek pasiekiamas¶
Jei 3 mazgų klasteryje vienas mazgas neveikia (sugenda arba tampa nepasiekiamas dėl tinklo sąlygų), kiti du mazgai toliau veikia ir aptarnauja užklausas.
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.
Jei įrenginys niekada neatsigaus, jį reikės pašalinti iš klasterio ` <clustering.html#removing-a-node-cleanly>` __ ir arba atlikti atkūrimą ` <clustering.html#recovering-a-failed-node>` __, kad būtų galima pasiekti jame esančius duomenis (tačiau jis nebebus klasterio dalis), arba atkurti gamyklinius nustatymus ir iš naujo atlikti prisijungimo procesą.
Įvyksta tinklo padalijimas, o kvorumas vis tiek pasiekiamas¶
Tai tik ankstesnio scenarijaus apibendrinimas. 5 mazgų klasteryje, kuriame, pvz., 3 mazgai yra vienoje fizinėje vietoje A, o 2 mazgai - kitoje vietoje B, A ir B izoliuojanti tinklo problema reikštų, kad:
3 mazgai, esantys A vietoje, atitinka kvorumą (šiuo atveju 3), todėl jie toliau veikia.
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).
Jei tinklo problema bus išspręsta, 2 mazgai galės prisijungti prie kitų 3 mazgų.
Kitaip tariant, blogiausiu atveju įvykus tinklo suskaidymui (klastre, kuriame yra nelyginis mazgų skaičius), didesnė klasterio pusė veiks normaliai, o mažesnė pusė neveiks, kol suskaidymas nebus pašalintas.
Kvorumas prarastas ilgam¶
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.
Taip gali nutikti, pavyzdžiui, jei 2 mazgų klasteryje (kur kvorumas yra 2) sugenda vienas mazgas. Tokiu atveju nepavykusio mazgo negalima pašalinti iš klasterio, nes likęs sveikas mazgas jau neveikia, nes prarado kvorumą.
Todėl patariama klasteryje visada turėti nelyginį mazgų skaičių ir dažnai daryti atsargines kopijas.
Kad būtų aišku, laikinai prarasti kvorumą (pavyzdžiui, jei iš naujo paleidžiate visus klasterio mazgus kartu arba dėl laikino tinklo gedimo izoliuojami mazgai) nėra problema: kai tik vėl bus sujungta pakankamai mazgų (nereikės rankiniu būdu vėl prisijungti), kad būtų pasiektas kvorumas, klasteris vėl pradės veikti įprastai. Tik dėl nuolatinių gedimų, tokių kaip tinklo pertvaros, netinkama tinklo konfigūracija, autentifikavimo problemos ar aparatinės įrangos gedimai, reikės imtis veiksmų rankiniu būdu.
Daugiau informacijos rasite etcd DUK.
2 mazgų klasteris¶
Dviejų mazgų aktyvus ir pasyvus klasteris dar nepalaikomas ir bus pridėtas būsimoje versijoje. Rekomenduojame įdiegti trečiąjį mazgą - trečiąjį NetHSM arba etcd „liudininką“, kuris galėtų veikti bet kuriame kompiuteryje. Žr. kitą skyrių „Liudininkas“.
Liudytojas¶
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.
Tačiau funkcija sukurta taip, kad norint pasiekti stabilų mazgų skaičių nebūtina į klasterį įtraukti viso tikro „NetHSM“ įrenginio. Vietoj to galite patys įdiegti ir pridėti „liudininko“ mazgą. Toks mazgas yra tiesiog etcd egzempliorius, veikiantis jūsų pasirinktame kompiuteryje (arba konteineryje) ir prijungtas prie klasterio. Tikrieji klasterio įrenginiai jį atpažins kaip įprastą mazgą, jis gaus visus duomenis ir atnaujinimus iš įrenginių (tačiau, žinoma, su juo negalėsite atlikti jokių HSM operacijų - jis tik saugo duomenis).
Security Considerations¶
Liudytojo mazgas (arba bet kuris kitas asmuo, turintis prieigą prie jo) turi tiesioginę prieigą prie visų klasterio mazgų saugyklų (pvz., galite išmesti visus įrašus ir atitinkamas reikšmes naudodami etcdctl get "/" "0").
Tačiau, išskyrus konfigūracijos versiją (/config/version, kuri visada turėtų būti „1“), griežtai visos reikšmės yra užšifruotos (naudojant įrenginio raktą konkrečiam mazgui būdingoms reikšmėms arba domeno raktus kitoms reikšmėms), taip užtikrinant slaptų duomenų konfidencialumą.
Tačiau atkreipkite dėmesį, kad kenkėjiškas mazgas gali:
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¶
Bet kuris klasteris iš pradžių pradedamas nuo vieno mazgo. Nauji mazgai prie klasterio prisijungs vienas po kito.
Preparing Nodes¶
Tinklo duomenų srautas tarp mazgų šifruojamas ir autentiškumas patvirtinamas naudojant jų TLS sertifikatą.
Visi mazgai, kurie turėtų būti to paties klasterio dalis, pirmiausia turi įdiegti bendrą sertifikatų tarnybą (CA), kad galėtų patikrinti, ar kiti mazgai yra teisėti.
Toliau darysime prielaidą, kad visi mazgai yra šviežiai įrengti ir veikia.
Networking¶
Nodes must first be reconfigured with their expected final network configuration as described in the section Network.
CA kūrimas ir diegimas¶
Vartotojai turėtų sukurti CA savo priemonėmis ir pagal savo veiklos apribojimus, įsitikinę, kad ji leidžia naudoti bent keyCertSign raktą.
Pavyzdžiui, minimalią CA galima sukurti naudojant 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
Dabar ši CA turi būti įdiegta kiekviename mazge.
Norėdami tai padaryti, pirmiausia iš mazgo sugeneruokite sertifikato pasirašymo užklausą (CSR), kaip aprašyta skyriuje „ “ TLS sertifikatas. Naudojant „ “ ir „nitropija“, tai atliekama komanda nitropy nethsm --host $NETHSM_HOST csr --api.
Pastaba
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" ]
Naudodami „ “ ir „nitropija“, naudokite parinktį „ ` “ –san`, pvz., --san "IP:192.168.1.1".
Jei norite naudoti viešąjį sertifikavimo centrą (CA) savo sertifikatams pasirašyti, jūsų mazgai turi naudoti viešuosius IP adresus. Taip yra dėl saugumo reikalavimo, kuris draudžia viešajam sertifikavimo centrui išduoti sertifikatus, kurių IP SAN lauke nurodytas privatusis IP adresas.
Turėdami gautą CSR (pavadinkime jį nethsm.csr), galime jam sugeneruoti sertifikatą, kurį galima įdiegti. Pavyzdžiui, naudodami 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
Tada įdiekite gautą „ ` “ new_cert.pem`, kaip aprašyta skyriuje „ “ TLS sertifikatas (su „ “, „nitropija“: 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.
Argumentai
Argumentas |
Aprašymas |
|---|---|
|
The path of the CA file |
Pavyzdys
$ nitropy nethsm --host $NETHSM_HOST set-cluster-ca-certificate CA.pem
Įdiegtą klasterio sertifikavimo instituciją galima rasti naudojant komandą „ ` “ 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.
Pastaba
Šį procesą reikia pakartoti kiekvienam mazgui.
Laikrodžio sinchronizavimas¶
Įsitikinkite, kad kiekvienam mazgui būtų nustatytas tikslus sistemos laikas – geriausia naudoti NTP/NTS, o ne nustatyti laiką rankiniu būdu. Tai galima atlikti konfigūruojant „Time“ ir „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
Kai jis pasivys, paaukštinkite šį mazgą iš besimokančiojo į visateisį narį
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.
Naujo mazgo registravimas¶
Turėkite prisijungiančio mazgo IP adresą. To mazgo pilnas URL (dar vadinamas lygiaverčiu URL ` etcd` terminologijoje) bus https://<IP_of_node>:2380 (pvz., https://192.168.1.1:2380). Prievadas turi būti 2380, todėl įsitikinkite, kad tarp mazgų esanti ugniasienė leidžia TCP srautą šiuo prievadu.
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.
Pavyzdys
$ 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).
Vienkartinės parinktys
Galimybė |
Aprašymas |
|---|---|
|
Naujojo mazgo „peer“ URL (galima nustatyti keletą kartų) |
Argumentai
Argumentas |
Aprašymas |
|---|---|
|
Failo, į kurį įrašomi sujungti duomenys, kelias |
Pavyzdys
$ nitropy nethsm --host $NETHSM_HOST add-cluster-member --url https://192.168.1.1:2380 join-data.json
Ši komanda pateikia klasterio narių sąrašą ir į failą įrašo duomenis, reikalingus naujam mazgui prisijungti prie klasterio (įskaitant prisijungimo rinkinį). Šį failą išsaugokite kitam žingsniui.
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=="
}
kuriame pateikiama informacija, reikalinga naujam mazgui prisijungti prie klasterio. Visų pirma, jame išvardijami visi klasterio nariai (kai narys su tuščiu pavadinimu yra naujasis prisijungiantysis). Jame taip pat yra domeno raktas, užšifruotas atrakinimo ir atsargine slaptažodžių frazėmis - taigi prieš tai turi būti sukonfigūruota atsarginė slaptažodžių frazė.
Pastaba
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.
Nors ši „mokinio“ sąvoka numato papildomą etapą (paaukštinimą), ji užtikrina saugesnį klasterio veikimą, nes bet kokia su naujuoju mazgu susijusi problema negali sukelti viso klasterio nestabilumo iki jo paaukštinimo.
Išsaugokite sujungimo duomenų failą kitam žingsniui (arba atsakymą, jei naudojote REST API).
Joining the Cluster as a Learner¶
Prisijunkite prie klasterio tame mazge, kuris turėtų prisijungti, naudodami paskutinio žingsnio duomenis ir atsarginį slaptažodį to mazgo, kuriame buvo užregistruotas naujas prisijungiantis mazgas.
Reikalingos parinktys
Galimybė |
Aprašymas |
|---|---|
|
Atsarginė slaptažodžio frazė to mazgo, kuriame buvo užregistruotas naujas dalyvis |
Argumentai
Argumentas |
Aprašymas |
|---|---|
|
Duomenų sujungimo failo kelias iš paskutinio žingsnio |
Pavyzdys
$ 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).
Įspėjimas
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.
Šiame etape naujas mazgas prisijungė kaip „ “ mokymosi režimu veikiantis „ “ mazgas: jis sinchronizuojasi su klasteriu, tačiau dar neveikia. Kita vertus, bet kokia su šiuo mazgu susijusi problema šiame etape nesukels sunkumų klasteriui, todėl ši operacija yra saugi.
Paskutinis žingsnis, reikalingas prisijungimui užbaigti, – suteikti naujam mazgui visateisio nario statusą.
Promoting the New Learner¶
Priklausomai nuo tinklo ir klasterio sąlygų, naujajam nariui gali prireikti šiek tiek laiko, kol jis pasivys klasterį. Kai tai bus padaryta, jis gali būti paaukštintas iš besimokančiojo į pilnateisį narį.
Įspėjimas
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.
Galite pabandyti paaukštinti naujojo nario statusą taip, kaip nurodyta toliau. Nario ID galima rasti peržiūrėjus klasterio narių sąrašą.
Argumentai
Argumentas |
Aprašymas |
|---|---|
|
The ID of the learner to be promoted |
Pavyzdys
$ nitropy nethsm --host $NETHSM_HOST promote-cluster-member $MEMBER_ID
Call POST /cluster/members/{MemberID}/promote (refer to the API documentation).
Jei besimokantysis dar nepasivijo, operacija bus nesėkminga (HTTP kodas 412 REST API) ir vėliau reikėtų vėl bandyti perkelti į aukštesnį lygį.
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¶
Jums reikės aplinkos su etcd v3.6 versija, kurios IPv4 adresą (bent jau) gali pasiekti kiti klasterio nariai. Reikia leisti TCP srautą į 2380 prievadą ir iš jo.
Sukurkite tuščią katalogą, kuriame bus saugomi etcd duomenys, ir įrašykite jo kelią (mes naudosime /var/etcd/data). Užtikrinkite, kad naudotojas, kuris paleis procesą, turėtų teisę skaityti ir rašyti į katalogą.
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.
Tada reikės sukurti liudytojo sertifikatą ir pasirašyti jį CA, kad jis galėtų bendrauti su savo kolegomis. Tai galima padaryti, pavyzdžiui, naudojant 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
Gautus witness.key ir witness.pem taip pat saugokite /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¶
Skirtingai nei „NetHSM“, kurie automatiškai pasirenka mazgo pavadinimą (naudodami įrenginio ID), jūs turite pasirinkti kiekvieno pridėto liudytojo pavadinimą, įsitikinkite, kad pavadinimai yra unikalūs. Toliau pateiktuose pavyzdžiuose naudosime „witness1“.
Kartu su NetHSM atsakymu dėl liudytojo registravimo parengkite formos kintamuosius:
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"
Galiausiai sukurkite etcd.conf.yml failą, naudodami docs/etcd_witness.conf.template pateiktą šablono failą:
$ envsubst < NETHSM_ROOT/docs/etcd_witness.conf.template > /var/etcd/witness.conf.yml
$ cat witness.conf.yml
Taip gausite formos failą:
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¶
Paleiskite etcd pageidaujamu būdu (rankiniu būdu, systemd paslauga, konteineriu ir t. t.), nurodydami į ankstesniame žingsnyje sukurtą konfigūracijos failą:
$ cd /var/etcd
$ etcd --config-file witness.conf.yml
Turėtumėte pamatyti, kaip jis paleidžiamas, prisijungti prie klasterio kaip mokymosi dalyvis ir susipažinti su duomenimis.
Promote the Witness¶
Galiausiai, praėjus šiek tiek laiko, laikykitės įprastų instrukcijų, pateiktų skyriuje „ “ („Naujojo mokinio paaukštinimas“), kad paaukštintumėte liudytoją. Jei tai nepavyks, pabandykite vėliau.
After a successful promotion, you should be able to check that it is healthy with the etcdctl client:
etcdctl get /config/version
Šis raktas turi egzistuoti ir jame turi būti „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¶
Atsarginė kopija ir atkūrimas¶
Atsarginės kopijos kūrimo operacija veikia taip pat, kaip ir be klasterio, ir ją galima užsakyti iš bet kurio klasterio mazgo. Ji sukuria viso klasterio duomenų atsarginę kopiją, įskaitant konkrečiam mazgui būdingus laukus (tačiau jie bus ignoruojami, nebent atsarginė kopija būtų atkuriama neperduotame mazge).
Klasteryje padarytą atsarginę kopiją galima atkurti tame pačiame klasteryje, net jei nuo to laiko kai kurie mazgai buvo pridėti arba pašalinti. Toks atstatymas, atliktas veikiančiuose klasteriuose, neturės įtakos konfigūracijos reikšmėms (tik raktams, naudotojams, vardų sritims), kaip ir bet kuris kitas dalinis atstatymas.
Atkuriant atsarginę kopiją neprovizuotame mazge bus atkurti mazgui būdingi laukai (pvz., tinklo konfigūracija, sertifikatai ir kt.), kurie buvo naudojami kuriant atsarginę kopiją.
Atkuriant didelės apimties atsarginę kopiją, kurį laiką gali būti perkrautas klasteris, kol atstatymą taikantis mazgas perduoda pakeitimus kitiems mazgams.
Ši operacija išlieka suderinama su atsarginėmis kopijomis, padarytomis naudojant ankstesnes NetHSM versijas.
Pastaba
Atkuriant mazge A atsarginę kopiją, padarytą kitame mazge Z su kitu domeno raktu, bus teisingai perrašytas A domeno raktas, kaip ir anksčiau. Tačiau jei A buvo klasteryje su mazgu B, B taps neveikiantis, nes Z domeno raktas nebus atkurtas B mazge.
Kitaip tariant, atkurkite tik klasterį, kurio atsarginės kopijos padarytos tame pačiame klasteryje (nors po to mazgai galėjo būti pašalinti arba pridėti). Jei norite atkurti svetimą mazgo atsarginę kopiją, pirmiausia saugiai pašalinkite jį iš klasterio, tada iš naujo nustatykite jo gamyklinę padėtį ir atkurkite atsarginę kopiją.
Švarus mazgo pašalinimas¶
Kol tam tikra klasterio dalis vis dar atitinka kvorumą, bet kuris iš jos narių gali būti naudojamas kitam mazgui pašalinti iš klasterio, nesvarbu, ar šis mazgas jau nepasiekiamas, ar tikimasi, kad bus nepasiekiamas.
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.
Argumentai
Argumentas |
Aprašymas |
|---|---|
|
The ID of the node to be removed |
Pavyzdys
$ nitropy nethsm --host $NETHSM_HOST remove-cluster-member $MEMBER_ID
Išvardykite mazgus, naudodami komandą „ ` “ GET /cluster/members`, ir pašalinkite vieną iš jų, iškviesdami komandą „ ` “ DELETE /cluster/members/<id>`.
Pastaba
Mazgą, kuris prisijungė prie klasterio, bet dar nebuvo paaukštintas, taip pat galima saugiai pašalinti šiuo būdu.
Recovering a Failed Node¶
Mazgas, pranešantis apie būseną „ Failed“ ( nepavyko), neatsakys į daugumą įprastų operacijų. Jį vis tiek galima išjungti, perkrauti, atstatyti, diagnozuoti arba izoliuoti.
Įspėjimas
Operacijos „ “, „Failed “, „ ` “, „diagnose` “ ir „ ` “ „force-new` “ taikomos tik nuo 5.0 versijos. 4.0 versijoje mazgas, praradęs kvorumą, nustos atsakyti į visus ** užklausimus. Jis turi būti atstatytas į gamyklinius nustatymus.
Dažniausios priežastys, dėl kurių mazgas patenka į būseną „ “ (Nesėkmė) „ “ (Prieiga), yra šios:
Ilgalaikis kvorumo praradimas.
Laikinai prarastas kvorumas (pvz., kai į klasterį pridedamas antrasis mazgas, o šis dar nėra prisijungęs).
„etcd “ šiuo metu paleidžiamas iš naujo (pavyzdžiui, dėl to, kad pasikeitė sertifikatai arba buvo iš naujo sukonfigūruotas tinklas).
Klasteris patiria labai didelę apkrovą (pavyzdžiui, atkuriant labai didelės apimties atsarginę kopiją).
Nepriklausomai nuo priežasties, „NetHSM“ pereis į būseną „ Failed“ ( ) tik po to, kai ne mažiau kaip vieną minutę bus nesėkmingai bandoma prisijungti prie jo duomenų bazės. Taip siekiama išvengti klaidingų perėjimų, kuriuos sukelia labai trumpi nestabilumo atvejai.
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.
Pavyzdys
$ nitropy nethsm --host $NETHSM_HOST get-cluster-diagnostics
Iškvieskite „ ` “ GET /health/diagnose` (žr. API dokumentaciją).
Pastaba
Jei ir kai duomenų bazė vėl taps prieinama (pvz., atkuriama kvorumo būklė, nes išspręsta tinklo problema), „NetHSM“ automatiškai pereis iš būsenos „ Failed“ į būseną, kurioje buvo anksčiau (arba tęs įprastą paleidimo seką, jei tuo metu buvo paleidžiamas), be jokio rankinio įsikišimo. Po to, kai problema bus išspręsta, praeis iki vienos minutės, kol klasteris stabilizuosis, HSM aptiks, kad problema išspręsta, ir pakeis būseną.
Jei nuspręsite, kad gedimas yra ilgalaikis (pvz., prarastas kvorumas ir nėra vilties išspręsti pagrindinę problemą), galite:
Atkurkite gamyklinius nustatymus mazge – tai ištrins visus duomenis – ir atkurkite atsarginę kopiją.
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.
Pastaba
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
Įspėjimas
Atnaujinus iš versijos, mažesnės nei 5.0, „ ` “ galinis taškas force-new` visada rodys pranešimą „Unauthorized“, kol HSM nebus atrakintas arba kol atrakinimo slaptažodis nebus pakeistas bent kartą.
Software Updates in Clusters¶
Būsimi atnaujinimai bus pažymėti kaip „saugūs klasteriui“ (tokių turėtų būti dauguma) arba „nesaugūs klasteriui“.
Klasterio saugūs atnaujinimai gali būti taikomi mazgams, kurie yra klasterio dalis, prieš tai jų nepašalinus iš klasterio. Tačiau, kaip ir atlikdami visas operacijas, turėtumėte užtikrinti, kad tai būtų atliekama po vieną mazgą ir klasteryje, iš kurio pašalinus mazgą nesumažėtų kvorumas (pvz., jei atnaujinimas nepavyksta).
Klasterio nesaugūs atnaujinimai turi būti taikomi izoliuotiems mazgams. Turėtumėte išardyti klasterį (po vieną pašalinti mazgus), atstatyti visų mazgų, išskyrus vieną, gamyklinius parametrus, taikyti atnaujinimą kiekvienam mazgui, tada visus atstatytus mazgus prijungti prie likusio mazgo.
Prieš atlikdami tokias operacijas būtinai sukurkite atsarginę kopiją.
Esamo klasterio konfigūracijos keitimas¶
Changing the Cluster CA¶
Esamas klasteris (su dviem ar daugiau mazgų) negali pakeisti savo klasterio CA, kol jis veikia. Jei reikia pakeisti šį sertifikatą: pasirinkite mazgą, pašalinkite visus kitus mazgus, atnaujinkite CA, tada liepkite kitiems nariams vėl prisijungti.
Changing the Network Configuration of Nodes¶
Pakeitus mazgo tinklo konfigūraciją (pvz., pakeitus jo IP adresą), kiti mazgai bus automatiškai informuoti apie atnaujinimą. Tačiau turėtumėte užtikrinti, kad tokius atnaujinimus vienu metu atliktumėte tik viename mazge ir tik tokiame klasteryje, kurio praradimas nesumažintų kvorumo.