Чӣ тавр тафтиш кардани дискҳо бо fio барои иҷрои кофӣ барои etcd

Шарҳ. тарҷума.: Ин мақола натиҷаи тадқиқоти мини-тадқиқотӣ мебошад, ки аз ҷониби муҳандисони IBM Cloud дар ҷустуҷӯи роҳи ҳалли мушкилоти воқеии марбут ба фаъолияти пойгоҳи додаҳои etcd гузаронида шудааст. Чунин вазифа барои мо хам дахл дошт, вале рафти фикру рафтори муаллифон дар доираи васеътар шояд шавковар бошад.

Чӣ тавр тафтиш кардани дискҳо бо fio барои иҷрои кофӣ барои etcd

Хулосаи мухтасари тамоми мақола: fio ва ғайра

Фаъолияти кластери etcd аз суръати нигаҳдории асосӣ вобаста аст. Барои мониторинги иҷроиш, ва ғайра ченакҳои гуногуни Prometheus содир мекунад. Яке аз онхост wal_fsync_duration_seconds. Дар ҳуҷҷатҳои etcd гуфта мешавад, он нигаҳдорӣ метавонад ба қадри кофӣ зуд ҳисобида шавад, агар фоизи 99-уми ин метрика аз 10 мс зиёд набошад...

Агар шумо дар бораи таъсиси кластери etcd дар мошинаҳои Linux қарор дошта бошед ва мехоҳед бисанҷед, ки оё дискҳои нигаҳдорӣ (масалан, SSDs) ба қадри кофӣ зуданд, мо тавсия медиҳем, ки озмоишгари машҳури I/O-ро истифода барем. fio. Танҳо фармони зеринро иҷро кунед (директор test-data бояд дар қисмати насбшудаи гардонандаи озмоишшаванда ҷойгир бошад):

fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest

Танҳо дидани натиҷа ва санҷидани он ки оё он ба фоизи 99-ум мувофиқат мекунад, боқӣ мемонад fdatasync дар 10 мс. Агар ин тавр бошад, пас гардонандаи шумо кофӣ аст. Дар ин ҷо як баромади намунавӣ аст:

fsync/fdatasync/sync_file_range:
  sync (usec): min=534, max=15766, avg=1273.08, stdev=1084.70
  sync percentiles (usec):
   | 1.00th=[ 553], 5.00th=[ 578], 10.00th=[ 594], 20.00th=[ 627],
   | 30.00th=[ 709], 40.00th=[ 750], 50.00th=[ 783], 60.00th=[ 1549],
   | 70.00th=[ 1729], 80.00th=[ 1991], 90.00th=[ 2180], 95.00th=[ 2278],
   | 99.00th=[ 2376], 99.50th=[ 9634], 99.90th=[15795], 99.95th=[15795],
   | 99.99th=[15795]

Якчанд қайдҳо:

  1. Дар мисоли боло мо параметрҳоро танзим кардем --size и --bs барои як ҳолати мушаххас. Барои ба даст овардани натиҷаҳои пурмазмун аз fio, арзишҳоеро муайян кунед, ки барои ҳолати истифодаи шумо мувофиқанд. Чӣ тавр интихоб кардани онҳо дар поён муҳокима карда мешавад.
  2. Танҳо дар давоми санҷиш fio зерсистемаи дискро бор мекунад. Дар ҳаёти воқеӣ, эҳтимол дорад, ки равандҳои дигар (ғайр аз онҳое, ки бо wal_fsync_duration_seconds). Чунин сарбории иловагӣ метавонад боиси афзоиши дар wal_fsync_duration_seconds. Ба ибораи дигар, агар фоизи 99-ум аз санҷиш бо fio, танҳо каме камтар аз 10 ms, имкони хубе вуҷуд дорад, ки иҷрои нигоҳдорӣ нокифоя аст.
  3. Барои санҷиш ба шумо версия лозим аст fio на камтар аз 3.5, зеро версияҳои кӯҳна натиҷаҳоро ҷамъ намекунанд fdatasync дар шакли фоизҳо.
  4. Хулосаи дар боло овардашуда танҳо як порчаи хурди хулосаи умумӣ аст fio.

Тафсилот дар бораи fio ва ғайра

Чанд сухан дар бораи WALs ва ғайра

Одатан, пойгоҳи додаҳо истифода мебаранд бақайдгирии фаъол (навиштани пешакӣ, WAL). ва ғайра ин низ дахл дорад. Муҳокимаи WAL аз доираи ин мақола берун аст, аммо барои мақсадҳои мо ин аст он чизе ки шумо бояд бидонед: Ҳар як узви кластери etcd WAL-ро дар нигаҳдории доимӣ нигоҳ медорад. etcd пеш аз иҷрои онҳо ба WAL баъзе амалиёти мағозаи арзишҳои калидӣ (ба монанди навсозӣ) менависад. Агар гиреҳ суқут кунад ва дар байни аксҳо аз нав оғоз шавад, ва ғайра метавонад транзаксияҳои аз лаҳзаи акси қаблӣ дар асоси мундариҷаи WAL анҷомшударо барқарор кунад.

Ҳамин тариқ, ҳар боре, ки муштарӣ ба мағозаи КВ калид илова мекунад ё арзиши калиди мавҷударо навсозӣ мекунад, ва ғайра тавсифи амалиётро ба WAL илова мекунад, ки ин файли муқаррарӣ дар нигаҳдории доимӣ мебошад. etcd БОЯД 100% боварӣ дошта бошад, ки вуруди WAL воқеан пеш аз идома захира шудааст. Барои ноил шудан ба ин дар Linux, истифодаи занги система кофӣ нест write, зеро худи амалиёти навиштан ба воситаи физикӣ метавонад ба таъхир афтад. Масалан, Linux метавонад сабти WAL-ро дар кэши ядро ​​​​дар хотира (масалан, кэши саҳифа) барои муддате нигоҳ дорад. Барои боварӣ ҳосил кардани он, ки маълумот ба ВАО навишта шудааст, пас аз навиштан занги система бояд даъват карда шавад fdatasync - ин маҳз ҳамон чизест, ки etcd мекунад (чунон ки дар баромади зерин дида мешавад strace; Ин ҷо 8 - Идоракунии файли WAL):

21:23:09.894875 lseek(8, 0, SEEK_CUR)   = 12808 <0.000012>
21:23:09.894911 write(8, ".20210220361223255266632$1020103026"34"rn3fo"..., 2296) = 2296 <0.000130>
21:23:09.895041 fdatasync(8)            = 0 <0.008314>

Мутаассифона, навиштан ба нигаҳдории доимӣ каме вақт мегирад. Вақти тӯлонӣ барои анҷом додани занги fdatasync метавонад ба иҷрои etcd таъсир расонад. Дар ҳуҷҷатҳо барои анбор нишон дода шудаастки барои ичрои кофй зарур аст, ки 99 фоизи давомнокии хамаи зангхо fdatasync ҳангоми навиштан ба файл, WAL камтар аз 10 мс буд. Дигар ченакҳои марбут ба нигоҳдорӣ вуҷуд доранд, аммо ин мақола ба ин тамаркуз хоҳад кард.

Арзёбии нигоҳдорӣ бо истифода аз fio

Шумо метавонед арзёбӣ кунед, ки оё анбори муайян барои истифода бо etcd бо истифода аз утилита мувофиқ аст fio - як озмоишгари машҳури I/O. Дар хотир доред, ки диски воридотӣ/барорӣ метавонад бо роҳҳои гуногун сурат гирад: синхронизатсия/синхронизатсия, бисёр синфҳои гуногуни зангҳои система ва ғайра. Тарафи дигари танга ин аст fio истифода бурдан нихоят душвор аст. Утилита параметрҳои зиёде дорад ва омезиши гуногуни арзишҳои онҳо ба натиҷаҳои комилан дигар оварда мерасонад. Барои гирифтани баҳои оқилонаи etcd, шумо бояд боварӣ ҳосил кунед, ки сарбории навиштани аз ҷониби fio тавлидшуда то ҳадди имкон ба бори навиштани etcd ба файлҳои WAL шабеҳ бошад:

  • Ин маънои онро дорад, ки тавлидшуда fio сарбории кор бояд ҳадди аққал як қатор навиштаҷоти пайдарпай ба файл бошад, ки дар он ҳар як амалиёти навиштан аз занги система иборат аст writeдар минбаъда fdatasync.
  • Барои фаъол кардани сабти пайдарпай, шумо бояд парчамро муайян кунед --rw=write.
  • он fio бо истифода аз зангҳо навишт write (ва на дигар зангҳои система - масалан, pwrite), парчамро истифода баред --ioengine=sync.
  • Дар охир, парчам --fdatasync=1 кафолат медихад, ки дар паси хар як write бояд fdatasync.
  • Ду параметри дигар дар мисоли мо: --size и --bs - вобаста ба ҳолати мушаххаси истифода метавонад фарқ кунад. Боби оянда чӣ гуна танзим кардани онҳоро тавсиф мекунад.

Чаро мо fio-ро интихоб кардем ва чӣ тавр мо чӣ тавр сохтани онро ёд гирифтем

Ин ёддошт аз як ҳодисаи воқеие, ки мо дучор шуда будем, омадааст. Мо дар Kubernetes v1.13 кластер бо мониторинг дар Prometheus доштем. Дискҳои ҳолати сахт ҳамчун анбор барои etcd v3.2.24 истифода мешуданд. ченакҳои etcd таъхирҳои хеле баландро нишон доданд fdatasync, ҳатто вақте ки кластер бекор буд. Мо ин ченакҳоро хеле шубҳанок донистем ва намедонем, ки онҳо маҳз чиро намояндагӣ мекунанд. Илова бар ин, кластер аз мошинҳои маҷозӣ иборат буд, бинобар ин гуфтан ғайриимкон буд, ки таъхир ба виртуализатсия вобаста аст ё SSD-ҳо гунаҳкоранд.

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

Барои ин ду масъаларо ҳал кардан лозим буд:

  • Аввалан, бори I/O, ки etcd ҳангоми навиштан ба файлҳои WAL тавлид мекунад, чӣ гуна аст? Кадом зангҳои системавӣ истифода мешаванд? Андозаи блоки навиштан чӣ гуна аст?
  • Дуюм, биёед бигӯем, ки мо ба саволҳои боло ҷавоб дорем. Чӣ тавр дубора тавлиди бори мувофиқ бо fio? Дар поёни кор fio — воситаи хеле фасеҳ бо параметрҳои зиёд (инро тафтиш кардан осон аст, масалан, дар ин ҷо — тахминан. тарҷума.).

Мо ҳарду масъаларо бо истифода аз равиши як фармон асоси ҳал кардем lsof и strace:

  • Бо кӯмаки lsof Шумо метавонед ҳамаи тавсифи файлҳои аз ҷониби раванд истифодашаванда ва инчунин файлҳое, ки ба онҳо ишора мекунанд, дидан кунед.
  • Бо кӯмаки strace шумо метавонед раванди аллакай иҷрошавандаро таҳлил кунед ё равандро иҷро кунед ва онро мушоҳида кунед. Фармон ҳамаи зангҳои системаро, ки тавассути ин раванд анҷом дода шудаанд ва ихтиёран, наслҳои онро нишон медиҳад. Охирин барои равандҳо муҳим аст ва ғайра яке аз чунин равандҳост.

Аввалин коре, ки мо кардем, истифода бурдан буд strace барои омӯхтани сервери etcd дар кластери Kubernetes дар ҳоле ки он бекор буд.

Ҳамин тариқ, маълум шуд, ки блокҳои навиштан дар WAL хеле зич гурӯҳбандӣ шудаанд, ки аксарияти онҳо дар ҳудуди 2200-2400 байт мебошанд. Ин аст, ки чаро фармон дар аввали ин мақола парчамро истифода мебарад --bs=2300 (bs - андоза бо байтҳои ҳар як блоки сабт дар fio).

Лутфан таваҷҷӯҳ намоед, ки андозаи блокҳои навиштан ва ғайра вобаста ба версия, ҷойгиркунӣ, арзишҳои параметр ва ғайра метавонанд фарқ кунанд. - ин ба давомнокӣ таъсир мерасонад fdatasync. Агар шумо як ҳолати истифодаи шабеҳ дошта бошед, бо он таҳлил кунед strace равандҳои etcd шумо барои гирифтани арзишҳои навтарин.

Сипас, барои ба даст овардани фаҳмиши дақиқ ва ҳамаҷонибаи он, ки чӣ тавр etcd бо системаи файлӣ кор мекунад, мо онро аз зер иҷро кардем. strace бо байракхо -ffttT. Ин имкон дод, ки равандҳои кӯдак сабт карда шаванд ва натиҷаи ҳар як ба файли алоҳида навишта шаванд. Илова бар ин, дар бораи лаҳзаи оғоз ва давомнокии ҳар як занги система маълумоти муфассал гирифта шуд.

Мо инчунин фармонро истифода мебарем lsofбарои тасдиқи фаҳмиши шумо дар бораи баромад strace ки кадом дескриптори файл бо кадом максад истифода шудааст. Натичаи хамин буд strace, монанд ба яке аз боло. Манипуляцияҳои оморӣ бо вақти ҳамоҳангсозӣ тасдиқ карданд, ки метрика wal_fsync_duration_seconds аз etcd зангҳои мувофиқат мекунад fdatasync бо тавсифи файли WAL.

Барои тавлиди истифода fio сарбории кор, ки ба сарбории аз etcd монанд аст, ҳуҷҷатҳои коммуналӣ омӯхта шуданд ва параметрҳои барои вазифаи мо мувофиқ интихоб карда шуданд. Мо боварӣ ҳосил кардем, ки зангҳои дурусти система ҷалб карда шудаанд ва давомнокии онҳоро тавассути иҷро тасдиқ кардем fio аз он strace (чунон ки дар мавриди ғайра анҷом дода шуд).

Ба муайян кардани арзиши параметр диккати махсус дода шуд --size. Он сарбории умумии I/O-ро, ки аз ҷониби утилитаи fio тавлид шудааст, ифода мекунад. Дар мо бошад, ин микдори умумии байтест, ки ба васоити ахбори омма навишта шудааст. Он бевосита ба шумораи зангҳо мутаносиб аст write (ва fdatasync). Барои муайян bs шумораи зангҳо fdatasync баробар аст size / bs.

Азбаски мо ба фоиз таваҷҷӯҳ доштем, мо кӯшиш кардем, ки шумораи намунаҳо барои аҳамияти оморӣ кофӣ калон бошанд. Ва онҳо қарор доданд, ки 10^4 (ки ба андозаи 22 МБ мувофиқат мекунад) кофӣ хоҳад буд. Арзишҳои параметрҳои хурдтар --size садои бештаре ба вуҷуд овард (масалан, зангҳо fdatasync, ки назар ба мукаррарй хеле дарозтар мегирад ва ба 99 фоиз таъсир мерасонад).

Аз худат вобаста аст

Дар мақола нишон дода шудааст, ки чӣ тавр истифода бурдани fio шумо метавонед арзёбӣ кунед, ки васоити ахбори омма барои истифода бо etcd кофӣ зуд аст ё не. Акнун ба шумо вобаста аст! Шумо метавонед мошинҳои виртуалиро бо нигаҳдории SSD дар хидмат омӯзед IBM Cloud.

PS аз тарҷумон

Бо мисолхои тайёри истифода fio барои халли дигар масъалахо дар хуччатхо ё бевосита ба анборҳои лоиҳа (нисбат ба он ки дар ҳуҷҷатҳо зикр шудаанд, шумораи зиёди онҳо вуҷуд доранд).

PPS аз тарҷумон

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ