Cerddorfa ar gyfer MySQL: pam na allwch adeiladu prosiect sy'n goddef namau hebddo

Dechreuodd unrhyw brosiect mawr gyda chwpl o weinyddion. Ar y dechrau roedd un gweinydd DB, yna ychwanegwyd caethweision ato i raddfa'r darlleniad. Ac yna - stopiwch! Mae un meistr, ond mae llawer o gaethweision; os bydd un o'r caethweision yn gadael, yna bydd popeth yn iawn, ond os bydd y meistr yn gadael, bydd yn ddrwg: amser segur, mae gweinyddwyr yn ceisio codi'r gweinydd. Beth i'w wneud? Archebwch feistr. Ysgrifennodd fy nghydweithiwr Pavel am hyn eisoes erthygl, Ni fyddaf yn ei ailadrodd. Yn lle hynny, byddaf yn dweud wrthych pam yn bendant mae angen Cerddorfa arnoch ar gyfer MySQL!

Gadewch i ni ddechrau gyda'r prif gwestiwn: "Sut byddwn ni'n newid y cod i beiriant newydd pan fydd y meistr yn gadael?"

  • Rwy'n hoffi'r cynllun gyda VIP (Virtual IP) fwyaf, byddwn yn siarad amdano isod. Dyma'r symlaf a'r mwyaf amlwg, er bod ganddo gyfyngiad amlwg: rhaid i'r meistr y byddwn yn ei gadw fod yn y segment L2 gyda'r peiriant newydd, hynny yw, gallwn anghofio am yr ail DC. Ac, mewn ffordd gyfeillgar, os dilynwch y rheol bod L2 fawr yn ddrwg, oherwydd dim ond fesul rac yw L2, ac mae L3 rhwng y raciau, ac mae gan gynllun o'r fath hyd yn oed mwy o gyfyngiadau.
  • Gallwch chi ysgrifennu enw DNS yn y cod a'i ddatrys trwy /etc/hosts. Mewn gwirionedd, ni fydd unrhyw benderfyniad. Mantais y cynllun: nid oes cyfyngiad ar nodwedd y dull cyntaf, hynny yw, mae'n bosibl trefnu traws-DC. Ond yna mae'r cwestiwn amlwg yn codi: pa mor gyflym allwn ni gyflwyno'r newid i /etc/hosts trwy Puppet-Ansible?
  • Gallwch chi newid yr ail ddull ychydig: gosod caching DNS ar bob gweinydd gwe, lle bydd y cod yn mynd i'r brif gronfa ddata. Gallwch chi osod TTL 60 ar gyfer y cofnod hwn yn DNS. Mae'n ymddangos, os caiff ei weithredu'n gywir, mae'r dull yn dda.
  • Cynllun gyda darganfod gwasanaeth, yn awgrymu defnyddio Conswl ac ati.
  • Opsiwn diddorol gyda ProxySQL. Mae angen i chi gyfeirio'r holl draffig i MySQL trwy ProxySQL; Gall ProxySQL ei hun benderfynu pwy yw'r meistr. Gyda llaw, gallwch ddarllen am un o'r opsiynau ar gyfer defnyddio'r cynnyrch hwn yn fy Erthygl.

Gweithredodd awdur Orchestrator, yn gweithio yn Github, y cynllun cyntaf gyda VIP yn gyntaf, ac yna ei drosi i gynllun gyda chonswl.

Cynllun seilwaith nodweddiadol:

Cerddorfa ar gyfer MySQL: pam na allwch adeiladu prosiect sy'n goddef namau hebddo
Disgrifiaf ar unwaith y sefyllfaoedd amlwg y mae angen eu hystyried:

  • Ni ddylai'r cyfeiriad VIP gael ei gofrestru yn y ffurfwedd ar unrhyw un o'r gweinyddwyr. Gadewch i ni ddychmygu sefyllfa: y meistr ailgychwyn, a thra roedd yn llwytho, Orchestrator aeth i'r modd failover a gwneud un o'r caethweision yn feistr; yna cododd yr hen feistr, a nawr mae'r VIP ar ddau gar. Mae hyn yn ddrwg.
  • Ar gyfer y cerddor, bydd angen i chi ysgrifennu sgript ar gyfer galw'r hen feistr a'r meistr newydd. Ar yr hen feistr mae angen rhedeg ifdown, ac ar y meistr newydd - ifup vip. Byddai'n braf cynnwys yn y sgript hon hefyd, os bydd methiant, bod y porthladd ar switsh yr hen feistr yn syml wedi'i ddiffodd er mwyn osgoi unrhyw ymennydd hollt.
  • Ar Γ΄l i'r Cerddorfa alw'ch sgript i gael gwared ar y VIP yn gyntaf a / neu ddiffodd y porthladd ar y switsh, ac yna galw'r sgript codi VIP ar y meistr newydd, peidiwch ag anghofio defnyddio'r gorchymyn arping i ddweud wrth bawb bod y VIP newydd nawr yma.
  • Dylai pob caethwas fod wedi read_only=1, a chyn gynted ag y byddwch yn dyrchafu'r caethwas i'r meistr, dylai fod wedi read_only=0.
  • Peidiwch ag anghofio y gall unrhyw gaethwas yr ydym wedi'i ddewis ar gyfer hyn ddod yn feistr (Mae gan Gerddorfa fecanwaith dewis cyfan ar gyfer pa gaethwas i'w ystyried fel ymgeisydd ar gyfer meistr newydd yn y lle cyntaf, pa un yn yr ail le, a pha gaethwas ddylai peidio Γ’ chael ei ddewis o gwbl dan unrhyw amgylchiadau meistr). Os daw'r caethwas yn feistr, yna bydd llwyth y caethwas yn aros arno a bydd llwyth y meistr yn cael ei ychwanegu, rhaid cymryd hyn i ystyriaeth.

Pam fod angen Cerddorfa arnoch chi os nad oes gennych chi un?

  • Mae gan y cerddor ryngwyneb graffigol hawdd ei ddefnyddio sy'n dangos y topoleg gyfan (gweler y llun isod).
  • Gall cerddorfa olrhain pa gaethweision sydd ar ei hΓ΄l hi, a lle mae atgynhyrchu wedi torri i lawr yn gyffredinol (mae gennym sgriptiau ynghlwm wrth Orchestrator ar gyfer anfon SMS).
  • Cerddorfa yn dweud wrthych pa gaethweision sydd Γ’ gwall GTID.

Rhyngwyneb cerddorfaol:

Cerddorfa ar gyfer MySQL: pam na allwch adeiladu prosiect sy'n goddef namau hebddo
Beth yw cyfeiliornad GTID?

Mae dau brif ofyniad i Gerddorfa weithio:

  • Mae'n angenrheidiol bod ffug GTID wedi'i alluogi ar bob peiriant yn y clwstwr MySQL; rydym wedi galluogi GTID.
  • Mae'n angenrheidiol bod un math o binlogs ym mhobman, gallwch ddefnyddio datganiad. Cawsom gyfluniad yn yr hwn yr oedd gan y meistr a'r rhan fwyaf o gaethweision Row, ac yr oedd dau yn hanesyddol yn aros yn y modd Cymysg. O ganlyniad, nid oedd Cerddorfa am gysylltu'r caethweision hyn Γ’'r meistr newydd.

Cofiwch mai'r peth pwysicaf mewn caethwas cynhyrchu yw ei gysondeb Γ’'r meistr! Os oes gennych chi Global Transaction ID (GTID) wedi'i alluogi ar eich meistr a'ch caethwas, yna gallwch ddefnyddio'r swyddogaeth gtid_subset i ddarganfod a yw'r un ceisiadau am newidiadau data wedi'u gweithredu ar y peiriannau hyn mewn gwirionedd. Gallwch ddarllen mwy am hyn yma.

Felly, mae Cerddorfa yn dangos i chi trwy'r gwall GTID bod trafodion ar y caethwas nad ydynt ar y meistr. Pam fod hyn yn digwydd?

  • Read_only=1 heb ei alluogi ar y caethwas, mae rhywun wedi cysylltu a chwblhau cais i newid data.
  • Super_read_only=1 heb ei alluogi ar y caethwas, yna aeth y gweinyddwr, ar Γ΄l drysu'r gweinydd, i mewn a gweithredu'r cais yno.
  • Os gwnaethoch ystyried y ddau bwynt blaenorol, yna mae un tric arall: yn MySQL, mae cais i fflysio binlogs hefyd yn mynd i'r binlog, felly ar y fflysio cyntaf, bydd cyfeiliornad GTID yn ymddangos ar y meistr a'r holl gaethweision. Sut i osgoi hyn? Cyflwynodd Perona-5.7.25-28 y gosodiad binlog_skip_flush_commands=1, sy'n gwahardd ysgrifennu fflysio i foncyffion bin. Mae un sefydledig ar wefan mysql.com byg.

Gadewch i mi grynhoi pob un o'r uchod. Os nad ydych am ddefnyddio'r Orchestrator yn y modd methu eto, rhowch ef yn y modd arsylwi. Yna bydd gennych chi bob amser o flaen eich llygaid fap o ryngweithio peiriannau MySQL a gwybodaeth weledol am ba fath o ddyblygiad sydd ar bob peiriant, p'un a yw'r caethweision ar ei hΓ΄l hi, ac yn bwysicaf oll, pa mor gyson ydyn nhw Γ’'r meistr!

Y cwestiwn amlwg yw: β€œSut ddylai Cerddorfa weithio?” Rhaid iddo ddewis meistr newydd o'r caethweision presennol, ac yna ailgysylltu pob caethwas ag ef (dyma beth mae angen GTID ar ei gyfer; os ydych chi'n defnyddio'r hen fecanwaith gyda binlog_name a binlog_pos, yna newid caethwas o'r meistr presennol i un newydd yn syml amhosibl!). Cyn i ni gael Cerddorfa, roedd yn rhaid i mi wneud hyn i gyd Γ’ llaw ar un adeg. Roedd yr hen feistr yn hongian oherwydd rheolwr bygi Adaptec; roedd ganddo tua 10 o gaethweision. Roedd angen i mi drosglwyddo VIP o'r meistr i un o'r caethweision ac ailgysylltu'r holl gaethweision eraill iddo. Faint o gonsolau oedd yn rhaid i mi eu hagor, faint o orchmynion cydamserol a gymerais i mewn ... roedd yn rhaid i mi aros tan 3 am, tynnu'r llwyth o'r holl gaethweision ac eithrio dau, gwnewch y peiriant cyntaf allan o ddau feistr, atodwch yr ail beiriant ar unwaith iddo, felly atodwch yr holl gaethweision eraill i'r meistr newydd a dychwelwch y llwyth. Ar y cyfan, ofnadwy ...

Sut mae Cerddorfa'n gweithio pan fydd yn mynd i'r modd methu? Mae hyn yn cael ei ddangos yn haws gan enghraifft o sefyllfa lle rydym am wneud meistr yn beiriant mwy pwerus, mwy modern nag sydd gennym yn awr.

Cerddorfa ar gyfer MySQL: pam na allwch adeiladu prosiect sy'n goddef namau hebddo
Mae'r ffigur yn dangos canol y broses. Beth sydd wedi'i wneud yn barod hyd at y pwynt hwn? Dywedasom ein bod am wneud rhywfaint o gaethwas yn feistr newydd, dechreuodd Orchestrator ailgysylltu pob caethwas arall ag ef, gyda'r meistr newydd yn gweithredu fel peiriant cludo. Gyda'r cynllun hwn, nid oes unrhyw wallau, mae pob caethwas yn gweithio, mae'r Cerddorfa'n tynnu'r VIP o'r hen feistr, yn ei drosglwyddo i'r un newydd, yn gwneud read_only=0 ac yn anghofio am yr hen feistr. I gyd! Amser segur ein gwasanaeth yw'r amser trosglwyddo VIP, sef 2-3 eiliad.

Dyna i gyd am heddiw, diolch i bawb. Bydd ail erthygl am Orchestrator yn fuan. Yn y ffilm Sofietaidd enwog β€œGarage,” dywedodd un cymeriad, β€œFyddwn i ddim yn mynd ymlaen i ragchwilio gydag ef!” Felly, Gerddorfa, byddwn yn mynd gyda chi ar ragchwilio!

Ffynhonnell: hab.com

Ychwanegu sylw