Automatiséiert Disk Ersatz mat Ansible

Automatiséiert Disk Ersatz mat Ansible

Moien alleguer. Ech schaffen als féierende Systemadministrator bei OK an sinn verantwortlech fir déi stabil Operatioun vum Portal. Ech wëll schwätzen iwwer wéi mir e Prozess gebaut hunn fir automatesch Disketten z'ersetzen, an dann wéi mir den Administrateur aus dësem Prozess ausgeschloss hunn an hien duerch e Bot ersat hunn.

Dësen Artikel ass eng Zort Transliteratioun Opféierungen bei HighLoad+ 2018

Bauen vun engem Disk Ersatzprozess

Éischt e puer Zuelen

OK ass e riesegen Service dee vu Millioune Leit benotzt gëtt. Et gëtt vu ronn 7 dausend Serveren zerwéiert, déi a 4 verschiddenen Datenzentere sinn. D'Server enthalen méi wéi 70 Tausend Disken. Wann Dir se openee stackt, kritt Dir en Tuerm méi wéi 1 km héich.

Festplacke sinn de Serverkomponent deen am meeschten feelt. Mat esou Bänn musse mir ongeféier 30 Disken pro Woch änneren, an dës Prozedur ass eng net ganz agreabel Routine ginn.

Automatiséiert Disk Ersatz mat Ansible

Tëschefäll

Eis Firma huet vollwäerteg Incidentmanagement agefouert. Mir Rekord all Tëschefall zu Jira, an dann léisen an Zort et aus. Wann en Tëschefall en Effekt op d'Benotzer hat, da komme mir definitiv zesummen an denken iwwer wéi mir an esou Fäll méi séier reagéiere kënnen, wéi een den Effekt reduzéiert an natierlech och e Widderhuelung verhënneren.

Späichergeräter si keng Ausnahm. Hire Status gëtt vun Zabbix iwwerwaacht. Mir iwwerwaachen Messagen am Syslog fir Schreif- / Liesfehler, analyséieren de Status vun HW / SW Iwwerfäll, iwwerwaachen SMART a berechent Verschleiung fir SSDs.

Wéi Diske virdrun geännert goufen

Wann en Ausléiser am Zabbix geschitt, gëtt en Tëschefall am Jira erstallt an automatesch un déi entspriechend Ingenieuren an den Datenzenter zougewisen. Mir maachen dat mat all HW Tëschefäll, dat ass, déi, déi kierperlech Aarbecht mat Ausrüstung am Rechenzentrum verlaangen.
En Datacenteringenieur ass eng Persoun déi Problemer am Zesummenhang mat der Hardware léist a verantwortlech ass fir d'Installatioun, d'Erhalen an d'Demontage vun Serveren. Nodeems de Ticket kritt huet, geet den Ingenieur op d'Aarbecht. An Scheif Regaler hien Ännerungen Scheif onofhängeg. Awer wann hien keen Zougang zum erfuerderlechen Apparat huet, wendt den Ingenieur sech un d'Systemadministrateuren op Flicht fir Hëllef. Als éischt musst Dir d'Disk aus der Rotatioun erofhuelen. Fir dëst ze maachen, musst Dir déi néideg Ännerungen um Server maachen, Uwendungen stoppen an d'Disk ofmontéieren.

De System Administrateur op Flicht ass verantwortlech fir d'Operatioun vum ganze Portal während der Aarbechtsschicht. Hien ënnersicht Tëschefäll, mécht Reparaturen, an hëlleft Entwéckler kleng Aufgaben komplett. Hien beschäftegt sech net nëmme mat Festplacken.

Virdrun hunn Datenzenteringenieuren mam Systemadministrator iwwer Chat kommunizéiert. D'Ingenieuren hunn Linken op Jira Ticketen geschéckt, den Administrateur huet se gefollegt, e Logbuch vun der Aarbecht an e puer Notizblock gehal. Awer Chats sinn onbequem fir sou Aufgaben: d'Informatioun do ass net strukturéiert a gëtt séier verluer. An den Administrateur konnt einfach vum Computer fortgoen an eng Zäit laang net op Ufroe reagéieren, während den Ingenieur mat engem Stack Disken um Server stoung a waart.

Mä dat Schlëmmst war, datt d'Administrateuren net dat ganzt Bild gesinn hunn: wéi eng Disk-Tëschefäll existéieren, wou e Problem kéint entstoen. Dëst ass wéinst der Tatsaach datt mir all HW Tëschefäll un Ingenieuren delegéieren. Jo, et war méiglech all Tëschefäll um Dashboard vum Administrateur ze weisen. Awer et gi vill vun hinnen, an den Administrateur war nëmme fir e puer vun hinnen involvéiert.

Zousätzlech konnt den Ingenieur keng Prioritéite korrekt setzen, well hien näischt iwwer den Zweck vu spezifesche Serveren oder d'Verdeelung vun Informatioun tëscht Drive weess.

Nei Ersatzprozedur

Déi éischt Saach, déi mir gemaach hunn, war all Disk Tëschefäll an eng getrennten Typ "HW Disk" ze réckelen an d'Felder "Block device name", "Gréisst" an "Disk Typ" dozou bäigefüügt fir datt dës Informatioun am Ticket gespäichert gëtt a géif net dauernd am Chat austauschen.

Automatiséiert Disk Ersatz mat Ansible
Mir hunn eis och eens ginn, datt mir während engem Tëschefall nëmmen eng Scheif änneren. Dëst huet den Automatisatiounsprozess, d'Statistiksammlung an d'Aarbecht an der Zukunft wesentlech vereinfacht.

Zousätzlech hu mir de Feld "verantwortlech Administrateur" bäigefüügt. De System Administrateur am Pflicht gëtt automatesch do agebaut. Dat ass ganz bequem, well elo gesäit den Ingenieur ëmmer wien responsabel ass. Kee Grond fir an de Kalenner ze goen a sichen. Et war dëst Feld, deen et méiglech gemaach huet Ticketen um Dashboard vum Administrateur ze weisen, déi seng Hëllef erfuerderen.

Automatiséiert Disk Ersatz mat Ansible
Fir sécherzestellen datt all Participanten maximal Virdeeler vun Innovatiounen kréien, hu mir Filteren an Dashboards erstallt an d'Jongen iwwer si gesot. Wann d'Leit Ännerunge verstinn, distanzéiere se sech net vun hinnen als eppes onnéideg. Et ass wichteg fir en Ingenieur d'Racknummer ze wëssen wou de Server läit, d'Gréisst an d'Art vun der Scheif. Den Administrator muss als éischt verstoen wat fir eng Grupp vu Serveren dëst ass a wat den Effekt kéint sinn wann Dir eng Disk ersetzt.

D'Präsenz vu Felder an hiren Affichage ass bequem, awer et huet eis net vun der Noutwendegkeet gerett fir Chats ze benotzen. Fir dëst ze maachen, hu mir de Workflow missen änneren.

Virdrun war et esou:

Automatiséiert Disk Ersatz mat Ansible
Dëst ass wéi d'Ingenieuren haut weider schaffen wa se keng Administratorhëllef brauchen.

Dat éischt wat mir gemaach hunn war en neie Status aféieren Z'ënnersichen. Den Ticket ass an dësem Status wann den Ingenieur nach net decidéiert huet ob hien en Administrateur brauch oder net. Duerch dëse Status kann den Ingenieur den Ticket un den Administrateur transferéieren. Zousätzlech benotze mir dëse Status fir Ticketen ze markéieren wann eng Scheif muss ersat ginn, awer d'Disk selwer ass net op der Plaz. Dëst geschitt am Fall vun CDNs a Remote Siten.

Mir hunn och Status dobäi fäerdeg. Den Ticket gëtt op et transferéiert nodeems den Disk ersat gouf. Dat ass, alles ass scho gemaach, awer den HW / SW RAID ass um Server synchroniséiert. Dëst kann zimlech laang daueren.

Wann en Administrateur an der Aarbecht involvéiert ass, gëtt de Schema e bësse méi komplizéiert.

Automatiséiert Disk Ersatz mat Ansible
Aus Status Open Den Ticket ka souwuel vum Systemadministrator wéi och vum Ingenieur iwwersat ginn. Am Status Am gaangen den Administrator läscht d'Disk aus der Rotatioun, sou datt den Ingenieur se einfach erauszéie kann: schalt d'Beleuchtung un, demontéiert d'Disk, stoppt Uwendungen, jee no der spezifescher Grupp vu Serveren.

Den Ticket gëtt dann op Prett ze änneren: Dëst ass e Signal un den Ingenieur datt d'Disk erausgezunn ass. All Felder am Jira si scho ausgefëllt, den Ingenieur weess wéi eng Aart a Gréisst vun der Scheif. Dës Donnéeë ginn entweder automatesch am virege Status oder vum Administrateur aginn.

Nodeems Dir den Disk ersetzt, gëtt den Ticketstatus geännert Verännert. Et kontrolléiert datt de richtege Disk agefouert gouf, d'Partitionéierung ass gemaach, d'Applikatioun gëtt gestart an e puer Date Erhuelungsaufgaben ginn gestart. Den Ticket kann och op de Status transferéiert ginn fäerdeg, an dësem Fall bleift den Administrateur verantwortlech, well hien d'Disk an d'Rotatioun gesat huet. De komplette Diagramm gesäit esou aus.

Automatiséiert Disk Ersatz mat Ansible
Nei Felder bäizefügen huet eist Liewen vill méi einfach gemaach. D'Jongen hunn ugefaang mat strukturéierter Informatioun ze schaffen, et gouf kloer wat gemaach muss ginn a wéi eng Etapp. Prioritéite si vill méi relevant ginn, well se elo vum Administrateur festgeluecht ginn.

Et gëtt kee Besoin fir Chats. Natierlech kann den Administrateur dem Ingenieur schreiwen "dëst muss méi séier ersat ginn", oder "et ass schonn Owend, wäert Dir Zäit hunn et ze ersetzen?" Awer mir kommunizéieren net méi all Dag an Chats iwwer dës Themen.

Disks hunn ugefaang a Chargen ze änneren. Wann den Administrateur e bësse fréi op d'Aarbecht komm ass, huet hien fräi Zäit, an et ass nach näischt geschitt, kann hien eng Rei Servere fir Ersatz virbereeden: d'Felder ausfëllen, Disken aus der Rotatioun erofhuelen an d'Aufgab un en Ingenieur transferéieren. Den Ingenieur kënnt e bësse méi spéit an den Rechenzentrum, gesäit d'Aufgab, hëlt déi néideg Drive aus dem Lager an ersetzt se direkt. Als Resultat ass den Ersatzquote eropgaang.

Lektioune geléiert beim Bauen vum Workflow

  • Wann Dir eng Prozedur konstruéiert, musst Dir Informatioun aus verschiddene Quellen sammelen.
    E puer vun eisen Administrateuren woussten net datt den Ingenieur d'Disks selwer ännert. E puer Leit hu geduecht datt d'MD RAID Synchroniséierung vun Ingenieuren gehandhabt gouf, och wann e puer vun hinnen net emol Zougang hunn dat ze maachen. E puer féierend Ingenieuren hunn dat gemaach, awer net ëmmer well de Prozess néierens beschriwwe gouf.
  • D'Prozedur soll einfach a verständlech sinn.
    Et ass schwéier fir eng Persoun vill Schrëtt am Kapp ze halen. Déi wichtegst Nopeschlänner Statusen zu Jira sollen op den Haaptbildschierm gesat ginn. Dir kënnt se ëmbenennen, zum Beispill, mir ruffen Am Fortschrëtt Ready to change. An aner Statuse kënnen an engem Dropdown-Menü verstoppt ginn, sou datt se net en Aen sinn. Awer et ass besser net d'Leit ze limitéieren, hinnen d'Méiglechkeet ze ginn den Iwwergank ze maachen.
    Erklären de Wäert vun Innovatioun. Wann d'Leit verstinn, akzeptéiere se méi déi nei Prozedur. Et war ganz wichteg fir eis, datt d'Leit net de ganze Prozess duerchklicken, mä et verfollegen. Dunn hu mir d'Automatisatioun drop gebaut.
  • Waart, analyséieren, erausfannen.
    Et huet eis ongeféier ee Mount gedauert fir d'Prozedur, d'technesch Ëmsetzung, d'Versammlungen an d'Diskussiounen opzebauen. An d'Ëmsetzung dauert méi wéi dräi Méint. Ech hu gesinn wéi d'Leit lues a lues d'Innovatioun benotzen. Et war vill Negativitéit an de fréie Stadien. Mä et war komplett onofhängeg vun der Prozedur selwer a seng technesch Ëmsetzung. Zum Beispill, een Administrateur huet Jira net benotzt, mä de Jira Plugin am Confluence, an e puer Saachen waren him net verfügbar. Mir hunn him de Jira gewisen, an d'Produktivitéit vum Admin erhéicht souwuel fir allgemeng Aufgaben wéi och fir d'Disks z'ersetzen.

Automatiséierung vum Disk Ersatz

Mir hunn d'Automatiséierung vum Disk Ersatz e puer Mol ugepasst. Mir haten schonn Entwécklungen a Skripte, awer si hunn all entweder interaktiv oder manuell geschafft an erfuerdert Start. An eréischt no der Aféierung vun der neier Prozedur hu mer gemierkt, datt genee dat war, wat mir feelen.

Zënter elo ass eisen Ersatzprozess an Etappen opgedeelt, déi jidderee e spezifesche Performer an eng Lëscht vun Aktiounen huet, kënne mir d'Automatisatioun an Etappen aktivéieren, an net alles gläichzäiteg. Zum Beispill, déi einfachst Etapp - Ready (iwwerpréift RAID / Daten Synchroniséierung) kann einfach zu engem Bot delegéiert ginn. Wann de Bot e bësse geléiert huet, kënnt Dir him eng méi wichteg Aufgab ginn - d'Disk an d'Rotatioun setzen, asw.

Zoo Opstellungen

Ier mer iwwer de Bot schwätzen, loosst eis e kuerzen Ausfluch an eisen Zoo vun Installatiounen maachen. Éischtens, et ass wéinst der gigantescher Gréisst vun eiser Infrastruktur. Zweetens probéieren mir déi optimal Hardwarekonfiguratioun fir all Service ze wielen. Mir hunn iwwer 20 Hardware Razzia Modeller, meeschtens LSI an Adaptec, mä et ginn och HP an DELL vu verschiddene Versiounen. All RAID Controller huet säin eegene Management Utility. De Set vu Befehle an d'Emissioun vun hinnen kënne vu Versioun zu Versioun fir all RAID Controller ënnerscheeden. Wou HW-RAID net benotzt gëtt, kann mdraid benotzt ginn.

Mir maachen bal all nei Installatiounen ouni Disk Backup. Mir probéieren net méi Hardware a Software RAID ze benotzen, well mir eis Systemer um Datenzenterniveau backen, net Serveren. Awer natierlech ginn et vill legacy Serveren déi ënnerstëtzt musse ginn.

Iergendwou ginn d'Disken an RAID Controller op rau Geräter transferéiert, iergendwou ginn JBODs benotzt. Et gi Konfiguratiounen mat engem Systemdiskus am Server, a wann et ersat muss ginn, da musst Dir de Server mat der Installatioun vum OS an Uwendungen, vun de selwechte Versiounen, nei installéieren, dann Konfiguratiounsdateien derbäisetzen, Uwendungen starten. Et ginn och vill Servergruppen wou de Backup net um Disk Subsystem Niveau duerchgefouert gëtt, awer direkt an den Uwendungen selwer.

Am Ganzen hu mir iwwer 400 eenzegaarteg Servergruppen déi bal 100 verschidden Uwendungen lafen. Fir sou eng grouss Unzuel vun Optiounen ze decken, brauche mir e multifunktionnellt Automatisatiounsinstrument. Am léifsten mat engem einfachen DSL, sou datt net nëmmen déi Persoun, déi et geschriwwen huet, en ënnerstëtzen kann.

Mir hunn Ansible gewielt well et Agentlos ass: et war net néideg Infrastruktur virzebereeden, e séiere Start. Zousätzlech ass et am Python geschriwwen, deen als Standard am Team ugeholl gëtt.

Allgemeng Schema

Loosst eis den allgemenge Automatisatiounsschema kucken andeems een Tëschefall als Beispill benotzt. Zabbix erkennt datt d'sdb Scheif gescheitert ass, den Ausléiser hellt op, an en Ticket gëtt am Jira erstallt. Den Administrateur huet et gekuckt, gemierkt datt et keen Duplikat war an net e falscht Positiv, dat heescht, den Disk muss geännert ginn, an huet den Ticket op In progress transferéiert.

Automatiséiert Disk Ersatz mat Ansible
D'DiskoBot Applikatioun, geschriwwen am Python, freet periodesch Jira fir nei Ticketen. Et bemierkt datt en neien In progress Ticket opgetaucht ass, de entspriechende Fuedem gëtt ausgeléist, wat d'Spillbuch an Ansible lancéiert (dëst gëtt fir all Status an Jira gemaach). An dësem Fall gëtt Prepare2change gestart.

Ansible gëtt un den Host geschéckt, läscht d'Disk aus der Rotatioun a bericht de Status un d'Applikatioun iwwer Callbacks.

Automatiséiert Disk Ersatz mat Ansible
Baséierend op d'Resultater transferéiert de Bot automatesch den Ticket op Ready fir z'änneren. Den Ingenieur kritt eng Notifikatioun a geet fir den Disk z'änneren, duerno transferéiert hien den Ticket op Changed.

Automatiséiert Disk Ersatz mat Ansible
No dem Schema uewen beschriwwen, geet den Ticket zréck an de Bot, deen en anert Spillbuch lancéiert, an de Host geet an d'Disk an d'Rotatioun setzt. De Bot mécht den Ticket zou. Hour!

Automatiséiert Disk Ersatz mat Ansible
Loosst eis elo iwwer e puer Komponente vum System schwätzen.

Diskobot

Dës Applikatioun ass am Python geschriwwen. Et wielt Ticketen aus Jira no JQL. Ofhängeg vum Status vum Ticket, geet dee leschte bei den entspriechende Handler, deen am Tour d'Ansible Playbook entsprécht dem Status.

JQL an Ëmfro Intervalle sinn an der Applikatioun Configuratiounsdatei definéiert.

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

Zum Beispill, ënnert Ticketen am Am Fortschrëtt Status, sinn nëmmen déi mat der Disk Gréisst an den Apparat Numm Felder ausgefëllt ausgewielt. Apparatnumm ass den Numm vum Blockapparat deen néideg ass fir de Playbook auszeféieren. Disk Gréisst ass gebraucht fir datt den Ingenieur weess wéi eng Gréisst Disk gebraucht gëtt.

An ënnert Ticketen mat Ready Status, Ticketen mam Label dbot_ignore ginn ausgefiltert. Iwwregens benotze mir Jira Etiketten souwuel fir sou Filteren wéi fir Duplikat Ticketen ze markéieren a Statistiken ze sammelen.

Wann e Spillbuch klappt, gëtt d'Jira den dbot_failed Label zou, fir datt et spéider ka sortéiert ginn.

Interoperabilitéit mat Ansible

D'Applikatioun kommunizéiert mat Ansible via Ansible Python API. Fir playbook_executor passéiere mir den Dateinumm an eng Rei Variabelen. Dëst erlaabt Iech den Ansible Projet a Form vu reguläre yml Dateien ze halen, anstatt et am Python Code ze beschreiwen.

Och an Ansible, iwwer *extra_vars*, den Numm vum Blockapparat, de Status vum Ticket, souwéi d'Callback_url, déi den Emissiounsschlëssel enthält - et gëtt fir Callback an HTTP benotzt.

Fir all Start gëtt e temporäre Inventar generéiert, besteet aus engem Host an der Grupp zu där dësen Host gehéiert, sou datt group_vars applizéiert ginn.

Hei ass e Beispill vun enger Aufgab déi HTTP Callback implementéiert.

Mir kréien d'Resultat vum Ausféierung vun Playbooks mat Callaback (en). Si sinn vun zwou Zorte:

  • Ansible Callback Plugin, et gëtt Daten iwwer d'Resultater vun der Ausféierung vum Spillbuch. Et beschreift d'Aufgaben déi lancéiert goufen, erfollegräich oder net erfollegräich ofgeschloss. Dëse Callback gëtt genannt wann d'Spillbuch fäerdeg ass ze spillen.
  • HTTP Callback fir Informatioun ze kréien wärend e Playbook spillt. An der Ansible Aufgab maache mir eng POST/GET Ufro un eis Applikatioun aus.

Variablen ginn duerch HTTP-Callback(en) weidergeleet, déi während der Ausféierung vum Playbook definéiert goufen an déi mir wëllen a spéider Runen späicheren a benotzen. Mir schreiwen dës Donnéeën an sqlite.

Mir verloossen och Kommentaren an änneren den Ticketstatus iwwer HTTP-Ruff.

HTTP Réckruff

# 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

Wéi vill Aufgaben vum selwechten Typ, setzen mir et an enger separater gemeinsamer Datei an enthalen se wann néideg, fir et net stänneg an de Playbooks ze widderhuelen. Dëst beinhalt d'Callback_ url, déi den Thema Schlëssel an den Hostnumm enthält. Wann Ansible dës POST Ufro ausféiert, versteet de Bot datt et als Deel vun esou an esou engem Tëschefall koum.

An hei ass e Beispill aus dem Playbook, an deem mir eng Disk vun engem MD Apparat ausginn:

  # 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

Dës Aufgab transferéiert de Jira Ticket op de Status "Ready to Change" a füügt e Kommentar. Och d'mdam_data Variabel späichert eng Lëscht vun md Geräter, aus deenen d'Disk geläscht gouf, an parted_info späichert e Partition Dump vun ofgeschnidden.

Wann den Ingenieur eng nei Disk setzt, kënne mir dës Variablen benotzen fir de Partition Dump ze restauréieren, wéi och d'Disk an d'md-Geräter setzen, aus deenen se geläscht gouf.

Ansible Check Modus

Et war grujeleg d'Automatisatioun unzeschalten. Dofir hu mir beschloss all Playbooks am Modus ze lafen
dréchen lafen, an deem Ansible keng Aktiounen op de Serveren ausféiert, mee se nëmmen emuléiert.

Sou e Start gëtt duerch e separaten Callback-Modul gelaf, an d'Resultat vun der Playbook-Ausféierung gëtt an Jira als Kommentar gespäichert.

Automatiséiert Disk Ersatz mat Ansible

Als éischt huet dëst et méiglech gemaach d'Aarbecht vum Bot a Playbooks ze validéieren. Zweetens huet et d'Vertrauen vun den Administrateuren an de Bot erhéicht.

Wann mir d'Validatioun passéiert hunn a gemierkt datt Dir Ansible net nëmmen am Dréchent Run Modus lafe kann, hu mir e Run Diskobot Knäppchen an Jira gemaach fir datselwecht Spillbuch mat de selwechte Verännerlechen op de selwechte Host ze starten, awer am normale Modus.

Zousätzlech gëtt de Knäppche benotzt fir d'Playbook nei ze starten wann et klappt.

Playbooks Struktur

Ech hu scho gesot datt ofhängeg vum Status vum Jira Ticket, de Bot verschidde Playbooks lancéiert.

Éischtens, ass et vill méi einfach der Entrée ze organiséieren.
Zweetens, an e puer Fäll ass et einfach néideg.

Zum Beispill, wann Dir e System Disk ersetzt, musst Dir als éischt an den Deployment System goen, eng Aufgab erstellen, an no der korrekter Deployment gëtt de Server iwwer ssh zougänglech, an Dir kënnt d'Applikatioun drop ausrollen. Wa mir dat alles an engem Spillbuch gemaach hunn, da wier Ansible et net fäerdeg, well den Host net verfügbar ass.

Mir benotzen Ansible Rollen fir all Grupp vu Serveren. Hei kënnt Dir gesinn wéi d'Spillbuch(en) an engem vun hinnen organiséiert sinn.

Automatiséiert Disk Ersatz mat Ansible

Dëst ass bequem, well et ass direkt kloer wou déi Aufgaben sinn. Am main.yml, deen den Input fir d'Ansible Roll ass, kënne mir einfach duerch Ticketstatus oder allgemeng Aufgaben erfuerderlech fir jiddereen enthalen, zum Beispill d'Identifikatioun passéieren oder en Token kréien.

Enquête.yml

Leeft fir Ticketen am Enquête an Open Status. Déi wichtegst Saach fir dëst Spillbuch ass den Numm vum Blockapparat. Dës Informatioun ass net ëmmer verfügbar.

Fir et z'erreechen, analyséiere mir de Jira Resumé, de leschte Wäert vum Zabbix Ausléiser. Et kann den Numm vun der Spär Apparat enthalen - Gléck. Oder et kann e Mount Punkt enthalen, da musst Dir op de Server goen, et parséieren an déi erfuerderlech Scheif berechnen. Den Ausléiser kann och eng scsi Adress oder eng aner Informatioun iwwerdroen. Mä et geschitt och, datt et keng Hiweiser ginn, an Dir musst analyséieren.

Nodeems mir den Numm vum Blockapparat erausfonnt hunn, sammele mir Informatioun iwwer d'Art an d'Gréisst vun der Scheif dovunner fir d'Felder am Jira auszefëllen. Mir läschen och Informatioun iwwer de Verkeefer, Modell, Firmware, ID, SMART, a setzen all dëst an e Kommentar am Jira Ticket. Den Administrateur an den Ingenieur brauchen net méi no dësen Donnéeën ze sichen. 🙂

Automatiséiert Disk Ersatz mat Ansible

preparéieren2change.yml

Ewechzehuelen der Scheif aus Rotatioun, virbereeden fir Ersatz. Déi schwéierst a wichtegst Etapp. Hei kënnt Dir d'Applikatioun stoppen wann se net sollt gestoppt ginn. Oder huelt eng Scheif eraus déi net genuch Repliken huet, an doduerch en Effekt op d'Benotzer hunn, e puer Daten verléieren. Hei hu mir déi meescht Kontrollen an Notifikatiounen am Chat.

Am einfachsten Fall schwätze mir iwwer d'Ewechhuele vun enger Disk aus engem HW / MD RAID.

A méi komplexe Situatiounen (an eise Späichersystemer), wann de Backup um Applikatiounsniveau gemaach gëtt, musst Dir op d'Applikatioun iwwer d'API goen, d'Diskoutput mellen, deaktivéieren an d'Erhuelung starten.

Mir migréieren elo masseg op Wolleken, a wann de Server Cloud-baséiert ass, da rifft Diskobot d'Cloud API, seet datt et mat dësem Minion funktionnéiert - de Server deen Container leeft - a freet "all Container vun dësem Minion migréieren." A gläichzäiteg schalt d'Backlight vun der Scheif un, sou datt den Ingenieur direkt ka gesinn, wéi ee muss erausgezunn ginn.

geännert.yml

Nodeems mir en Disk ersat hunn, kontrolléiere mir als éischt seng Disponibilitéit.

Ingenieuren installéieren net ëmmer nei Drive, also hu mir e Scheck fir SMART Wäerter bäigefüügt déi eis zefridden stellen.

Wéi eng Attributer kucke mir?Ëmverdeelt Secteuren Zuel (5) < 100
Aktuelle Pending Secteur Zuel (107) == 0

Wann den Drive den Test feelt, gëtt den Ingenieur informéiert fir et erëm z'ersetzen. Wann alles an der Rei ass, schalt d'Beleuchtung aus, d'Markéierunge ginn ugewannt an d'Disk gëtt an d'Rotatioun gesat.

prett.yml

Am einfachsten Fall: HW / SW Razzia Synchroniséierung kontrolléieren oder Daten Synchroniséierung an der Applikatioun fäerdeg.

Applikatioun API

Ech hunn e puer Mol erwähnt datt de Bot dacks Zougang zu Applikatioun APIen huet. Natierlech haten net all Applikatiounen déi néideg Methoden, sou datt se misse geännert ginn. Hei sinn déi wichtegst Methoden déi mir benotzen:

  • Status. Status vun engem Stärekoup oder Scheif fir ze verstoen ob et mat geschafft ka ginn;
  • Start / stoppen. Disk Aktivéierung / Deaktivéierung;
  • Migréieren / restauréieren. Datemigratioun an Erhuelung während an nom Ersatz.

Lektioune geléiert vun Ansible

Ech Léift Ansible wierklech. Awer dacks, wann ech verschidde Opensource Projete kucken a kucken wéi d'Leit Playbooks schreiwen, ginn ech e bëssen Angscht. Komplex logesch Interweaving vu wann / Loop, Mangel u Flexibilitéit an Idempotenz wéinst heefeg Notzung vu Shell / Kommando.

Mir hu beschloss alles sou vill wéi méiglech ze vereinfachen, andeems mir de Virdeel vun Ansible profitéieren - Modularitéit. Um héchsten Niveau ginn et Spillbicher; si kënne vun all Administrateur geschriwwe ginn, Drëtt-Partei Entwéckler deen e bëssen Ansible kennt.

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

Wann e puer Logik schwéier ass a Spillbicher ëmzesetzen, réckelen mir et an en Ansible Modul oder Filter. Skripte kënnen a Python oder all aner Sprooch geschriwwe ginn.

Si sinn einfach a séier ze schreiwen. Zum Beispill, d'Disk Géigeliicht Modul, e Beispill vun deem ass uewen gewisen, besteet aus 265 Linnen.

Automatiséiert Disk Ersatz mat Ansible

Um ënneschten Niveau ass d'Bibliothéik. Fir dëse Projet hu mir eng separat Applikatioun geschriwwen, eng Aart Abstraktioun iwwer Hardware a Software RAIDs déi entspriechend Ufroe maachen.

Automatiséiert Disk Ersatz mat Ansible

Dem Ansible seng gréisste Stäerkten sinn seng Einfachheet a kloer Spillbicher. Ech gleewen datt Dir dëst benotze musst an net grujeleg Yaml Dateien generéieren an eng riesech Unzuel u Konditiounen, Shellcode a Loops.

Wann Dir eis Erfahrung mat der Ansible API widderhuelen wëllt, haalt zwou Saachen am Kapp:

  • Playbook_executor a Playbooks am Allgemengen kënnen net en Timeout ginn. Et gëtt en Timeout op der ssh Sessioun, awer et gëtt keen Timeout am Playbook. Wa mir probéieren eng Disk ze demontéieren déi net méi am System existéiert, wäert d'Playbook endlos lafen, also hu mir säi Start an engem separaten Wrapper missen wéckelen an et mat engem Timeout ëmbréngen.
  • Ansible leeft op forked Prozesser, sou datt seng API net thread sécher ass. Mir lafen all eis Playbooks Single-threaded.

Als Resultat konnte mir den Ersatz vun ongeféier 80% vun Disken automatiséieren. Insgesamt ass den Ersatztaux verduebelt. Haut kuckt den Administrateur just den Tëschefall an entscheet ob den Disk muss geännert ginn oder net, a mécht dann ee Klick.

Awer elo fänke mer un en anere Problem: e puer nei Administrateuren wëssen net wéi d'Drives änneren. 🙂

Source: will.com

Setzt e Commentaire