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.

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 <clustering.html#recovering-a-failed-node> 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

Dėl klasterizavimo su etcd pobūdžio jis tuo patikimesnis, kuo daugiau mazgų yra klasteryje. Kaip paaiškinta `Skyriuje „Operacinis atleidimas“, idealiu atveju klasteriuose turėtų būti bent 3 mazgai, kad būtų vietos gedimams, nes 2 mazgų klasteris visiškai sugenda, jei sugenda tik vienas.

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.

Kas bendrai naudojama tarp mazgų

NetHSM klasteris reiškia, kad didžiąja dalimi duomenų dalijamasi tarpusavyje. Bet koks raktų, naudotojų ar vardų erdvių papildymas, pakeitimas ar ištrynimas viename mazge galiausiai atsispindi visuose kituose mazguose. Apskritai bet kokia būseną keičianti operacija keičia kiekvieno mazgo būseną. Tai apima ir atsarginės kopijos atkūrimo operaciją, kuri veikia įprastai.

Tolesniuose skirsniuose išsamiai aprašoma, kokie duomenys yra visiškai vietiniai, kokie duomenys saugomi bendroje etcd saugykloje, tačiau lieka priklausomi nuo mazgo, ir kokie duomenys yra visiškai bendri visiems mazgams.

Nėra saugoma etcd

Kiekvieno mazgo įrenginio raktas saugomas tik vietoje ir juo niekada nesidalijama tarp mazgų.

Saugoma „etcd“, bet priklauso konkrečiam mazgui

Toliau nurodyti duomenys saugomi etcd skirtingose kiekvieno mazgo apimtyse. Taigi jie yra prieinami kiekvienam mazgui, tačiau nėra vienodi tarp mazgų (kiekvienas mazgas gali turėti skirtingą šių duomenų reikšmę).

Configuration:

  • TLS certificates

  • Clock configuration

  • Network configuration

  • Logging configuration

  • Unattended boot configuration

  • Unlock salt (so each node has its own unlock passphrase)

  • Locked domain key

Atkreipkite dėmesį, kad nors kiekvienas mazgas turi savo užrakinto domeno rakto versiją (nes kiekvienas mazgas jį užrakina savo įrenginio raktu arba atrakinimo slaptažodžiu), pagrindiniu domeno raktu dalijamasi tarp mazgų (kad būtų galima pasiekti bendrus HSM duomenis, pvz., raktus).

Saugoma etcd ir bendrinama

Visi toliau išvardyti duomenys saugomi etcd globalioje srityje, todėl yra vienodi visuose klasterio mazguose:

HSM duomenys:

  • Keys

  • Vartotojai

  • Vardų sritys

Configuration:

  • Config/domain store version

  • Cluster CA (used to authenticate nodes across cluster)

  • Backup passphrase and backup salt

Atkreipkite dėmesį, kad kol kas konfigūracijos / domeno saugyklos versija gali būti tik 1 versija (jei jūsų programinės įrangos versija palaiko klasterių kūrimą, vadinasi, ją turite). Daugiau informacijos apie programinės įrangos atnaujinimų diegimo saugumą klasteryje rasite Software Updates in Clusters skyriuje.

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 using the /config/network endpoint (refer to the API documentation).

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.

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).

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" ]

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

Then install the obtained new_cert.pem with the /config/tls/cert.pem endpoint (refer to the API documentation).

Galiausiai CA (CA.pem) dabar galima įdiegti naudojant /config/tls/cluster-ca.pem galinį tašką (žr. API dokumentaciją). Tai įmanoma tik tada, kai įdiegtas TLS sertifikatas yra pasirašytas. Priešingu atveju operacija bus atmesta.

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:

  1. Register the addition to the cluster (through any one of its members)

  2. Tell the new node to join

  3. Kai jis pasivys, paaukštinkite šį mazgą iš besimokančiojo į visateisį narį

Configure a Backup Passphrase

Pirmiausia įsitikinkite, kad mazge, kuris bus naudojamas registruojant naują jungiklį, sukonfigūruota atsarginė slaptažodžių frazė (žr. /config/backup-passphrase galinio taško API dokumentaciją).

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.

Galite dar kartą patikrinti, ar URL yra teisingas, iškvietę GET /cluster/members mazge, prie kurio tikimasi prisijungti. Tai turėtų išvardyti tik vieną narį - jį patį.

Tada užregistruokite tą laukiamą URL bet kuriame esančiame klasterio mazge (jei dar neturite klasterio, atlikite tai „NetHSM“, kuris bus pradinis klasterio mazgas). Tai atliekama naudojant POST /cluster/members galinį tašką (žr. API dokumentaciją), perduodant jam JSON kūną, kuriame yra URL.

Jei pavyksta, grąžinamas JSON formos kūnas:

{
  "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

Atkreipkite dėmesį, kad aukščiau pateiktame atsakyme naujasis mazgas yra „mokinys“: dabar jis gali prisijungti prie klasterio ir gauti iš jo duomenis, tačiau negali dalyvauti, kol nebus paaukštintas – apie tai bus kalbama toliau.

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.

Šį atsakymą pasilikite kitam žingsniui.

Joining the Cluster as a Learner

Paimkite paskutinio žingsnio atsakymą, pridėkite prie jo backupPassphrase lauką, kuriame yra atsarginė mazgo, kuriame buvo užregistruotas naujas prisijungiantysis, slaptažodžių frazė, ir perduokite šiuos duomenis į POST /cluster/join (žr. API dokumentaciją), esantį mazge, prie kurio tikimasi prisijungti.

Įspėjimas

Funkcijos „ ` “ iškvietimas POST /cluster/join` bus įstrigęs, kol naujas mazgas nebus rankiniu būdu paaukštintas (žr. toliau). Tai yra normalu. Kai iškvietimas sėkmingai grįžta, tai reiškia, kad prisijungimas ir paaukštinimas pavyko.

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

Pakėlus mazgo lygį, padidėja klasterio kvorumo riba (žr. „ “ API dokumentaciją ir šio dokumento skyrių „ : Operational Redundancy“). Prieš pakeldami mazgą, įsitikinkite, kad jis turi stabilų ryšį su klasteriu.

Galite pabandyti paaukštinti naujo nario statusą, iškviesdami „ ` “ POST /cluster/members/{MemberID}/promote` (žr. „ “ API dokumentaciją). Jei besimokantysis dar nespėjo pasivyti, operacija žlugs su HTTP kodu 412, ir vėliau reikės pabandyti paaukštinti statusą dar kartą.

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).

Užrašykite klasterio atsakymą: jame turėtų būti klasterio narių sąrašas ir prisijungimo rinkinys (šios dalies jums neprireiks).

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,..."

Darant prielaidą, kad NetHSM atsakymas saugomas response.json faile, šiuos du paskutinius kintamuosius galite sukurti automatiškai naudodami šias jq išraiškas:

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.

Pirmiausia turite sužinoti norimo pašalinti mazgo ID, išvardydami visus mazgus per GET /cluster/members ir ieškodami tinkamo mazgo.

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.

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.

Kad galėtumėte lengviau suprasti, kokioje būsenoje yra jūsų mazgas, toliau veikia galinis taškas „ ` “ GET /health/diagnose`, kuris pateikia informaciją apie dabartinę „ ` “ etcd` ir jo duomenų bazės būseną, įskaitant žurnalus (ž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ą.

  • Atskirti mazgą, turintį galinį tašką POST /cluster/force-new, kuris negrįžtamai pamirš visus kitus klasterio narius, atkurs diske esančius duomenis etcd ir iš naujo paleis sistemą. Jei pagrindinė gedimo priežastis buvo susijusi su klasteriu, mazgas laikysis įprastos paleidimo sekos ir, priklausomai nuo automatinio paleidimo nustatymų, pasieks būseną „ “ („Užrakintas“) arba „ “ („Veikiantis“).

Pastaba

Jei mazgas izoliuojamas naudojant komandą „ ` “ force-new`, jis bus atsietas nuo klasterio: naujų įrašų, atliktų šiame mazge arba klasteryje, nebus galima suderinti. Mazgas vis dar gali vėl prisijungti prie klasterio, tačiau praras visus savo vietinius pakeitimus.

„ ` “ POST /cluster/force-new` galinis taškas, kuris prieinamas tik būsenoje „ Failed“, reikalauja autentifikavimo, nes gali sukelti duomenų praradimą. Tačiau kadangi šioje būsenoje HSM vartotojai ir vaidmenys nėra prieinami, galinis taškas tikisi, kad HTTPS klientai visada autentifikuosis naudodami fiktyvų vartotoją „ ` “ unlock` ir naujausią žinomą atrakinimo slaptažodį kaip prisijungimo slaptažodį.

Į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.