Автоматикунонии ивазкунии диск бо Ansible

Автоматикунонии ивазкунии диск бо Ansible

Салом ба ҳама. Ман ҳамчун мудири пешбари система дар OK кор мекунам ва барои кори устувори портал масъул ҳастам. Ман мехоҳам дар бораи он сухан гӯям, ки чӣ тавр мо як раванди иваз кардани дискҳоро ба таври худкор сохтаем ва баъд чӣ гуна мо администраторро аз ин раванд хориҷ кардем ва ӯро бо бот иваз кардем.

Ин мақола як навъ транслитератсия аст спектакльхо дар HighLoad+ 2018

Сохтани раванди иваз кардани диск

Аввал баъзе рақамҳо

OK як хидмати бузургест, ки миллионҳо одамон истифода мебаранд. Ба он тақрибан 7 ҳазор серверҳо хизмат мерасонанд, ки дар 4 маркази додаҳои гуногун ҷойгиранд. Серверҳо зиёда аз 70 ҳазор диск доранд. Агар шумо онҳоро дар болои ҳамдигар ҷойгир кунед, шумо манорае ба даст меоред, ки баландии онҳо зиёда аз 1 км аст.

Дискҳои сахт ҷузъи сервер мебошанд, ки аксар вақт ноком мешаванд. Бо чунин ҳаҷмҳо, мо бояд дар як ҳафта тақрибан 30 дискро иваз кунем ва ин тартиб як реҷаи чандон гуворо набуд.

Автоматикунонии ивазкунии диск бо Ansible

Ходисахо

Ширкати мо идоракунии пурраи ҳодисаҳоро ҷорӣ кардааст. Мо ҳар як ҳодисаро дар Ҷира сабт мекунем ва сипас онро ҳал мекунем. Агар ҳодисае ба корбарон таъсир карда бошад, пас мо ҳатман ҷамъ мешавем ва дар бораи он фикр мекунем, ки дар чунин ҳолатҳо чӣ гуна зудтар вокуниш нишон диҳем, чӣ гуна таъсирро коҳиш диҳем ва албатта, чӣ гуна такрори такрорро пешгирӣ кунем.

Дастгоҳҳои нигоҳдорӣ истисно нестанд. Вазъи онҳо аз ҷониби Zabbix назорат карда мешавад. Мо паёмҳоро дар Syslog барои хатогиҳои навиштан/хондан назорат мекунем, ҳолати рейдҳои HW/SW-ро таҳлил мекунем, SMART-ро назорат мекунем ва фарсудашавии SSD-ҳоро ҳисоб мекунем.

Чӣ тавр дискҳо пештар иваз карда шуданд

Вақте ки триггер дар Zabbix рух медиҳад, ҳодиса дар Jira эҷод мешавад ва ба таври худкор ба муҳандисони мувофиқ дар марказҳои додаҳо таъин карда мешавад. Мо инро бо ҳама ҳодисаҳои HW иҷро мекунем, яъне онҳое, ки ҳама гуна кори ҷисмонӣ бо таҷҳизот дар маркази додаҳоро талаб мекунанд.
Муҳандиси маркази додаҳо шахсест, ки масъалаҳои марбут ба сахтафзорро ҳал мекунад ва барои насб, нигоҳдорӣ ва барҳам додани серверҳо масъул аст. Билетро гирифта, инженер ба кор медарояд. Дар рафҳои дискҳо ӯ дискҳоро мустақилона иваз мекунад. Аммо агар ба дастгоди зарурй дастрасӣ надошта бошад, муҳандис барои кӯмак ба маъмурони системаҳои навбатдор муроҷиат мекунад. Пеш аз ҳама, шумо бояд дискро аз гардиш хориҷ кунед. Барои ин ба шумо лозим аст, ки дар сервер тағйироти зарурӣ ворид кунед, барномаҳоро қатъ кунед ва дискро ҷудо кунед.

Маъмури системавии навбатдор барои кори тамоми портал дар давоми басти корӣ масъул аст. Вай ҳодисаҳоро тафтиш мекунад, таъмир мекунад ва ба таҳиягарон дар иҷрои вазифаҳои хурд кӯмак мекунад. Ӯ на танҳо бо дискҳои сахт сарукор дорад.

Қаблан муҳандисони маркази додаҳо бо маъмури система тавассути чат муошират мекарданд. Муҳандисҳо ба чиптаҳои Jira истинодҳо фиристоданд, маъмур онҳоро пайгирӣ кард, дар баъзе блокнот сабти корҳоро нигоҳ дошт. Аммо чатҳо барои чунин вазифаҳо номувофиқанд: маълумот дар он ҷо сохторбандӣ нашудааст ва зуд гум мешавад. Ва администратор метавонист танҳо аз компютер дур шавад ва муддате ба дархостҳо посух надиҳад, дар ҳоле ки муҳандис дар сервер бо анбори дискҳо истода, интизор мешуд.

Аммо бадтарин чиз он буд, ки маъмурон манзараи пурраро надиданд: кадом ҳодисаҳои диск вуҷуд доранд ва дар куҷо мушкилот эҳтимолан ба вуҷуд омада метавонад. Ин аз он сабаб аст, ки мо тамоми ҳодисаҳои HW-ро ба муҳандисон вогузор мекунем. Бале, имкон дошт, ки ҳама ҳодисаҳоро дар панели идоракунанда нишон диҳед. Аммо онҳо зиёданд ва маъмур танҳо барои баъзеи онҳо ҷалб карда шудааст.

Илова бар ин, муҳандис наметавонад афзалиятҳоро дуруст муқаррар кунад, зеро ӯ дар бораи ҳадафҳои серверҳои мушаххас ё тақсимоти иттилоот дар байни дискҳо чизе намедонад.

Тартиби нави ивазкунӣ

Аввалин коре, ки мо анҷом додем, ҳамаи ҳодисаҳои дискро ба навъи алоҳидаи "диски HW" интиқол додан буд ва ба он майдонҳои "номи блоки дастгоҳ", "андоза" ва "навъи диск" илова карда шуд, то ин маълумот дар чипта нигоҳ дошта шавад ва дар чат доимо мубодила кардан лозим нест.

Автоматикунонии ивазкунии диск бо Ansible
Мо инчунин розӣ шудем, ки дар давоми як ҳодиса мо танҳо як дискро иваз мекунем. Ин процесси автоматикунонй, чамъоварии маълумот ва кори ояндаро хеле осон кард.

Илова бар ин, мо майдони "администратори масъул" -ро илова кардем. Дар он ҷо маъмури системавии навбатдор ба таври худкор ворид карда мешавад. Ин хеле кулай аст, зеро холо инженер хамеша мебинад, ки кй масъул аст. Ба тақвим рафтан ва ҷустуҷӯ кардан лозим нест. Маҳз ин майдон имкон дод, ки чиптаҳо дар панели идоракунанда намоиш дода шаванд, ки шояд кӯмаки ӯро талаб кунад.

Автоматикунонии ивазкунии диск бо Ansible
Барои он ки ҳамаи иштирокчиён аз навоварӣ фоидаи бештар ба даст оранд, мо филтрҳо ва панели идоракуниро эҷод кардем ва ба бачаҳо дар бораи онҳо нақл кардем. Вақте ки одамон тағиротро мефаҳманд, онҳо худро ҳамчун чизи нолозим аз онҳо дур намесозанд. Барои муҳандис донистани рақами рейк, ки сервер дар куҷо ҷойгир аст, андоза ва навъи диск муҳим аст. Администратор пеш аз ҳама бояд фаҳмад, ки ин чӣ гуна гурӯҳи серверҳост ва ҳангоми иваз кардани диск чӣ таъсир дошта метавонад.

Мавҷудияти майдонҳо ва намоиши онҳо қулай аст, аммо ин моро аз зарурати истифодаи чатҳо наҷот надод. Барои ин ба мо лозим омад, ки тартиби корро дигар кунем.

Пештар чунин буд:

Автоматикунонии ивазкунии диск бо Ansible
Ин аст, ки муҳандисон имрӯз корро идома медиҳанд, вақте ки онҳо ба кӯмаки маъмур ниёз надоранд.

Аввалин коре, ки мо кардем, ҷорӣ кардани мақоми нав буд Тафтиш кунед. Чипта дар ин ҳолат аст, вақте ки муҳандис ҳанӯз тасмим нагирифтааст, ки ба ӯ маъмур лозим аст ё не. Тавассути ин статус, муҳандис метавонад билетро ба маъмур интиқол диҳад. Илова бар ин, мо ин ҳолатро барои қайд кардани чиптаҳо истифода мебарем, вақте ки диск бояд иваз карда шавад, аммо худи диск дар сайт нест. Ин дар сурати CDN ва сайтҳои дурдаст рӯй медиҳад.

Мо инчунин статусро илова кардем тайёр. Пас аз иваз кардани диск билет ба он дода мешавад. Яъне, ҳама чиз аллакай иҷро шудааст, аммо HW/SW RAID дар сервер ҳамоҳанг карда шудааст. Ин метавонад вақти хеле дарозро талаб кунад.

Агар администратор ба кор ҷалб карда шавад, схема каме мураккабтар мешавад.

Автоматикунонии ивазкунии диск бо Ansible
Аз статус кушодан Чиптаро ҳам маъмури система ва ҳам муҳандис тарҷума карда метавонад. Дар ҳолати Дар ҷараён администратор дискро аз гардиш хориҷ мекунад, то муҳандис онро танҳо берун кашад: чароғро даргиронда, дискро ҷудо мекунад, барномаҳоро вобаста ба гурӯҳи мушаххаси серверҳо қатъ мекунад.

Пас аз он чипта ба он интиқол дода мешавад Омода барои тағир додан: Ин сигнал ба инженер аст, ки дискро кашидан мумкин аст. Ҳама майдонҳо дар Jira аллакай пур карда шудаанд, муҳандис медонад, ки кадом намуд ва андозаи диск. Ин маълумот ба таври худкор дар ҳолати қаблӣ ё аз ҷониби администратор ворид карда мешавад.

Пас аз иваз кардани диск, ҳолати чипта ба тағир дода мешавад Тағйир ёфт. Он тафтиш мекунад, ки диски дуруст ҷойгир карда шудааст, тақсимкунӣ анҷом дода шудааст, барнома оғоз карда шудааст ва баъзе вазифаҳои барқарорсозии маълумот оғоз карда шудаанд. Чипта инчунин метавонад ба ҳолати интиқол дода шавад тайёр, дар ин ҳолат маъмур масъул боқӣ мемонад, зеро ӯ дискро ба гардиш гузошт. Диаграммаи пурра чунин менамояд.

Автоматикунонии ивазкунии диск бо Ansible
Илова кардани майдонхои нав хаёти моро хеле осон кард. Бачаҳо ба кор бо иттилооти сохторӣ шурӯъ карданд, маълум шуд, ки чӣ кор кардан лозим аст ва дар кадом марҳила. Афзалиятҳо хеле муҳимтар шуданд, зеро онҳо ҳоло аз ҷониби мудир муқаррар карда мешаванд.

Ба чат лозим нест. Албатта, маъмур метавонад ба муҳандис нависад, ки "инро зудтар иваз кардан лозим аст" ё "аллакай шом аст, оё шумо барои иваз кардани он вақт доред?" Аммо мо дигар ҳамарӯза дар чатҳо оид ба ин масъалаҳо муошират намекунем.

Дискҳо ба қисмҳо иваз карда шуданд. Агар администратор каме барвакт ба кор омада бошад, вақти холӣ дорад ва ҳоло ҳеҷ чиз рӯй надода бошад, вай метавонад як қатор серверҳоро барои ивазкунӣ омода кунад: майдонҳоро пур кунед, дискҳоро аз гардиш хориҷ кунед ва супоришро ба муҳандис супоред. Инженер каме дертар ба пункти дисоббарор меояд, супоришро мебинад, аз анбор дискдои заруриро гирифта, фавран иваз мекунад. Дар натича суръати ивазкунй афзуд.

Дарсҳои омӯхташуда ҳангоми сохтани ҷараёни корӣ

  • Ҳангоми сохтани тартиб, шумо бояд маълумотро аз сарчашмаҳои гуногун ҷамъ кунед.
    Баъзе маъмурони мо намедонистанд, ки инженер дискхоро худаш иваз мекунад. Баъзе одамон фикр мекарданд, ки ҳамоҳангсозии MD RAID аз ҷониби муҳандисон идора карда мешавад, гарчанде ки баъзеи онҳо ҳатто ба ин дастрасӣ надоштанд. Баъзе инженерони пешкадам ин корро карданд, вале на хамеша аз он сабаб, ки ин процесс дар ягон чо тавсиф карда нашудааст.
  • Тартиб бояд содда ва фаҳмо бошад.
    Барои одам душвор аст, ки қадамҳои зиёдеро дар хотир нигоҳ дорад. Муҳимтарин статусҳои ҳамсоя дар Jira бояд дар экрани асосӣ ҷойгир карда шаванд. Шумо метавонед онҳоро тағир диҳед, масалан, мо даъват мекунем Дар идома Омода барои тағир додан. Ва статусҳои дигарро дар менюи афтанда пинҳон кардан мумкин аст, то онҳо дарди чашм набошанд. Аммо беҳтар аст, ки одамонро маҳдуд накунед, ба онҳо имкони гузаришро диҳед.
    Арзиши инноватсияро шарҳ диҳед. Вақте ки одамон мефаҳманд, онҳо тартиби навро бештар қабул мекунанд. Барои мо хеле муҳим буд, ки одамон тамоми равандро клик накунанд, балки онро риоя кунанд. Баъд мо дар ин бора автоматика сохтем.
  • Интизор шавед, таҳлил кунед, онро муайян кунед.
    Барои сохтани тартиб, татбиқи техникӣ, вохӯриву муҳокимаҳо ба мо тақрибан як моҳ лозим шуд. Ва татбиқи он бештар аз се моҳро мегирад. Ман дидам, ки чӣ тавр одамон оҳиста-оҳиста аз навоварӣ истифода мебаранд. Дар марҳилаҳои аввал манфӣ зиёд буд. Аммо он аз худи тартиб ва татбиқи техникии он комилан мустақил буд. Масалан, як маъмур Jira-ро истифода набурд, аммо плагини Jira дар Confluence ва баъзе чизҳо барои ӯ дастрас набуданд. Мо ба ӯ Ҷираро нишон додем ва маҳсулнокии админ ҳам барои иҷрои вазифаҳои умумӣ ва ҳам барои иваз кардани дискҳо афзоиш ёфт.

Автоматикунонии ивази диск

Мо якчанд маротиба ба автоматикунонии ивазкунии диск муроҷиат кардем. Мо аллакай таҳияҳо ва скриптҳо доштем, аммо ҳамаи онҳо ба таври интерактивӣ ё дастӣ кор мекарданд ва оғозро талаб мекарданд. Ва танхо баъди чорй намудани тартиби нав мо фахмидем, ки махз хамин чизест, ки мо намерасидем.

Азбаски ҳоло раванди ивазкунии мо ба марҳилаҳо тақсим шудааст, ки ҳар яки онҳо иҷрокунандаи мушаххас ва рӯйхати амалҳо доранд, мо метавонем автоматикунониро дар марҳилаҳо фаъол созем, на ҳама якбора. Масалан, марҳилаи соддатарин - Омода (тафтиши RAID/синхронизатсияи маълумот) метавонад ба осонӣ ба бот таъин карда шавад. Вақте ки бот каме ёд гирифт, шумо метавонед ба он вазифаи муҳимтарро диҳед - дискро ба гардиш ва ғайра.

Танзимоти зоопарк

Пеш аз он ки мо дар бораи бот сӯҳбат кунем, биёед як экскурсияи кӯтоҳе ба зоопаркҳои установкаҳоямон кунем. Пеш аз хама, ин ба андозаи азими инфраструктураи мо вобаста аст. Дуюм, мо кӯшиш мекунем, ки конфигуратсияи оптималии сахтафзорро барои ҳар як хидмат интихоб кунем. Мо тақрибан 20 модели сахтафзори RAID дорем, асосан LSI ва Adaptec, аммо инчунин HP ва DELL версияҳои гуногун мавҷуданд. Ҳар як контролери RAID утилитаи идоракунии худро дорад. Маҷмӯи фармонҳо ва додани онҳо метавонанд аз версия ба версияи ҳар як контролери RAID фарқ кунанд. Дар он ҷое, ки HW-RAID истифода намешавад, mdraid метавонад истифода шавад.

Мо қариб ҳама насбкуниҳои навро бидуни нусхабардории диск анҷом медиҳем. Мо кӯшиш мекунем, ки дигар сахтафзор ва нармафзори RAID-ро истифода набарем, зеро мо системаҳои худро дар сатҳи маркази додаҳо нусхабардорӣ мекунем, на серверҳо. Аммо албатта бисёр серверҳои меросӣ мавҷуданд, ки бояд дастгирӣ шаванд.

Дар ҷое дискҳо дар контроллерҳои RAID ба дастгоҳҳои хом интиқол дода мешаванд, дар ҷое JBODҳо истифода мешаванд. Дар сервер конфигуратсияҳо бо як диски система мавҷуданд ва агар онро иваз кардан лозим бошад, шумо бояд серверро бо насби ОС ва замимаҳои ҳамон версияҳо аз нав насб кунед, пас файлҳои конфигуратсияро илова кунед, барномаҳоро оғоз кунед. Инчунин гурӯҳҳои зиёди серверҳо мавҷуданд, ки захиракунӣ на дар сатҳи зерсистемаи диск, балки бевосита дар худи барномаҳо амалӣ карда мешавад.

Дар маҷмӯъ, мо зиёда аз 400 гурӯҳҳои беназири сервер дорем, ки тақрибан 100 барномаҳои гуногунро иҷро мекунанд. Барои фаро гирифтани чунин шумораи зиёди вариантҳо ба мо асбоби автоматикунонии бисёрфунксионалӣ лозим буд. Беҳтараш бо DSL оддӣ, то на танҳо шахсе, ки онро навишт, онро дастгирӣ кунад.

Мо Ansible-ро интихоб кардем, зеро он бе агент аст: зарурати омода кардани инфрасохтор, оғози зуд набуд. Илова бар ин, он дар Python навишта шудааст, ки ҳамчун стандарт дар дохили даста қабул карда мешавад.

Нақшаи генералӣ

Биёед схемаи умумии автоматикунониро бо истифода аз як ҳодиса ҳамчун мисол дида бароем. Zabbix муайян мекунад, ки диски sdb ноком шудааст, триггер фурӯзон мешавад ва чипта дар Jira сохта мешавад. Администратор ба он нигарист, фаҳмид, ки ин дубликат нест ва позитивҳои бардурӯғ нест, яъне дискро иваз кардан лозим аст ва чиптаро ба In Progress гузаронд.

Автоматикунонии ивазкунии диск бо Ansible
Замимаи DiskoBot, ки бо Python навишта шудааст, мунтазам Jira-ро барои чиптаҳои нав пурсиш мекунад. Он қайд мекунад, ки чиптаи нави Дар идома пайдо шуд, риштаи мувофиқ ба кор андохта мешавад, ки китоби бозиро дар Ansible оғоз мекунад (ин барои ҳар як ҳолат дар Jira анҷом дода мешавад). Дар ин ҳолат, Prepare2change оғоз мешавад.

Ansible ба мизбон фиристода мешавад, дискро аз гардиш хориҷ мекунад ва дар бораи ҳолат ба барнома тавассути Callbacks хабар медиҳад.

Автоматикунонии ивазкунии диск бо Ansible
Дар асоси натиҷаҳо, бот ба таври худкор чиптаро ба Омода барои тағир медиҳад. Муҳандис огоҳинома мегирад ва барои иваз кардани диск меравад ва пас аз он чиптаро ба Тағир медиҳад.

Автоматикунонии ивазкунии диск бо Ansible
Тибқи нақшаи дар боло тавсифшуда, чипта ба бот бармегардад, ки китоби дигари бозиро оғоз мекунад, ба мизбон меравад ва дискро ба гардиш мегузорад. Бот билетро мебандад. Ура!

Автоматикунонии ивазкунии диск бо Ansible
Акнун биёед дар бораи баъзе ҷузъҳои система сӯҳбат кунем.

Diskobot

Ин барнома дар Python навишта шудааст. Он чиптаҳоро аз Jira мувофиқи JQL интихоб мекунад. Вобаста аз ҳолати чипта, охирин ба коркардкунандаи мувофиқ меравад, ки дар навбати худ китоби бозикунии Ansible-ро, ки ба вазъ мувофиқ аст, оғоз мекунад.

JQL ва фосилаҳои овоздиҳӣ дар файли конфигуратсияи барнома муайян карда мешаванд.

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

Масалан, дар байни чиптаҳо дар ҳолати иҷрошаванда танҳо онҳое интихоб карда мешаванд, ки майдонҳои андозаи диск ва номи дастгоҳ пур карда шудаанд. Номи дастгоҳ номи дастгоҳи блокест, ки барои иҷрои китоби бозӣ лозим аст. Андозаи диск лозим аст, то муҳандис донад, ки кадом андозаи диск лозим аст.

Ва дар байни чиптаҳои дорои мақоми Омода, чиптаҳо бо тамғаи dbot_ignore филтр карда мешаванд. Воқеан, мо тамғаҳои Jira-ро ҳам барои чунин филтр ва ҳам барои қайд кардани чиптаҳои такрорӣ ва ҷамъоварии омор истифода мебарем.

Агар китоби бозӣ ноком шавад, Jira тамғаи dbot_failed -ро таъин мекунад, то он баъдтар мураттаб карда шавад.

Мубориза бо Ansible

Барнома бо Ansible тавассути API Ansible Python. Барои playbook_executor мо номи файл ва маҷмӯи тағирёбандаҳоро мегузарем. Ин ба шумо имкон медиҳад, ки лоиҳаи Ansible-ро дар шакли файлҳои муқаррарии yml нигоҳ доред, на тавсифи онро дар коди Python.

Инчунин дар Ansible, тавассути *extra_vars*, номи дастгоҳи блок, ҳолати чипта, инчунин callback_url, ки калиди масъаларо дар бар мегирад - он барои занги бозпас дар HTTP истифода мешавад.

Барои ҳар як оғоз, инвентаризатсияи муваққатӣ тавлид мешавад, ки аз як мизбон ва гурӯҳе, ки ин мизбон ба он тааллуқ дорад, иборат аст, то group_vars истифода шаванд.

Дар ин ҷо як мисоли вазифаест, ки HTTP бозпасро амалӣ мекунад.

Мо натиҷаи иҷрои китобҳои бозиро бо истифода аз callaback(ҳо) мегирем. Онҳо ду намуд мебошанд:

  • Васлкунаки бозпас занг задан, он маълумотро дар бораи натиљањои иљрои китоби бозињо пешкаш мекунад. Он вазифаҳоеро тавсиф мекунад, ки оғоз ёфтаанд, бомуваффақият ё бемуваффақият анҷом дода шудаанд. Ин занги такрорӣ вақте даъват карда мешавад, ки китоби бозӣ ба охир расид.
  • Бозгашти HTTP барои гирифтани маълумот ҳангоми бозӣ кардани китоби бозӣ. Дар вазифаи Ansible мо дархости POST/GET-ро ба замимаи худ иҷро мекунем.

Тағирёбандаҳо тавассути занг(ҳо)-и HTTP интиқол дода мешаванд, ки ҳангоми иҷрои китоби бозӣ муайян шуда буданд ва мо мехоҳем, ки дар иҷроҳои минбаъда захира ва истифода барем. Мо ин маълумотро дар sqlite менависем.

Мо инчунин шарҳҳо мегузорем ва ҳолати чиптаро тавассути HTTP бозпас иваз мекунем.

Бозгашти HTTP

# 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

Мисли бисёр вазифаҳои як навъ, мо онро дар як файли алоҳидаи умумӣ ҷойгир мекунем ва дар ҳолати зарурӣ онро дохил мекунем, то дар китобҳои бозӣ пайваста такрор нашавад. Ба ин callback_ url дохил мешавад, ки калиди масъала ва номи мизбонро дар бар мегирад. Вақте ки Ansible ин дархости POST-ро иҷро мекунад, бот мефаҳмад, ки он ҳамчун як ҷузъи фалон ҳодиса омадааст.

Ва ин аст як мисол аз китоби бозӣ, ки дар он мо дискро аз дастгоҳи MD мебарорем:

  # 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

Ин вазифа чиптаи Jira-ро ба ҳолати "Омода барои тағир додан" интиқол медиҳад ва шарҳ илова мекунад. Инчунин, тағирёбандаи mdam_data рӯйхати дастгоҳҳои md-ро, ки диск аз онҳо хориҷ карда шудааст, нигоҳ медорад ва parted_info партови қисмро аз parted нигоҳ медорад.

Вақте ки муҳандис як диски навро ворид мекунад, мо метавонем ин тағирёбандаҳоро барои барқарор кардани партови тақсимот истифода барем ва инчунин дискро ба дастгоҳҳои md, ки аз он хориҷ карда шудааст, ҷойгир кунем.

Реҷаи санҷиши оқилона

Ба кор андохтани автоматика дахшатовар буд. Аз ин рӯ, мо тасмим гирифтем, ки ҳамаи китобҳои бозиро дар реҷа иҷро кунем
давидан хушк, ки дар он Ansible ягон амалро дар серверҳо иҷро намекунад, балки танҳо ба онҳо тақлид мекунад.

Чунин оғозёбӣ тавассути модули алоҳидаи бозхонд иҷро карда мешавад ва натиҷаи иҷрои китоби бозӣ дар Jira ҳамчун шарҳ сабт карда мешавад.

Автоматикунонии ивазкунии диск бо Ansible

Аввалан, ин имкон дод, ки кори бот ва китобҳои бозӣ тасдиқ карда шавад. Дуюм, он эътимоди маъмуронро ба бот зиёд кард.

Вақте ки мо аз санҷиш гузаштем ва фаҳмидем, ки шумо метавонед Ansible-ро на танҳо дар реҷаи хушк кор кунед, мо тугмаи Run Diskobot-ро дар Jira сохтем, то як китоби бозиро бо ҳамон тағирёбандаҳо дар ҳамон ҳост, балки дар ҳолати муқаррарӣ оғоз кунад.

Илова бар ин, тугма барои аз нав оғоз кардани китоби бозӣ истифода мешавад, агар он суқут кунад.

Сохтори китобҳои бозӣ

Ман аллакай гуфта будам, ки вобаста ба ҳолати чиптаи Jira, бот китобҳои гуногуни бозиро оғоз мекунад.

Аввалан, ташкили даромадгоҳ хеле осонтар аст.
Дуюм, дар баъзе мавридҳо ин танҳо зарур аст.

Масалан, ҳангоми иваз кардани диски система, шумо аввал бояд ба системаи ҷойгиркунӣ равед, вазифа эҷод кунед ва пас аз ҷойгиркунии дуруст сервер тавассути ssh дастрас мешавад ва шумо метавонед барномаро дар он ҷойгир кунед. Агар мо ҳамаи инро дар як китоби бозӣ анҷом додем, пас Ansible наметавонад онро ба анҷом расонад, зеро мизбон дастрас нест.

Мо барои ҳар як гурӯҳи серверҳо нақшҳои Ansible-ро истифода мебарем. Дар ин ҷо шумо метавонед бубинед, ки китоб(ҳо) дар яке аз онҳо чӣ гуна ташкил карда шудаанд.

Автоматикунонии ивазкунии диск бо Ansible

Ин қулай аст, зеро фавран маълум мешавад, ки кадом вазифаҳо дар куҷо ҷойгиранд. Дар main.yml, ки вуруди нақши Ansible аст, мо метавонем танҳо аз рӯи ҳолати чипта ё вазифаҳои умумие, ки барои ҳама заруранд, дохил кунем, масалан, гузаштани шахсият ё гирифтани нишона.

Investigation.yml

Барои чиптаҳо дар ҳолати тафтишот ва кушода кор мекунад. Чизи аз ҳама муҳим барои ин китоби бозӣ номи блоки дастгоҳ аст. Ин маълумот на ҳамеша дастрас аст.

Барои ба даст овардани он, мо хулосаи Jira, арзиши охирини триггери Zabbix -ро таҳлил мекунем. Он метавонад номи дастгоҳи блокро дар бар гирад - хушбахт. Ё он метавонад нуқтаи васлкуниро дар бар гирад, пас шумо бояд ба сервер равед, онро таҳлил кунед ва диски лозимиро ҳисоб кунед. Триггер инчунин метавонад суроғаи scsi ё ягон маълумоти дигарро интиқол диҳад. Аммо чунин мешавад, ки ҳеҷ гуна нишонаҳо вуҷуд надоранд ва шумо бояд таҳлил кунед.

Номи дастгоҳи блокро фаҳмида, мо аз он маълумот дар бораи намуд ва андозаи диск ҷамъ мекунем, то майдонҳоро дар Jira пур кунем. Мо инчунин маълумотро дар бораи фурӯшанда, модел, нармафзор, ID, SMART хориҷ мекунем ва ҳамаи инро ба шарҳ дар чиптаи Jira дохил мекунем. Ба маъмур ва муҳандис дигар лозим нест, ки ин маълумотро ҷустуҷӯ кунанд. 🙂

Автоматикунонии ивазкунии диск бо Ansible

тайёр2change.yml

Хориҷ кардани диск аз гардиш, омодагӣ барои иваз кардан. Марҳилаи душвортарин ва муҳимтарин. Дар ин ҷо шумо метавонед барномаро қатъ кунед, вақте ки он набояд қатъ карда шавад. Ё дискеро, ки нусхаҳои кофӣ надоштанд, хориҷ кунед ва ба ин васила ба корбарон таъсир карда, баъзе маълумотро аз даст диҳед. Дар ин ҷо мо дар чат бештар чекҳо ва огоҳиномаҳоро дорем.

Дар соддатарин ҳолат, мо дар бораи хориҷ кардани диск аз HW/MD RAID гап мезанем.

Дар ҳолатҳои мураккабтар (дар системаҳои нигоҳдории мо), вақте ки нусхабардорӣ дар сатҳи барнома иҷро карда мешавад, шумо бояд ба барнома тавассути API равед, дар бораи баромади диск гузориш диҳед, онро ғайрифаъол кунед ва барқароркуниро оғоз кунед.

Ҳоло мо ба таври оммавӣ ба он ҷо муҳоҷират карда истодаем абрҳо, ва агар сервер ба абр асосёфта бошад, пас Diskobot API-и абрро даъват мекунад ва мегӯяд, ки он бо ин минион - сервере, ки контейнерҳоро идора мекунад - кор хоҳад кард ва хоҳиш мекунад, ки "ҳама контейнерҳоро аз ин минион интиқол диҳед." Ва дар айни замон, чароғи паси дискро фурӯзон мекунад, то муҳандис фавран бубинад, ки кадомашро кашидан лозим аст.

change.yml

Пас аз иваз кардани диск, мо аввал мавҷудияти онро тафтиш мекунем.

Муҳандисон на ҳамеша дискҳои навро насб мекунанд, аз ин рӯ мо чеки арзишҳои SMART-ро илова кардем, ки моро қонеъ мекунанд.

Мо ба кадом хислатҳо назар мекунем?Шумораи бахшҳои аз нав тақсимшуда (5) < 100
Шумораи бахшҳои дар интизори ҷорӣ (107) == 0

Агар диск аз санҷиш набарояд, ба муҳандис огоҳ карда мешавад, ки онро дубора иваз кунад. Агар ҳама чиз дуруст бошад, пас чароғ хомӯш мешавад, аломатҳо гузошта мешаванд ва диск ба гардиш гузошта мешавад.

тайёр.yml

Ҳолати соддатарин: тафтиши ҳамоҳангсозии рейди HW/SW ё анҷом додани ҳамоҳангсозии маълумот дар барнома.

API-и барнома

Ман якчанд маротиба қайд кардам, ки бот аксар вақт ба API-ҳои барнома дастрасӣ пайдо мекунад. Албатта, на ҳама барномаҳо усулҳои заруриро доштанд, бинобар ин онҳо бояд тағир дода шаванд. Дар ин ҷо усулҳои муҳимтарини мо истифода мешаванд:

  • Статус. Ҳолати кластер ё диск барои фаҳмидани он, ки оё бо он кор кардан мумкин аст;
  • Оғоз / қатъ. Фаъолсозӣ / ғайрифаъолкунии диск;
  • Муҳоҷират/барқарор кардан. Муҳоҷират ва барқарорсозии маълумот дар давоми ва пас аз иваз.

Дарсҳои аз Ansible гирифташуда

Ман Ansible-ро дар ҳақиқат дӯст медорам. Аммо аксар вақт, вақте ки ман ба лоиҳаҳои гуногуни кушодаасос нигоҳ мекунам ва мебинам, ки чӣ гуна одамон китобҳои бозиро менависанд, ман каме метарсам. Пайвандҳои мураккаби мантиқии кай/халқа, набудани чандирӣ ва номутаносибӣ аз сабаби истифодаи зуд-зуд аз ниҳонӣ/фармон.

Мо тасмим гирифтем, ки бо истифода аз бартарии Ansible - модулярӣ ҳама чизро то ҳадди имкон содда кунем. Дар сатҳи баландтарин китобҳои бозӣ мавҷуданд; онҳоро метавон ҳама гуна маъмур, таҳиягари тарафи сеюм, ки каме Ansible медонад, нависад.

- name: Blink disk
  become: True
  register: locate_action
  disk_locate:
      locate: '{{ locate }}'
      devname: '{{ devname }}'
      ids: '{{ locate_ids | default(pd_id) | default(omit) }}'

Агар татбиқи баъзе мантиқ дар китобҳои бозӣ душвор бошад, мо онро ба модул ё филтри Ansible интиқол медиҳем. Скриптҳоро бо Python ё ягон забони дигар навиштан мумкин аст.

Онҳо осон ва зуд навишта мешаванд. Масалан, модули пуштибонии диск, ки намунаи он дар боло нишон дода шудааст, аз 265 сатр иборат аст.

Автоматикунонии ивазкунии диск бо Ansible

Дар сатҳи поёнтарин китобхона ҷойгир аст. Барои ин лоиҳа, мо як барномаи алоҳида навиштем, як навъ абстраксия аз болои RAID-ҳои сахтафзор ва нармафзор, ки дархостҳои мувофиқро иҷро мекунанд.

Автоматикунонии ивазкунии диск бо Ansible

Бартарии бузургтарини Ansible ин соддагӣ ва китобҳои равшани он мебошад. Ман боварӣ дорам, ки шумо бояд инро истифода баред ва файлҳои даҳшатноки yaml ва шумораи зиёди шартҳо, коди ҷилди ва ҳалқаҳоро тавлид накунед.

Агар шумо хоҳед, ки таҷрибаи моро бо API Ansible такрор кунед, ду чизро дар хотир доред:

  • Playbook_executor ва умуман ба китобҳои бозӣ мӯҳлат дода намешавад. Дар сеанси ssh вақти танаффус мавҷуд аст, аммо дар китоби бозӣ ҳеҷ гуна танаффус вуҷуд надорад. Агар мо кӯшиш кунем, ки дискеро, ки дигар дар система вуҷуд надорад, ҷудо кунем, китоби бозӣ беохир кор мекунад, аз ин рӯ ба мо лозим омад, ки оғози онро дар як папкаи алоҳида печонем ва онро бо гузашти вақт кушем.
  • Ansible дар равандҳои фардӣ кор мекунад, аз ин рӯ API-и он ришта бехатар нест. Мо ҳама китобҳои бозикунии худро як ришта иҷро мекунем.

Дар натича мо муяссар шудем, ки такрибан 80 фоизи дискхоро автоматй кунонда. Умуман, суръати ивазкунй ду баробар афзуд. Имрӯз, администратор танҳо ба ҳодиса назар мекунад ва қарор мекунад, ки оё дискро тағир додан лозим аст ё не, ва сипас як клик мекунад.

Аммо ҳоло мо ба мушкилоти дигар дучор шуда истодаем: баъзе маъмурони нав намедонанд, ки чӣ гуна дискҳоро иваз кунанд. 🙂

Манбаъ: will.com

Илова Эзоҳ