
Tere kĂ”igile. Ma töötan peamise sĂŒsteemiadministraatorina O.K.-s ja vastutan portaali stabiilse töötamise eest. Soovin rÀÀkida, kuidas me oleme ĂŒles ehitanud automaatse ketaste vahetamise protsessi ning seejĂ€rel, kuidas me eemaldasime selle protsessist administraatori ja asendasime ta robotiga.
See artikkel on teatud mÔttes transkriptsioon HighLoad+ 2018-l
Ketaste vahetamise protsessi tĂ”hususe ĂŒlesehitamine
Esiteks mÔned numbrid
O.K. on hiiglaslik teenus, mida kasutavad miljonid inimesed. Seda teenindab umbes 7000 serverit, mis asuvad neljas erinevas andmekeskuses. Serverites on ĂŒle 70 000 ketta. Kui need ĂŒksteise peale laduda, saame ĂŒle 1 km kĂ”rge torni.
Ketad on serveri komponent, mis laguneb kĂ”ige sagedamini. Selliste suurte mahtude korral peame iga nĂ€dal vahetama umbes 30 ketast, ja see protseduur on muutunud ĂŒsna ebameeldivaks rutiiniks.

Intsidentide
Meie firmas on kehtestatud tÀielik probleemihaldus. Iga probleem fikseeritakse Jira-s, seejÀrel lahendame ja arutame seda. Kui probleemil on mÔju kasutajatele, koguneme kindlasti ja mÔtleme, kuidas kiiresti sellistes olukordades reageerida, kuidas vÀhendada mÔju ja muidugi, kuidas vÀltida kordumist.
Kettad pole erand. Nende seisundi jĂ€lgimist teostab Zabbix. JĂ€lgime Syslog-s kirjutamise/loetavuse vigu, analĂŒĂŒsime HW/SW-raidide seisukorda, jĂ€lgime SMART-i ja SSD-de kulumist.
Kuidas kettad varem vahetati
Kui Zabbixis sĂŒttib mĂ”ni kĂ€ivitus, genereeritakse Jira-s probleem ja see mÀÀratakse automaatselt vastavatele inseneridele andmekeskustes. Teeme seda kĂ”igi riistvara probleemidega, ehk siis sellistega, mis nĂ”uavad fĂŒĂŒsilist tööd seadmete kallal andmekeskuses.
Andmekeskuse insener on inimene, kes lahendab kĂŒsimusi, mis on seotud riistvaraga, vastutab serverite paigaldamise, hoolduse ja demonteerimise eest. PĂ€rast pĂ€ringu saamist asub insener tööle. Ketaste riiulites vahetab ta kettad iseseisvalt. Kuid kui tal puudub juurdepÀÀs vajalikele seadmetele, pöördub insener abi saamiseks ööpĂ€evara turvaseadmestike administraatorite poole. Esiteks tuleb ketas vĂ€lja rotaatsioonist eemaldada. Selleks tuleb teha vajalikud muudatused serveris, peatada rakendused, eemaldada ketas.
Vahetuses olev sĂŒsteemiadministraator vastutab kogu portaali töö eest. Ta uurib juhtumeid, tegeleb parandamisega, aitab arendajaid vĂ€ikeste ĂŒlesannete tĂ€itmisel. Ta ei tegele ainult kĂ”vakettastega.
Varem suhtlesid andmekeskuse insenerid sĂŒsteemiadministraatoriga vestluses. Insenerid saatsid linke Jira-piletitele, administraator lĂ€ks neid vaatama ja haldas töölĂ”ike mingisuguses mĂ€rkmete raamatus. Kuid selliste ĂŒlesannete jaoks ei ole vestlused mugavad: teave seal ei ole struktureeritud ja kaob kiiresti. Ja administraator vĂ”is lihtsalt arvutist eemale minna ning mĂ”nda aega ei vastata pĂ€ringutele, samas kui insener seisis serveri juures, kĂ€es hunnik kettaid, ja ootas.
Kuid kÔige halvem oli see, et administraatorid ei nÀinud tervikpilti: millised kÔvaketta juhtumid eksisteerivad, kus vÔib potentsiaalselt probleem tekkida. See on seotud sellega, et me anname kÔik HW-juhtumid inseneridele. Jah, kÔik juhtumid oli vÔimalik kuvada administraatori armatuurlaudadele. Kuid neid on vÀga palju ja administraatorit kaasati vaid mÔnedes neist.
Lisaks ei suutnud insener Ôigesti prioriteete seada, sest ta ei teadnud konkreetsete serverite otstarbe ega teabe jaotuse kohta salvestites.
Uus asendamisprotseduur
Esimene asi, mida me tegime, oli viia kĂ”ik kĂ”vaketta juhtumid eraldi tĂŒĂŒpi "HW-ketas" ja lisada sellele vĂ€ljad "blokeerimisaparaadi nimi", "suurus" ja "ketta tĂŒĂŒp", et see teave salvestuks piletisse, ning ei peaks seda pidevalt vestluses jagama.

Samuti leppisime kokku, et ĂŒhe juhtumi raames vahetame ainult ĂŒhe ketta. See lihtsustas oluliselt automatiseerimise protsessi, statistika kogumist ja tööd.
Lisaks lisasime vĂ€lja "vastutav administraator". Sinna pannakse automaatselt vahetuses olev sĂŒsteemiadministraator. See on vĂ€ga mugav, sest nĂŒĂŒd nĂ€eb insener alati, kes on vastutav. Ei ole vaja kalendrisse minna ja otsida. Just see vĂ€li vĂ”imaldas tuua administraatori armatuurlaudadele piletid, kus vĂ”ib-olla vajatakse tema abi.

Kuna kĂ”ik osalejad saaksid uuendustest maksimaalset kasu, oleme loonud filtrid ja armatuurlaud, ning rÀÀkinud neist meestele. Kui inimesed mĂ”istavad muudatusi, ei hoia nad neist distantse, nagu need oleksid ebaolulised. Inseneril on oluline teada riiuli numbrit, kus server asub, ketta suurust ja tĂŒĂŒpi. Administrator peab peaeesmĂ€rgina mĂ”istma, mis tĂŒĂŒpi serverigrupp see on ja milline vĂ”ib olla mĂ”ju ketta vahetamisel.
VÀljade olemasolu ja nende kuvamine on mugav, kuid see ei vabastanud meid vajadusest kasutada vestlusi. Selleks tuli tööprotsessi muuta.
Varem oli see selline:

TÀna töötavad insenerid nii jÀtkuvalt, kui nad ei vaja administraatori abi.
Esimene asi, mida me tegime, oli uue staatuse, Investigate, sisseviimine. Selles etapis on pilet selline, kus insener pole veel otsustanud, kas tal on administraator vajalik vÔi mitte. Selle staatuse kaudu saab insener piletit administraatorile edastada. Lisaks on selle staatusega me mÀrkime pileteid, kus on vajalik ketta vahetamine, kuid ketast end pole platsil. See juhtub nÀiteks CDN-ide ja kaugplatside puhul.
Lisaks oleme lisanud staatuse, Valmis. Sellesse staatusesse kantakse pilet pĂ€rast ketta vahetamist. See tĂ€hendab, et kĂ”ik on juba tehtud, kuid serveris sĂŒnkroniseeritakse HW/SW RAID. See vĂ”ib vĂ”tta ĂŒsna kaua aega.
Kui tööle kaasatakse administraator, muutub skeem veidi keerulisemaks.

Staatusest, Ava saab piletit edastada nii sĂŒsteemiadministraator kui ka insener. Staatuses In progress vĂ”tab administraator ketta rotiatsioonist vĂ€lja, et insener saaks selle lihtsalt vĂ€lja vĂ”tta: lĂŒlitab sisse valgustuse, monteerib ketta lahti, peatab rakendused, olenevalt konkreetse serverigruppi vajadustest.
SeejĂ€rel kantakse pilet staatusesse Ready to change: see on signaal insenerile, et ketas saab vĂ€lja vĂ”tta. KĂ”ik vĂ€ljad Jira-s on juba tĂ€idetud, insener teab, milline on ketta tĂŒĂŒp ja suurus. Need andmed kantakse kas automaatselt eelmisel staatuse kaudu vĂ”i administraatori poolt.
PĂ€rast ketta vahetamist kantakse pilet staatusesse Changed. Kontrollitakse, et oleme vahetanud vajaliku ketta, tehakse partitsioneerimine, rakendus kĂ€ivitatakse ja mĂ”ned andmete taastamise ĂŒlesanded tĂ€idetakse. Samuti vĂ”ib pilet olla kantud staatusesse Valmis, sel juhul jÀÀb vastutavaks administraator, kuna tema lisas ketta rotiatsiooni. TĂ€ielik skeem nĂ€eb vĂ€lja selline.

Uute vĂ€ljade lisamine on meie elu oluliselt lihtsustanud. Inimesed hakkavad töötama struktureeritud teabe alusel, on selge, mida ja millal teha. Prioriteedid on nĂŒĂŒd palju asjakohasemad, kuna need mÀÀrab administraator.
Suhtlemise vajadus chattides on kadunud. Loomulikult vÔib administraator kirjutada insenerile "siin tuleb kiiremini vahetada" vÔi "on juba Ôhtu, kas jÔuad vahetada?". Kuid me ei suhtle enam igapÀevaselt nendel teemadel chattides.
Kettad vahetatakse now massiliselt. Kui administraator tuleb tööle natuke varem ja tal on vaba aega ning midagi pole veel juhtunud, saab ta ette valmistada mitu serverit vahetamiseks: vĂ€ljad seadistada, kettad rotatsioonist vĂ€lja vĂ”tta ja ĂŒlesande insenerile edastada. Insener tuleb hiljem andmekeskusesse, nĂ€eb ĂŒlesannet, vĂ”tab laost vajalikud andmekandjad ja vahetab kohe vĂ€lja. Tulemusena on vahetuse kiirus suurenenud.
Omandatud kogemus tööprotsessi koostamisel.
- Protseduuri koostamisel tuleb koguda teavet erinevatest allikatest.
MĂ”ned meie administraatorid ei teadnud, et insener vahetab kettaid iseseisvalt. MĂ”ned arvasid, et MD RAID sĂŒnkroniseerimise eest hoolitsevad insenerid, kuigi mĂ”nel neist ei olnud selleks isegi ligipÀÀsu. MĂ”ned peamised insenerid tegid seda, kuid mitte alati, kuna protsess ei olnud kuskil kirja pandud. - Protseduur peab olema lihtne ja arusaadav.
Inimeste on raske meeles pidada mitmeid samme. KĂ”ige olulisemad kĂ”rvuti olevaid staatuseid Jiras tuleks tuua peamisele ekraanile. Saame neid nimetada ĂŒmber, nĂ€iteks, progressis olekut nimetame Ready to change. ĂlejÀÀnud staatuseid saab varjata rippmenĂŒĂŒsse, et need ei segaks silma. Kuid parem on mitte piirata inimesi, anda neile vĂ”imalus ĂŒleminekuid teha.
Selgitage uuenduste vÀÀrtust. Kui inimesed mĂ”istavad, aktsepteerivad nad uut protsessi paremini. Meie jaoks oli vĂ€ga oluline, et inimesed ei klĂ”psaks kogu protsessi lĂ€bi, vaid kĂ€iksid selle lĂ€bi. Hiljem ehitasime sellele automatiseerimise. - Oodata, analĂŒĂŒsida, selgitada.
Me vĂ”tsime umbes kuus kuud, et vĂ€lja töötada protseduur, tehniline teostus, koosolekud ja arutelud. KĂ€ivitamiseks lĂ€ks aga rohkem kui kolm kuud. NĂ€gin, kuidas inimesed jĂ€rk-jĂ€rgult hakkasid uuendust kasutama. Esimestel etappidel oli palju negatiivsust. Kuid see ei olnud absoluutselt seotud protseduuri endaga ega selle tehnilise teostusega. NĂ€iteks kasutas ĂŒks administraator mitte Jira, vaid Jira-pluginat Confluences, mistĂ”ttu ei olnud mĂ”ned asjad talle kergesti kĂ€ttevĂ”etavad. NĂ€itasime talle Jira'd, administraatori tootlikkus kasvas nii ĂŒldiste ĂŒlesannete kui ka ketaste asendamise osas.
Ketaste asendamise automatiseerimine
Ketaste asendamise automatiseerimisega oleme proovinud mitu korda. Meil oli juba varasemalt vÀlja töötatud skripte, kuid need töötasid kas interaktiivselt vÔi kÀsitsi, nÔudes kÀivitamist. Alles uue protseduuri juurutamise jÀrel mÔistsime, et just seda me vajasimegi.
Kuna nĂŒĂŒd on ketaste asendamise protsess jagatud etappideks, mille igaĂŒhe kohta on mÀÀratud vastutaja ja toimingute loetelu, saame automatiseerimist etappide kaupa sisse lĂŒlitada, mitte korraga tĂ€ielikult. NĂ€iteks on kĂ”ige lihtsam etapp â Ready (RAID/sĂŒnkroniseerimise kontroll) â kergesti delegereeritav robotile. Kui robot pisut Ă”pib, saab talle anda vastutuskohasema ĂŒlesande â ketta sisselĂŒlitamine rotatsiooni jne.
Seadistuste loomine
Enne kui rÀÀgime robotist, teeme vĂ€ikese ekskursi meie seadistuste loomisse. Esiteks on see tingitud meie infrastruktuuri hiiglaslikust suurusest. Teiseks pĂŒĂŒame iga teenuse jaoks leida optimaalse riistvarakonfiguratsiooni. Meil on umbes 20 erinevat RAID-mudelit, peamiselt LSI ja Adaptec, kuid leidub ka HP ja DELL erinevaid versioone. Igal RAID-kontrolleril on oma haldustööriist. KĂ€skude komplekt ja nende vĂ€ljund vĂ”ivad iga RAID-kontrolleri versiooni pĂ”hjal erineda. Seal, kus ei kasutata HW-RAID'i, vĂ”ib olla mdraid.
Peaaegu kĂ”ik uued installatsioonid teeme ilma kettasalvestuseta. PĂŒĂŒame enam mitte kasutada riistvaralist ega tarkvaralist RAID'i, kuna varundame meie sĂŒsteeme andmekeskuste tasemel, mitte serverite tasemel. Kuid loomulikult on palju pĂ€randservereid, mida tuleb toetada.
Kusagil RAID-kontrollerites kasutatakse raw seadmeid, mĂ”nes kohas kasutatakse JBOD-i. Serveris on konfiguratsioonid, kus on ĂŒks sĂŒsteemidisk, ja kui seda tuleb vahetada, tuleb server uuesti seadistada koos operatsioonisĂŒsteemi ja rakenduste paigaldamisega, sealhulgas nende samade versioonidega, et seejĂ€rel lisada konfiguratsioonifailid ja kĂ€ivitada rakendused. Samuti on palju serverigruppe, kus varukoopiaid tehakse mitte ketastaadi tasemel, vaid otse rakendustes endis.
Kokku on meil ĂŒle 400 ainulaadse serverigruppi, kus töötab umbes 100 erinevat rakendust. Nii suure variandi katmiseks vajasime multifunktsionaalset automatiseerimistööriista. Eelistatavalt lihtsa DSL-iga, et seda saaks toetada mitte ainult see, kes selle kirjutas.
Valisime Ansible'i, kuna see on agentideta: infrastruktuuri ettevalmistamine ei olnud vajalik, kiire kÀivitamine. Lisaks on see kirjutatud Pythonis, mis on meeskonnas standardina vastu vÔetud.
Ăldine skeem
Vaadakem ĂŒldist automatiseerimisse kustutusprotsessi ĂŒhe juhtumi nĂ€itel. Zabbix tuvastab, et disk sdb on rikki lĂ€inud, aktiveeritakse hĂ€ire, luuakse pilet Jira-s. Administraator vaatab selle ĂŒle, mĂ”istab, et see ei ole duplikaat ega valehĂ€ire, st disk tuleb vahetada, ja suunab pileti olekusse In progress.

Rakendus DiskoBot, mis on kirjutatud Pythonis, kĂŒsib aeg-ajalt Jira't vĂ€lja uute piletite osas. See mĂ€rgib, et on ilmunud uus pilet olekus In progress, aktiveeritakse vastav niit, mis kĂ€ivitab playbook'i Ansible'is (seda tehakse iga oleku jaoks Jira-s). KĂ€ivitatakse Prepare2change.
Ansible saadetakse hostile, eemaldab ketta rotatsioonist ja teatab olekust rakendusele Callbacks kaudu.

Tulemustest peab bot automaatselt pileti Ready to change olekusse. Insener saab teavituse ja lÀheb ketast vahetama, seejÀrel suunab pileti olekusse Changed.

Ălaltoodud skeemi kohaselt naaseb pilet tagasi boti juurde, see kĂ€ivitab teise playbook'i, lĂ€heb hostile ja sisestab ketta rotatsiooni. Bot sulgeb pileti. Hurraa!

NĂŒĂŒd rÀÀgime mĂ”nest sĂŒsteemi komponendist.
Diskobot
See rakendus on kirjutatud Pythonis. See valib piletid Jira's JQL alusel. SÔltuvalt pileti olekust suunatakse see vastava töötleja juurde, mis omakorda kÀivitab vastavale olekule vastava Ansible playbook'i.
JQL ja kĂŒsitluse intervallid on mÀÀratud rakenduse konfiguratsioonifailis.
jira_states:
investigate:
jql: '⊠status = Open and "Disk Size" is EMPTY'
interval: 180
inprogress:
jql: '⊠and "Disk Size" is not EMPTY and "Device Name" is not EMPTY'
ready:
jql: '⊠and (labels not in ("dbot_ignore") or labels is EMPTY)'
interval: 7200
NĂ€iteks, In progress olekuga piletitest valitakse ainult need, mille Disk size ja Device name vĂ€ljad on tĂ€idetud. Device name on plokk-seadme nimi, mis on vajalik playbookâi tĂ€itmiseks. Disk size on vajalik, et insener teaks, kui suurel kettal on vajadus.
Valmistoimingute Ready olekuga piletitest filtreeritakse vĂ€lja piletid, millel on dbot_ignore silt. Ăldiselt kasutame Jira silte selliseks filtreerimiseks, samuti piletite dubleerimise mĂ€rgistamiseks ja statistika kogumiseks.
Playbookâi tĂ”rke korral mÀÀrab Jira piletile dbot_failed sildi, et hiljem oleks vĂ”imalik probleemi uurida.
Koostoime Ansibleâiga
Rakendus suhtleb Ansibleâiga lĂ€bi . Playbook_executorâis edastame faili nime ja muutuja kogumi. See vĂ”imaldab hoida Ansible projekti tavlike yml-faile kujul, mitte kirjeldada seda Python-koodis.
Samuti edastatakse Ansibleâs *extra_vars* kaudu plokk-seadmme nimi, pileti olek ja callback_url, kus on peidetud issue key â seda kasutatakse HTTP callbackâides.
Iga kĂ€ivitamise jaoks genereeritakse ajutine inventory, mis koosneb ĂŒhest hostist ja grupist, kuhu see host kuulub, et rakenduksid group_vars.
Siin on nĂ€ide ĂŒlesandest, kus on rakendatud HTTP callback.
Playbookâide tĂ€itmise tulemused saadakse callback(-ide) kaudu. Need on kahte tĂŒĂŒpi:
- , see esitab andmed playbookâi tĂ€itmise tulemuste kohta. Seal on kirjeldatud ĂŒlesandeid, mis on kĂ€ivitatud, Ă”nnestunud vĂ”i ebaĂ”nnestunud. See callback kutsutakse esile playbookâi mĂ€ngimise lĂ”pus.
- HTTP callback, et saada teavet playbookâi mĂ€ngimise ajal. Ansible ĂŒlesandes teeme POST/GET pĂ€ringu meie rakenduse suunas.
HTTP callback(-ide) kaudu edastatakse muutujaid, mis mÀÀrati playbookâi tĂ€itmise ajal ja mida soovime sĂ€ilitada ja kasutada jĂ€rgmiste kĂ€ivitamiste juures. Need andmed salvestame sqliteâisse.
Samuti jĂ€tame HTTP callbackâi kaudu kommentaare ja muutume pileti olekut.
HTTP callback
# Make callback to Diskobot App
# Variables:
# callback_post_body: # A dict with follow keys. All keys are optional
# msg: If exist it would be posted to Jira as comment
# data: If exist it would be saved in Incident.variables
# desire_state: Set desire_state for incident
# status: If exist Proceed issue to that status
- name: Callback to Diskobot app (jira comment/status)
uri:
url: "{{ callback_url }}/{{ devname }}"
user: "{{ diskobot_user }}"
password: "{{ diskobot_pass }}"
force_basic_auth: True
method: POST
body: "{{ callback_post_body | to_json }}"
body_format: json
delegate_to: 127.0.0.1
Nagu paljude sarnaste ĂŒlesannete puhul, oleme selle vĂ€lja tĂ”stnud eraldi common faili ja lisame selle vajadusel, et mitte pidevalt playbook'ides korrata. Siin kajastub callback_url, milles on sisseehitatud issue key ja host name. Kui Ansible tĂ€idab selle POST-pĂ€ringu, mĂ”istab bot, et see tuleb teatud intsidenti seoses.
Siin on nÀide playbook'ist, kus me eemaldasime ketta MD-seadmest:
# Save mdadm configuration
- include: common/callback.yml
vars:
callback_post_body:
status: 'Ready to change'
msg: "Removed disk from mdraid {{ mdadm_remove_disk.msg | comment_jira }}"
data:
mdadm_data: "{{ mdadm_remove_disk.removed }}"
parted_info: "{{ parted_info | default() }}"
when:
- mdadm_remove_disk | changed
- mdadm_remove_disk.removed
See ĂŒlesanne viib Jira pileti olekusse "Ready to change" ja lisab kommentaari. Samuti salvestatakse muutujasse mdam_data nimekiri md-seadmetest, kust ketas eemaldati, ja parted_info - partitsiooni dump partedilt.
Kui insener paigaldab uue ketta, saame kasutada neid muutujaid, et taastada partitsioonide dump ja samuti tuua ketas tagasi nendesse md-seadetesse, kust see eemaldati.
Ansible kontrollreĆŸiim
Automatiseerimise kĂ€ivitamine oli hirmutav. SeetĂ”ttu otsustasime kĂ€ivitada kĂ”ik playbook'id reĆŸiimis
, kus Ansible ei tee serverites mingeid toiminguid, vaid lihtsalt simuleerib neid.
Selline kÀivitus teostatakse eraldi callback-mooduli kaudu ja playbook'i tÀitmise tulemus salvestatakse Jira's kommentaarina.

Esiteks vÔimaldas see valideerida boti ja playbook'ide toimimist. Teiseks suurendas see administraatorite usaldust boti vastu.
Kui olime lĂ€binud valideerimise ja mĂ”istsime, et Ansible't saab kĂ€ivitada mitte ainult dry run reĆŸiimis, siis lĂ”ime Jira's nuppu Run Diskobot, et kĂ€ivitada sama playbook'i samade muutujatega samal hostil, kuid tavareĆŸiimis.
Peale selle kasutatakse nuppu playbook'i korduskÀivitamiseks, kui see peaks ebaÔnnestuma.
Playbookide struktuur
Olen juba maininud, et sÔltuvalt Jira pileti olekust kÀivitab bot erinevaid playbook'e.
Esiteks on nii palju lihtsam sissepÀÀsu organiseerida.
Teiseks on teatud juhtudel see lihtsalt vajalik.
NĂ€iteks sĂŒsteemse ketta vahetamisel tuleb kĂ”igepealt minna deploy-sĂŒsteemi, luua ĂŒlesanne ja pĂ€rast korralikku kasutuselevĂ”ttu saab server ssh kaudu kĂ€tte ja sinna saab rakenduse paigaldada. Kui me teeksime kogu selle tegevuse ĂŒhes playbook'is, ei suudaks Ansible seda tĂ€ita, kuna host ei oleks saadaval.
Kasutame Ansible'i rolle iga serverigruppi jaoks. Siin on nĂ€ha, kuidas playbook'id ĂŒhes neist on organiseeritud.

See on mugav, sest kohe on selge, kus erinevad ĂŒlesanded asuvad. Failis main.yml, mis on Ansible'i rolli sissejuhatus, vĂ”ib meil olla lihtsalt include pileti staatuse jĂ€rgi vĂ”i ĂŒldised ĂŒlesanded, mis on vajalikud kĂ”igile, nĂ€iteks identifitseerimise lĂ€bimine vĂ”i tokeni saamine.
Investigation.yml
KÀivitatakse piletite jaoks, mille staatus on Investigation ja Open. Selle playbook'i kÔige olulisem element on plokkseadmestiku nimi. See teave ei ole alati kergesti kÀttesaadav.
Selle saamiseks analĂŒĂŒsime Jira kokkuvĂ”tet, viimast vÀÀrtust Zabbix'i töötluselt. Seal vĂ”ib sisalduda plokkseadmestiku nimi â kui meil vedas. Ahnem vĂ”ib sisalduda mount point, siis tuleb minna serverisse, parseerida ja arvutada vajalik kett. Samuti vĂ”ib töötlus edastada scsi-aadressi vĂ”i mĂ”ne muu teabe. Kuid juhtub ka, et mingit teavet ei ole, ja tuleb analĂŒĂŒsida.
Kui me oleme vĂ€lja selgitanud plokkseadmestiku nime, kogume selle kohta teavet ketta tĂŒĂŒbi ja suuruse osas, et tĂ€ita vĂ€ljad Jira's. Samuti vĂ”tame teavet tootja, mudeli, firmavĂ€rskenduse, ID, SMART osas ja kĂ”ik see lisatakse kommentaarina Jira-piletisse. Administrator ja insener ei pea nĂŒĂŒd neid andmeid enam otsima. đ

prepare2change.yml
Ketta vÀlja tÔmbamine ringlusest, ettevalmistamine asendamiseks. See on kÔige keerulisem ja vastutustundlikum etapp. Just siin vÔib rakendust peatada, kui seda ei saa peatada. VÔi tÔmmata vÀlja ketas, millel ei olnud koopiaid, ja seetÔttu mÔjutada kasutajaid, kaotada teatud andmeid. Siin on meil kÔige rohkem kontrolle ja teavitusi vestluses.
Lihtsamas olukorras on tegemist ketta eemaldamisega HW/MD RAID'ist.
Komplekssemates olukordades (meie salvestussĂŒsteemides), kus replikatsioon toimub rakenduse tasemel, tuleb minna rakendusse API kaudu, teatada ketta eemaldamisest, deaktiveerida see ja alustada taastamist.
Meigma praegu massiliselt , ja kui server on pilves, siis Diskobot pöördub pilve API poole, teatab, et plaanib töötada selle mini-serveriga â serveriga, kus konteinerid on kĂ€ivitatud â ja palub 'migreeri kĂ”ik konteinerid sellest mini-serverist'. Ja samal ajal aktiveerib ketta valgustuse, et insener nĂ€eks kohe, milline tuleb vĂ€lja tĂ”mmata.
changed.yml
PÀrast ketta vahetamist kontrollime kÔigepealt selle kÀttesaadavust.
Insenerid ei pane alati uusi kettaid, seetĂ”ttu lisasime kontrolli meie jaoks sobivate SMART vÀÀrtuste ĂŒle.
Milliseid atribuute me vaatameUuendatud sektorite arv (5) < 100
Praegune ootel sektorite arv (107) == 0
Kui ketas ei lÀbinud kontrolli, teavitatakse inseneri korduvast vahetamisest. Kui kÔik on korras, kustutatakse mÀrgistus ja ketas viiakse ringlusse.
ready.yml
KĂ”ige lihtsam juhtum: HW/SW RAIDi sĂŒnkroniseerimise kontrollimine vĂ”i andmete sĂŒnkroniseerimise lĂ”petamine rakenduses.
Rakenduste API
Olen mitmel korral maininud, et sageli pöördub bott rakenduste API poole. Loomulikult ei olnud kÔigil rakendustel vajalikud meetodid, seega tuli need tÀiendada. Siin on kÔige olulisemad meetodid, mida me kasutame:
- Status. Klastri vÔi ketta staatus, et mÔista, kas sellega saab töötada;
- Start/stop. Ketta aktiveerimine-deaktiveerimine;
- Migrate/restore. Andmete migreerimine ja taastamine vahetuse ajal ja pÀrast seda.
Kogemus Ansible'ist
Mulle meeldib Ansible vÀga. Kuid sageli, kui vaatan erinevaid avatud lÀhtekoodiga projekte ja nÀen, kuidas inimesed kirjutavad playbook'e, tunnen end natuke hirmutatuna. Komplekssed loogilised keerised, puuduv paindlikkus ja idempotentsus, mis tulenevad shell/command'i sagedasest kasutamisest.
Otsustasime kĂ”ik vĂ”imalikult lihtsaks muuta, kasutades Ansible'i eelist â moodulsust. KĂ”ige kĂ”rgemal tasemel on playbook'id, mida saab kirjutada iga administraator vĂ”i vĂ€line arendaja, kes veidi tunneb Ansible'it.
- name: Wink disk
become: True
register: locate_action
disk_locate:
locate: '{{ locate }}'
devname: '{{ devname }}'
ids: '{{ locate_ids | default(pd_id) | default(omit) }}'
Kui mÔnda loogikat on keeruline rakendada playbook'ides, viime selle Ansible moodulisse vÔi filtrisse. Skripte saab kirjutada nii Pythonis kui ka mÔnes muus keeles.
Need on kergesti ja kiiresti kirjutatavad. NĂ€iteks ketta vilkumise moodul, mille nĂ€ide ĂŒlal on, koosneb 265 reast.

KĂ”ige madalamal tasemel on raamatukogu. Selle projekti jaoks lĂ”ime eraldi rakenduse, omamoodi abstraktsiooni riist- ja tarkvarapĂ”histe RAIDide ĂŒle, mis tĂ€idavad vastavaid pĂ€ringuid.

Ansible'i tugevused on lihtsus ja arusaadavad playbook'id. Arvan, et peaksime seda kasutama ega genereerima hirmuÀratavaid yaml-faile ja tohutut arvu tingimusi, shell-koodi ja silmuseid.
Kui soovite meie Ansible API kogemust korrata, pidage silmas kahte asja:
- Playbook_executor ja playbook'i ei saa ĂŒldse aega edasi anda. On olemas aeg ssh-seansile, kuid playbook'i jaoks ei ole aega. Kui me proovime lahti harutada ketast, mis sĂŒsteemis enam ei eksisteeri, siis playbook töötab lĂ”putult, seetĂ”ttu pidime selle kĂ€ivitamise panema eraldi wrapperisse ja tapma selle ajaĂŒlesande tĂ”ttu.
- Ansible töötab fork-protsesside alusel, seega ei ole selle API lĂ”ngade turvaline. KĂ€itame kĂ”iki meie playbook'e ĂŒhe lĂ”ngaga.
LĂ”puks suutsime automatiseerida umbes 80% ketaste vahetust. Ăldiselt on vahetuse kiirus kahekordistunud. TĂ€na vaatab administraator lihtsalt intsidenti ja otsustab, kas on vaja ketast vahetada vĂ”i mitte, ning seejĂ€rel teeb ĂŒhe klikiga.
Aga nĂŒĂŒd hakkame silmitsi seisma teise probleemiga: mĂ”ned uued administraatorid ei tea, kuidas kettaid vahetada. đ
Allikas: habr.com
