Sveiki visiem. StrÄdÄju par vadoÅ”o sistÄmas administratoru OK un esmu atbildÄ«gs par portÄla stabilu darbÄ«bu. Es vÄlos runÄt par to, kÄ mÄs izveidojÄm procesu automÄtiskai disku nomaiÅai un kÄ mÄs izslÄdzÄm administratoru no Ŕī procesa un aizstÄjÄm viÅu ar robotu.
Å is raksts ir sava veida transliterÄcija izrÄdes programmÄ HighLoad+ 2018
Diska nomaiÅas procesa izveide
Vispirms daži skaitļi
OK ir milzÄ«gs pakalpojums, ko izmanto miljoniem cilvÄku. To apkalpo aptuveni 7 tÅ«kstoÅ”i serveru, kas atrodas 4 dažÄdos datu centros. Serveros ir vairÄk nekÄ 70 tÅ«kstoÅ”i disku. Ja jÅ«s tos saliekat vienu virs otra, jÅ«s iegÅ«stat torni, kura augstums pÄrsniedz 1 km.
Cietie diski ir servera komponents, kas visbiežÄk neizdodas. Ar Å”Ädiem apjomiem mums ir jÄmaina apmÄram 30 diski nedÄļÄ, un Ŕī procedÅ«ra ir kļuvusi par ne pÄrÄk patÄ«kamu rutÄ«nu.
Starpgadījumi
MÅ«su uzÅÄmumÄ ir ieviesta pilnvÄrtÄ«ga incidentu pÄrvaldÄ«ba. MÄs ierakstÄm katru incidentu JirÄ un pÄc tam to atrisinÄm un atrisinÄm. Ja kÄds incidents atstÄjis iespaidu uz lietotÄjiem, tad noteikti sanÄkam kopÄ un domÄjam, kÄ Å”Ädos gadÄ«jumos ÄtrÄk reaÄ£Ät, kÄ mazinÄt efektu un, protams, kÄ novÄrst recidÄ«vu.
UzglabÄÅ”anas ierÄ«ces nav izÅÄmums. ViÅu statusu uzrauga Zabbix. MÄs pÄrraugÄm Syslog ziÅojumus, lai atrastu rakstÄ«Å”anas/lasÄ«Å”anas kļūdas, analizÄjam HW/SW reidu statusu, uzraugÄm SMART un aprÄÄ·inÄm SSD nodilumu.
KÄ diski tika mainÄ«ti iepriekÅ”
Kad Zabbix notiek trigeris, Jira tiek izveidots incidents un automÄtiski tiek pieŔķirts attiecÄ«gajiem inženieriem datu centros. MÄs to darÄm ar visiem HW incidentiem, tas ir, tiem, kas prasa jebkÄdu fizisku darbu ar iekÄrtÄm datu centrÄ.
Datu centra inženieris ir persona, kas atrisina ar aparatÅ«ru saistÄ«tas problÄmas un ir atbildÄ«ga par serveru uzstÄdÄ«Å”anu, apkopi un demontÄžu. SaÅÄmis biļeti, inženieris Ä·eras pie darba. Disku plauktos viÅÅ” diskus maina neatkarÄ«gi. Bet, ja viÅam nav pieejas vajadzÄ«gajai ierÄ«cei, inženieris vÄrÅ”as pÄc palÄ«dzÄ«bas pie dežurÄjoÅ”ajiem sistÄmas administratoriem. PirmkÄrt, disks ir jÄnoÅem no rotÄcijas. Lai to izdarÄ«tu, serverÄ« ir jÄveic nepiecieÅ”amÄs izmaiÅas, jÄaptur lietojumprogrammas un jÄatvieno disks.
Par visa portÄla darbÄ«bu darba maiÅas laikÄ atbild dežurÄjoÅ”ais sistÄmas administrators. ViÅÅ” izmeklÄ incidentus, veic remontdarbus un palÄ«dz izstrÄdÄtÄjiem veikt nelielus uzdevumus. ViÅÅ” nenodarbojas tikai ar cietajiem diskiem.
IepriekÅ” datu centra inženieri ar sistÄmas administratoru sazinÄjÄs, izmantojot tÄrzÄÅ”anu. Inženieri nosÅ«tÄ«ja saites uz Jira biļetÄm, administrators tÄm sekoja, veica darbu žurnÄlu kÄdÄ piezÄ«mju grÄmatiÅÄ. Bet tÄrzÄÅ”ana ir neÄrta Å”Ädiem uzdevumiem: informÄcija tur nav strukturÄta un Ätri tiek zaudÄta. Un administrators varÄja vienkÄrÅ”i aiziet no datora un kÄdu laiku neatbildÄt uz pieprasÄ«jumiem, kamÄr inženieris stÄvÄja pie servera ar disku kaudzi un gaidÄ«ja.
Bet sliktÄkais bija tas, ka administratori neredzÄja visu ainu: kÄdi diska incidenti pastÄv, kur potenciÄli varÄtu rasties problÄma. Tas ir saistÄ«ts ar faktu, ka mÄs deleÄ£Äjam visus HW incidentus inženieriem. JÄ, visus incidentus bija iespÄjams parÄdÄ«t administratora informÄcijas panelÄ«. Bet viÅu ir daudz, un administrators bija iesaistÄ«ts tikai dažiem no tiem.
TurklÄt inženieris nevarÄja pareizi noteikt prioritÄtes, jo neko nezina par konkrÄtu serveru mÄrÄ·i vai informÄcijas sadali starp diskdziÅiem.
Jauna nomaiÅas procedÅ«ra
PirmÄ lieta, ko mÄs izdarÄ«jÄm, bija pÄrvietot visus diska incidentus uz atseviŔķa tipa āHW diskā un pievienojÄm tam laukus ābloka ierÄ«ces nosaukumsā, āizmÄrsā un ādiska tipsā, lai Ŕī informÄcija tiktu saglabÄta biļetÄ un nav pastÄvÄ«gi jÄapmainÄs tÄrzÄÅ”anÄ.
TÄpat vienojÄmies, ka viena incidenta laikÄ mainÄ«sim tikai vienu disku. Tas bÅ«tiski vienkÄrÅ”oja automatizÄcijas procesu, statistikas apkopoÅ”anu un darbu nÄkotnÄ.
TurklÄt mÄs pievienojÄm lauku āatbildÄ«gais administratorsā. Tur automÄtiski tiek ievietots dežurÄjoÅ”ais sistÄmas administrators. Tas ir ļoti Ärti, jo tagad inženieris vienmÄr redz, kurÅ” ir atbildÄ«gs. Nav nepiecieÅ”ams doties uz kalendÄru un meklÄt. TieÅ”i Å”is lauks ļÄva administratora informÄcijas panelÄ« parÄdÄ«t biļetes, kurÄm varÄtu bÅ«t nepiecieÅ”ama viÅa palÄ«dzÄ«ba.
Lai visi dalÄ«bnieki gÅ«tu maksimÄlu labumu no jauninÄjumiem, mÄs izveidojÄm filtrus un informÄcijas paneļus un pastÄstÄ«jÄm par tiem puiÅ”iem. Kad cilvÄki saprot izmaiÅas, viÅi no tÄm nedistancÄjas kÄ no kaut kÄ nevajadzÄ«ga. Inženierim ir svarÄ«gi zinÄt statÄ«va numuru, kurÄ atrodas serveris, diska izmÄru un veidu. Administratoram, pirmkÄrt, ir jÄsaprot, kÄda veida serveru grupa tÄ ir un kÄda varÄtu bÅ«t diska nomaiÅas ietekme.
Lauku klÄtbÅ«tne un to attÄloÅ”ana ir Ärta, taÄu tas mÅ«s neglÄba no nepiecieÅ”amÄ«bas izmantot tÄrzÄÅ”anu. Lai to izdarÄ«tu, mums bija jÄmaina darbplÅ«sma.
IepriekÅ” tas bija Å”Ädi:
Å Ädi inženieri turpina strÄdÄt arÄ« Å”odien, kad viÅiem nav nepiecieÅ”ama administratora palÄ«dzÄ«ba.
PirmÄ lieta, ko mÄs izdarÄ«jÄm, bija jauna statusa ievieÅ”ana IzmeklÄt. Biļete ir Å”ÄdÄ statusÄ, kad inženieris vÄl nav izlÄmis, vai viÅam bÅ«s nepiecieÅ”ams administrators vai nÄ. Izmantojot Å”o statusu, inženieris var nodot biļeti administratoram. TurklÄt mÄs izmantojam Å”o statusu, lai atzÄ«mÄtu biļetes, kad disks ir jÄnomaina, bet pats disks nav uz vietas. Tas notiek CDN un attÄlo vietÅu gadÄ«jumÄ.
MÄs arÄ« pievienojÄm statusu Gatavs. Biļete tiek pÄrsÅ«tÄ«ta uz to pÄc diska nomaiÅas. Tas ir, viss jau ir izdarÄ«ts, bet HW/SW RAID ir sinhronizÄts serverÄ«. Tas var aizÅemt diezgan ilgu laiku.
Ja darbÄ tiek iesaistÄ«ts administrators, shÄma kļūst nedaudz sarežģītÄka.
No statusa atvÄrts Biļeti var iztulkot gan sistÄmas administrators, gan inženieris. StatusÄ Notiek administrators noÅem disku no rotÄcijas, lai inženieris varÄtu to vienkÄrÅ”i izvilkt: ieslÄdz fona apgaismojumu, atvieno disku, aptur lietojumprogrammas atkarÄ«bÄ no konkrÄtÄs serveru grupas.
PÄc tam biļete tiek pÄrsÅ«tÄ«ta uz Gatavs pÄrmaiÅÄm: Tas ir signÄls inženierim, ka disku var izvilkt. Visi lauki Jira jau ir aizpildÄ«ti, inženieris zina, kÄda veida un izmÄra disks. Å os datus ievada vai nu automÄtiski iepriekÅ”ÄjÄ statusÄ, vai arÄ« administrators.
PÄc diska nomaiÅas biļetes statuss tiek mainÄ«ts uz MainÄ«ts. Tas pÄrbauda, āāvai ir ievietots pareizais disks, tiek veikta sadalÄ«Å”ana, tiek palaista lietojumprogramma un tiek palaisti daži datu atkopÅ”anas uzdevumi. Biļeti var arÄ« pÄrcelt uz statusu Gatavs, Å”ajÄ gadÄ«jumÄ atbildÄ«gs paliks administrators, jo viÅÅ” ielika disku rotÄcijÄ. Pilna diagramma izskatÄs Å”Ädi.
Jaunu lauku pievienoÅ”ana padarÄ«ja mÅ«su dzÄ«vi daudz vieglÄku. PuiÅ”i sÄka strÄdÄt ar strukturÄtu informÄciju, kļuva skaidrs, kas un kurÄ posmÄ ir jÄdara. PrioritÄtes ir kļuvuÅ”as daudz aktuÄlÄkas, jo tÄs tagad nosaka administrators.
TÄrzÄÅ”ana nav nepiecieÅ”ama. Protams, administrators var rakstÄ«t inženierim ātas ir jÄnomaina ÄtrÄkā vai āir jau vakars, vai paspÄsi to nomainÄ«t?ā Bet mÄs vairs nesazinÄmies katru dienu tÄrzÄÅ”anas sarunÄs par Å”iem jautÄjumiem.
Diskus sÄka mainÄ«t partijÄs. Ja administrators ieradÄs darbÄ nedaudz agri, viÅam ir brÄ«vs laiks, un nekas vÄl nav noticis, viÅÅ” var sagatavot vairÄkus serverus nomaiÅai: aizpildÄ«t laukus, noÅemt diskus no rotÄcijas un nodot uzdevumu inženierim. Inženieris ierodas datu centrÄ nedaudz vÄlÄk, redz uzdevumu, paÅem no noliktavas nepiecieÅ”amos diskus un uzreiz nomaina. TÄ rezultÄtÄ ir palielinÄjies aizstÄÅ”anas lÄ«menis.
DarbplÅ«smas veidoÅ”anÄ gÅ«tÄs atziÅas
Veidojot procedÅ«ru, jums ir jÄapkopo informÄcija no dažÄdiem avotiem.
Daži mÅ«su administratori nezinÄja, ka inženieris pats maina diskus. Daži cilvÄki domÄja, ka MD RAID sinhronizÄciju veica inženieri, lai gan dažiem no viÅiem pat nebija piekļuves to darÄ«t. Daži vadoÅ”ie inženieri to darÄ«ja, bet ne vienmÄr, jo process nekur nebija aprakstÄ«ts.
ProcedÅ«rai jÄbÅ«t vienkÄrÅ”ai un saprotamai.
CilvÄkam ir grÅ«ti paturÄt prÄtÄ daudzus soļus. SvarÄ«gÄkie Jiras kaimiÅu statusi ir jÄnovieto galvenajÄ ekrÄnÄ. Varat tos pÄrdÄvÄt, piemÄram, mÄs saucam Notiek Gatavs mainÄ«t. Un citus statusus var paslÄpt nolaižamajÄ izvÄlnÄ, lai tie netraucÄtu. Bet labÄk neierobežot cilvÄkus, dot viÅiem iespÄju veikt pÄreju.
Izskaidrojiet inovÄcijas vÄrtÄ«bu. Kad cilvÄki saprot, viÅi vairÄk pieÅem jauno procedÅ«ru. Mums bija ļoti svarÄ«gi, lai cilvÄki neklikŔķinÄtu cauri visam procesam, bet sekotu tam. PÄc tam mÄs uz to izveidojÄm automatizÄciju.
Pagaidiet, analizÄjiet, izdomÄjiet.
Mums vajadzÄja apmÄram mÄnesi, lai izveidotu procedÅ«ru, tehnisko realizÄciju, sanÄksmes un diskusijas. Un Ä«stenoÅ”ana aizÅem vairÄk nekÄ trÄ«s mÄneÅ”us. Es redzÄju, kÄ cilvÄki pamazÄm sÄk izmantot jauninÄjumu. AgrÄ«nÄ stadijÄ bija daudz negatÄ«visma. Bet tas bija pilnÄ«gi neatkarÄ«gs no paÅ”as procedÅ«ras un tÄs tehniskÄs Ä«stenoÅ”anas. PiemÄram, viens administrators neizmantoja Jira, bet gan Jira spraudni Confluence, un dažas lietas viÅam nebija pieejamas. MÄs viÅam parÄdÄ«jÄm Jira, un administratora produktivitÄte palielinÄjÄs gan vispÄrÄ«giem uzdevumiem, gan disku nomaiÅai.
Diska nomaiÅas automatizÄcija
VairÄkas reizes mÄs vÄrsÄmies pie diska nomaiÅas automatizÄcijas. Mums jau bija izstrÄdes un skripti, taÄu tie visi darbojÄs vai nu interaktÄ«vi, vai manuÄli, un tiem bija nepiecieÅ”ama palaiÅ”ana. Un tikai pÄc jaunÄs kÄrtÄ«bas ievieÅ”anas sapratÄm, ka tieÅ”i tÄ mums pietrÅ«kst.
TÄ kÄ tagad mÅ«su nomaiÅas process ir sadalÄ«ts posmos, no kuriem katram ir noteikts izpildÄ«tÄjs un darbÄ«bu saraksts, mÄs varam iespÄjot automatizÄciju pa posmiem, nevis visu uzreiz. PiemÄram, vienkÄrÅ”Äko posmu - Gatavs (pÄrbauda RAID/datu sinhronizÄciju) var viegli deleÄ£Ät botam. Kad bots ir nedaudz iemÄcÄ«jies, varat dot tam svarÄ«gÄku uzdevumu - diska ielikÅ”anu rotÄcijÄ utt.
ZoodÄrza iestatÄ«jumi
Pirms runÄjam par robotu, veiksim Ä«su ekskursiju mÅ«su instalÄciju zoodÄrzÄ. PirmkÄrt, tas ir saistÄ«ts ar mÅ«su infrastruktÅ«ras milzÄ«go izmÄru. OtrkÄrt, mÄs cenÅ”amies katram pakalpojumam izvÄlÄties optimÄlo aparatÅ«ras konfigurÄciju. Mums ir aptuveni 20 aparatÅ«ras RAID modeļi, pÄrsvarÄ LSI un Adaptec, bet ir arÄ« dažÄdu versiju HP un DELL. Katram RAID kontrollerim ir sava pÄrvaldÄ«bas utilÄ«ta. Komandu kopa un to izdoÅ”ana var atŔķirties atkarÄ«bÄ no versijas katram RAID kontrollerim. Ja netiek izmantots HW-RAID, var izmantot mdraid.
GandrÄ«z visas jaunÄs instalÄcijas veicam bez diska dublÄÅ”anas. MÄs cenÅ”amies vairs neizmantot aparatÅ«ras un programmatÅ«ras RAID, jo mÄs dublÄjam savas sistÄmas datu centra, nevis serveru lÄ«menÄ«. Bet, protams, ir jÄatbalsta daudzi mantotie serveri.
Kaut kur RAID kontrolleru diski tiek pÄrsÅ«tÄ«ti uz neapstrÄdÄtÄm ierÄ«cÄm, kaut kur tiek izmantoti JBOD. ServerÄ« ir konfigurÄcijas ar vienu sistÄmas disku, un ja tas ir jÄnomaina, tad ir jÄpÄrinstalÄ serveris ar OS un aplikÄciju instalÄÅ”anu, vienÄm un tÄm paÅ”Äm versijÄm, tad jÄpievieno konfigurÄcijas faili, jÄpalaiž aplikÄcijas. Ir arÄ« daudz serveru grupu, kurÄs dublÄÅ”ana tiek veikta nevis diska apakÅ”sistÄmas lÄ«menÄ«, bet tieÅ”i paÅ”Äs lietojumprogrammÄs.
KopumÄ mums ir vairÄk nekÄ 400 unikÄlu serveru grupu, kurÄs darbojas gandrÄ«z 100 dažÄdas lietojumprogrammas. Lai aptvertu tik milzÄ«gu iespÄju skaitu, mums bija nepiecieÅ”ams daudzfunkcionÄls automatizÄcijas rÄ«ks. VÄlams ar vienkÄrÅ”u DSL, lai ne tikai tas, kurÅ” uzrakstÄ«jis, var atbalstÄ«t.
MÄs izvÄlÄjÄmies Ansible, jo tas ir bez aÄ£entiem: nebija nepiecieÅ”ams sagatavot infrastruktÅ«ru, Ätrs starts. TurklÄt tas ir rakstÄ«ts Python valodÄ, kas komandÄ tiek pieÅemts kÄ standarts.
VispÄrÄjÄ shÄma
ApskatÄ«sim vispÄrÄjo automatizÄcijas shÄmu, kÄ piemÄru izmantojot vienu incidentu. Zabbix konstatÄ, ka sdb disks ir atteicies, iedegas sprÅ«da, un Jira tiek izveidota biļete. Administrators to apskatÄ«ja, saprata, ka tas nav dublikÄts un nav viltus pozitÄ«vs, proti, disks jÄmaina, un pÄrsÅ«tÄ«ja biļeti uz Notiek.
DiskoBot lietojumprogramma, kas rakstÄ«ta Python valodÄ, periodiski aptauj Jira jaunas biļetes. Tas pamana, ka ir parÄdÄ«jusies jauna biļete Notiek procesÄ, tiek aktivizÄts atbilstoÅ”ais pavediens, kas palaiž rokasgrÄmatu Ansible (tas tiek darÄ«ts katram statusam Jira). Å ajÄ gadÄ«jumÄ tiek palaists Prepare2change.
Ansible tiek nosÅ«tÄ«ts uz resursdatoru, noÅem disku no rotÄcijas un ziÅo par statusu lietojumprogrammai, izmantojot Callbacks.
Pamatojoties uz rezultÄtiem, robots automÄtiski pÄrsÅ«ta biļeti uz Gatavs mainÄ«t. Inženieris saÅem paziÅojumu un dodas mainÄ«t disku, pÄc tam pÄrsÅ«ta biļeti uz MainÄ«ts.
SaskaÅÄ ar iepriekÅ” aprakstÄ«to shÄmu biļete tiek atgriezta robotÄ, kas palaiž citu rokasgrÄmatu, nonÄk resursdatorÄ un ieslÄdz disku. Bots aizver biļeti. UrrÄ!
Tagad parunÄsim par dažÄm sistÄmas sastÄvdaļÄm.
Diskobots
Å Ä« lietojumprogramma ir uzrakstÄ«ta Python valodÄ. Tas izvÄlas biļetes no Jira saskaÅÄ ar JQL. AtkarÄ«bÄ no biļetes statusa, tÄ nonÄk atbilstoÅ”ajam apdarinÄtÄjam, kas savukÄrt palaiž statusam atbilstoÅ”u Ansible rokasgrÄmatu.
JQL un aptaujas intervÄli ir definÄti lietojumprogrammas konfigurÄcijas failÄ.
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
PiemÄram, no biļetÄm statusÄ Notiek tiek atlasÄ«tas tikai tÄs, kurÄs ir aizpildÄ«ti lauki Diska lielums un IerÄ«ces nosaukums. IerÄ«ces nosaukums ir bloka ierÄ«ces nosaukums, kas nepiecieÅ”ams rokasgrÄmatas izpildei. Diska izmÄrs ir nepiecieÅ”ams, lai inženieris zinÄtu, kÄda izmÄra disks ir nepiecieÅ”ams.
Un starp biļetÄm ar statusu Gatavs tiek filtrÄtas biļetes ar iezÄ«mi dbot_ignore. Starp citu, mÄs izmantojam Jira etiÄ·etes gan Å”Ädai filtrÄÅ”anai, gan biļeÅ”u dublikÄtu atzÄ«mÄÅ”anai un statistikas vÄkÅ”anai.
Ja rokasgrÄmata neizdodas, Jira pieŔķir etiÄ·eti dbot_failed, lai to vÄlÄk varÄtu sakÄrtot.
SadarbspÄja ar Ansible
Lietojumprogramma sazinÄs ar Ansible, izmantojot Ansible Python API. Programmai playbook_executor mÄs nododam faila nosaukumu un mainÄ«go lielumu kopu. Tas ļauj saglabÄt Ansible projektu parastu yml failu veidÄ, nevis aprakstÄ«t to Python kodÄ.
ArÄ« Ansible, izmantojot *extra_vars*, bloÄ·ÄtÄs ierÄ«ces nosaukums, biļetes statuss, kÄ arÄ« callback_url, kurÄ ir izdoÅ”anas atslÄga - to izmanto atzvanÄ«Å”anai HTTP.
Katrai palaiÅ”anai tiek Ä£enerÄts pagaidu inventÄrs, kas sastÄv no viena saimniekdatora un grupas, kurai pieder Å”is resursdators, lai tiktu lietoti group_vars.
Å eit ir piemÄrs uzdevumam, kas ievieÅ” HTTP atzvanÄ«Å”anu.
MÄs iegÅ«stam rezultÄtu, izpildot rokasgrÄmatas, izmantojot atzvanÄ«Å”anu(-as). Tie ir divu veidu:
IespÄjamais atzvanÄ«Å”anas spraudnis, tas sniedz datus par rokasgrÄmatas izpildes rezultÄtiem. TajÄ ir aprakstÄ«ti uzdevumi, kas tika uzsÄkti, veiksmÄ«gi vai neveiksmÄ«gi pabeigti. Å is atzvans tiek izsaukts, kad rokasgrÄmatas atskaÅoÅ”ana ir pabeigta.
MainÄ«gie tiek nosÅ«tÄ«ti caur HTTP atzvanÄ«Å”anu, kas tika definÄti rokasgrÄmatas izpildes laikÄ un kurus mÄs vÄlamies saglabÄt un izmantot turpmÄkajÄs izpildÄs. MÄs ierakstÄm Å”os datus sqlite.
MÄs arÄ« atstÄjam komentÄrus un mainÄm biļetes statusu, izmantojot HTTP atzvanÄ«Å”anu.
HTTP atzvanīŔana
# 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
TÄpat kÄ daudzus viena veida uzdevumus, mÄs to ievietojam atseviÅ”Ä·Ä kopÄjÄ failÄ un, ja nepiecieÅ”ams, iekļaujam, lai tas nepÄrtraukti neatkÄrtotos rokasgrÄmatÄs. Tas ietver atzvanÄ«Å”anas_ url, kurÄ ir problÄmas atslÄga un resursdatora nosaukums. Kad Ansible izpilda Å”o POST pieprasÄ«jumu, robots saprot, ka tas notika kÄ daļa no Å”Äda un tÄda incidenta.
Un Å”eit ir piemÄrs no rokasgrÄmatas, kurÄ mÄs izvadÄm disku no MD ierÄ«ces:
Å is uzdevums pÄrceļ Jira biļeti uz statusu āGatavs mainÄ«tā un pievieno komentÄru. ArÄ« mainÄ«gais mdam_data saglabÄ to md ierÄ«Äu sarakstu, no kurÄm disks tika noÅemts, un parted_info saglabÄ nodalÄ«juma izdruku no parted.
Kad inženieris ievieto jaunu disku, mÄs varam izmantot Å”os mainÄ«gos, lai atjaunotu partition dump, kÄ arÄ« ievietotu disku tajÄs md ierÄ«cÄs, no kurÄm tas tika noÅemts.
IespÄjamais pÄrbaudes režīms
Bija bail ieslÄgt automÄtiku. TÄpÄc mÄs nolÄmÄm palaist visas rokasgrÄmatas režīmÄ sausÄ gaita, kurÄ Ansible neveic nekÄdas darbÄ«bas serveros, bet tikai emulÄ tÄs.
Å Äda palaiÅ”ana tiek palaista caur atseviŔķu atzvanÄ«Å”anas moduli, un rokasgrÄmatas izpildes rezultÄts tiek saglabÄts Jira kÄ komentÄrs.
PirmkÄrt, tas ļÄva apstiprinÄt robotprogrammatÅ«ras un rokasgrÄmatu darbÄ«bu. OtrkÄrt, tas palielinÄja administratoru uzticÄ«bu robotam.
Kad mÄs izturÄjÄm validÄciju un sapratÄm, ka Ansible var palaist ne tikai sausÄs darbÄ«bas režīmÄ, mÄs Jira izveidojÄm pogu Palaist Diskobot, lai palaistu to paÅ”u rokasgrÄmatu ar tiem paÅ”iem mainÄ«gajiem tajÄ paÅ”Ä resursdatorÄ, bet parastajÄ režīmÄ.
TurklÄt poga tiek izmantota, lai restartÄtu rokasgrÄmatu, ja tÄ avarÄ.
Playbooks struktūra
Es jau minÄju, ka atkarÄ«bÄ no Jira biļetes statusa robots palaiž dažÄdas rokasgrÄmatas.
PirmkÄrt, ir daudz vieglÄk organizÄt ieeju.
OtrkÄrt, dažos gadÄ«jumos tas ir vienkÄrÅ”i nepiecieÅ”ams.
PiemÄram, nomainot sistÄmas disku, vispirms ir jÄdodas uz izvietoÅ”anas sistÄmu, jÄizveido uzdevums, un pÄc pareizas izvietoÅ”anas serveris kļūs pieejams, izmantojot ssh, un tajÄ varÄsiet izvÄrst lietojumprogrammu. Ja mÄs to visu darÄ«tu vienÄ rokasgrÄmatÄ, Ansible to nevarÄtu pabeigt, jo saimniekdators nav pieejams.
Katrai serveru grupai mÄs izmantojam Ansible lomas. Å eit varat redzÄt, kÄ vienÄ no tÄm ir sakÄrtota(-as) rokasgrÄmata(-as).
Tas ir Ärti, jo uzreiz ir skaidrs, kur atrodas uzdevumi. VietnÄ main.yml, kas ir lomas Ansible ievade, mÄs varam vienkÄrÅ”i iekļaut pÄc biļetes statusa vai vispÄrÄ«gus uzdevumus, kas nepiecieÅ”ami ikvienam, piemÄram, identifikÄcijas nodoÅ”ana vai marÄ·iera saÅemÅ”ana.
izmeklÄÅ”ana.yml
Darbojas pÄc biļetÄm statusÄ IzmeklÄÅ”ana un AtvÄrts. VissvarÄ«gÄkais Å”ajÄ rokasgrÄmatÄ ir bloka ierÄ«ces nosaukums. Å Ä« informÄcija ne vienmÄr ir pieejama.
Lai to iegÅ«tu, mÄs analizÄjam Jira kopsavilkumu, pÄdÄjo vÄrtÄ«bu no Zabbix aktivizÄtÄja. TajÄ var bÅ«t bloka ierÄ«ces nosaukums - laimÄ«gs. Vai arÄ« tajÄ var bÅ«t montÄÅ”anas punkts, tad jums jÄiet uz serveri, parsÄ un jÄaprÄÄ·ina nepiecieÅ”amais disks. SprÅ«da var arÄ« pÄrsÅ«tÄ«t scsi adresi vai kÄdu citu informÄciju. Bet gadÄs arÄ« tÄ, ka nav nekÄdu pavedienu, un jums ir jÄanalizÄ.
Noskaidrojot blokierÄ«ces nosaukumu, mÄs no tÄ apkopojam informÄciju par diska veidu un izmÄru, lai aizpildÄ«tu laukus Jira. MÄs arÄ« noÅemam informÄciju par pÄrdevÄju, modeli, programmaparatÅ«ru, ID, SMART un ievietojam to visu komentÄrÄ Jira biļetÄ. Administratoram un inženierim Å”ie dati vairs nav jÄmeklÄ. š
sagatavot2mainīt.yml
Diska noÅemÅ”ana no rotÄcijas, sagatavoÅ”ana nomaiÅai. GrÅ«tÄkais un svarÄ«gÄkais posms. Å eit varat apturÄt lietojumprogrammu, kad to nevajadzÄtu apturÄt. Vai arÄ« izÅemiet disku, kuram nebija pietiekami daudz kopiju, un tÄdÄjÄdi tas ietekmÄ lietotÄjus, zaudÄjot dažus datus. Å eit mums ir visvairÄk Äeku un paziÅojumu tÄrzÄÅ”anÄ.
VienkÄrÅ”ÄkajÄ gadÄ«jumÄ mÄs runÄjam par diska noÅemÅ”anu no HW/MD RAID.
SarežģītÄkÄs situÄcijÄs (mÅ«su krÄtuves sistÄmÄs), kad dublÄÅ”ana tiek veikta lietojumprogrammas lÄ«menÄ«, ir jÄdodas uz lietojumprogrammu caur API, jÄziÅo par diska izvadi, deaktivizÄjiet to un jÄsÄk atkopÅ”ana.
Tagad mÄs masveidÄ migrÄjam uz mÄkonis, un, ja serveris ir balstÄ«ts uz mÄkoÅiem, Diskobot izsauc mÄkoÅa API, saka, ka tas darbosies ar Å”o minionu ā serveri, kurÄ darbojas konteineri, un prasa āmigrÄt visus konteinerus no Ŕī minionaā. Un tajÄ paÅ”Ä laikÄ ieslÄdz diska fona apgaismojumu, lai inženieris uzreiz redzÄtu, kurÅ” no tiem ir jÄizvelk.
mainīts.yml
PÄc diska nomaiÅas mÄs vispirms pÄrbaudÄm tÄ pieejamÄ«bu.
Inženieri ne vienmÄr instalÄ jaunus diskus, tÄpÄc mÄs pÄrbaudÄ«jÄm SMART vÄrtÄ«bas, kas mÅ«s apmierina.
KÄdus atribÅ«tus mÄs skatÄmies?PÄrdalÄ«to nozaru skaits (5) < 100
PaÅ”reizÄjais neapstiprinÄto sektoru skaits (107) == 0
Ja piedziÅas tests neizdodas, inženierim tiek paziÅots, ka tas ir jÄnomaina vÄlreiz. Ja viss ir kÄrtÄ«bÄ, izslÄdzas fona apgaismojums, tiek uzlikts marÄ·Äjums un disks tiek pagriezts.
gatavs.yml
VienkÄrÅ”Äkais gadÄ«jums: HW/SW raid sinhronizÄcijas pÄrbaude vai datu sinhronizÄcijas pabeigÅ”ana aplikÄcijÄ.
Lietojumprogrammas API
Esmu vairÄkas reizes minÄjis, ka robots bieži piekļūst lietojumprogrammu API. Protams, ne visÄm lietojumprogrammÄm bija nepiecieÅ”amÄs metodes, tÄpÄc tÄs bija jÄmaina. Å eit ir norÄdÄ«tas vissvarÄ«gÄkÄs metodes, kuras mÄs izmantojam:
Statuss. Klastera vai diska statuss, lai saprastu, vai ar to var strÄdÄt;
SÄkt/pÄrtraukt. Diska aktivizÄÅ”ana/deaktivizÄÅ”ana;
MigrÄt/atjaunot. Datu migrÄcija un atjaunoÅ”ana nomaiÅas laikÄ un pÄc tÄs.
No Ansible gÅ«tÄs mÄcÄ«bas
Man ļoti patÄ«k Ansible. TaÄu bieži vien, skatoties uz dažÄdiem atvÄrtÄ pirmkoda projektiem un redzot, kÄ cilvÄki raksta rokasgrÄmatas, man kļūst mazliet bail. Sarežģītas loÄ£iskÄs mijiedarbÄ«bas kad/cilpa, elastÄ«bas un idempotences trÅ«kums biežas Äaulas/komandas lietoÅ”anas dÄļ.
MÄs nolÄmÄm visu pÄc iespÄjas vienkÄrÅ”ot, izmantojot Ansible priekÅ”rocÄ«bas ā modularitÄti. AugstÄkajÄ lÄ«menÄ« ir rokasgrÄmatas; tÄs var rakstÄ«t jebkurÅ” administrators, treÅ”Äs puses izstrÄdÄtÄjs, kurÅ” nedaudz pÄrzina Ansible.
Ja kÄdu loÄ£iku ir grÅ«ti ieviest rotaļu grÄmatÄs, mÄs to pÄrvietojam uz Ansible moduli vai filtru. Skriptus var rakstÄ«t Python vai jebkurÄ citÄ valodÄ.
Tos ir viegli un Ätri rakstÄ«t. PiemÄram, diska fona apgaismojuma modulis, kura piemÄrs ir parÄdÄ«ts iepriekÅ”, sastÄv no 265 rindÄm.
ZemÄkajÄ lÄ«menÄ« ir bibliotÄka. Å im projektam mÄs uzrakstÄ«jÄm atseviŔķu lietojumprogrammu, kas ir sava veida abstrakcija pÄr aparatÅ«ras un programmatÅ«ras RAID, kas veic atbilstoÅ”os pieprasÄ«jumus.
Ansible lielÄkÄs priekÅ”rocÄ«bas ir tÄ vienkÄrŔība un skaidras rokasgrÄmatas. Es uzskatu, ka jums tas ir jÄizmanto, nevis jÄÄ£enerÄ biedÄjoÅ”i yaml faili un milzÄ«gs skaits nosacÄ«jumu, Äaulas koda un cilpu.
Ja vÄlaties atkÄrtot mÅ«su pieredzi ar Ansible API, Åemiet vÄrÄ divas lietas:
Playbook_executor un playbooks kopumÄ nevar pieŔķirt taimautu. Ssh sesijÄ ir noildze, bet rokasgrÄmatÄ nav taimauta. Ja mÄÄ£inÄsim atvienot disku, kas sistÄmÄ vairs nepastÄv, rokasgrÄmata darbosies bezgalÄ«gi, tÄpÄc mums bija jÄietver tÄ palaiÅ”ana atseviÅ”Ä·Ä iesaiÅojumÄ un jÄnogalina ar taimautu.
Ansible darbojas dakÅ”veida procesos, tÄpÄc tÄ API nav droÅ”a pavedienam. Visas mÅ«su rokasgrÄmatas tiek izmantotas vienÄ pavedienÄ.
RezultÄtÄ mÄs varÄjÄm automatizÄt aptuveni 80% disku nomaiÅu. KopumÄ aizstÄÅ”anas lÄ«menis ir dubultojies. Å odien administrators vienkÄrÅ”i apskata incidentu un izlemj, vai disks ir jÄmaina vai nÄ, un pÄc tam veic vienu klikŔķi.
Bet tagad mÄs sÄkam saskarties ar citu problÄmu: daži jaunie administratori nezina, kÄ mainÄ«t diskus. š