Vitès depo apwopriye pou etcd? Ann mande fio

Vitès depo apwopriye pou etcd? Ann mande fio

Yon ti istwa sou fio ak etcd

Pèfòmans Cluster elatriye lajman depann sou pèfòmans nan depo li yo. etcd ekspòtasyon kèk mesures pou Prometheuspou bay enfòmasyon sou pèfòmans depo vle. Pou egzanp, metrik wal_fsync_duration_seconds. Dokiman an pou etcd di: Pou yo konsidere depo ase vit, 99yèm percentile metrik sa a dwe mwens pase 10ms. Si w ap planifye pou kouri yon gwoup etcd sou machin Linux epi ou vle evalye si depo w la ase vit (egzanp SSD), ou ka itilize fio se yon zouti popilè pou teste operasyon I/O. Kouri lòd sa a, kote tès-done se anyè ki anba pwen mòn depo a:

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

Ou jis bezwen gade rezilta yo epi tcheke ke percentile 99yèm nan dire a fdatasync mwens pase 10 ms. Si se konsa, ou gen depo rezonab rapid. Men yon egzanp rezilta yo:

  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]

Nòt

  • Nou te pèsonalize opsyon --size ak --bs pou senaryo patikilye nou an. Pou jwenn yon rezilta itil nan fio, bay pwòp valè ou. Ki kote yo jwenn yo? Li ki jan nou te aprann konfigirasyon fio.
  • Pandan tès la, tout chaj I/O soti nan fio. Nan yon senaryo lavi reyèl, pral gen anpil chans pou gen lòt demann ekri ki vini nan depo a san konte sa ki gen rapò ak wal_fsync_duration_seconds. Chaj siplemantè a ap ogmante valè wal_fsync_duration_seconds. Kidonk, si 99yèm percentile la tou pre 10ms, depo w la ap fini.
  • Pran vèsyon an fio pa pi ba pase 3.5 (sa anvan yo pa montre fdatasync dire percentiles).
  • Pi wo a se jis yon ti bout nan rezilta yo soti nan fio.

Long istwa sou fio ak etcd

Ki sa ki WAL nan etcd

Anjeneral baz done itilize ekri-davan boutèy demi lit; etcd itilize li tou. Nou pa pral diskite sou ekriti-ahead log (WAL) an detay isit la. Li se ase pou nou konnen ke chak manm nan gwoup la etcd kenbe li nan depo ki pèsistan. etcd ekri chak operasyon kle-valè (tankou yon aktyalizasyon) nan WAL anvan ou aplike li nan magazen an. Si youn nan manm depo yo fè aksidan epi rekòmanse ant snapshots, li ka retabli tranzaksyon lokalman depi dènye snapshot pa WAL kontni.

Lè yon kliyan ajoute yon kle nan magazen kle-valè a oswa mete ajou valè a nan yon kle ki egziste deja, etcd anrejistre operasyon an nan WAL, ki se yon dosye regilye nan depo ki pèsistan. etcd DWE konplètman asire w ke antre WAL la aktyèlman te fèt anvan ou kontinye ak pwosesis. Sou Linux, yon sèl apèl sistèm pa ase pou sa. ekri, depi ekri aktyèl la nan depo fizik ka retade. Pou egzanp, Linux ka estoke yon antre WAL nan yon kachèt nan memwa nwayo (tankou yon kachèt paj) pou kèk tan. Ak nan lòd pou done yo dwe ekri avèk presizyon nan depo ki pèsistan, apèl la sistèm fdatasync nesesè apre ekri a, ak etcd jis itilize li (jan ou ka wè nan rezilta travay la. strace, kote 8 se deskriptè dosye WAL la):

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

Malerezman, ekri nan depo ki pèsistan pa rive imedyatman. Si apèl fdatasync la dousman, pèfòmans sistèm etcd la ap soufri. Dokiman an pou etcd dike depo a konsidere kòm rapid ase si, nan 99yèm percentile, apèl fdatasync pran mwens pase 10ms pou ekri nan dosye WAL la. Gen lòt mezi itil pou depo, men nan pòs sa a nou ap sèlman pale de metrik sa a.

Estimasyon depo ak fio

Si ou bezwen evalye si depo ou a apwopriye pou etcd, sèvi ak fio, yon zouti tès chaj I/O trè popilè. Li ta dwe sonje ke operasyon ki gen kapasite yo ka trè diferan: synchrone ak asynchrone, anpil klas nan apèl sistèm, elatriye Kòm yon rezilta, fio se byen difisil yo sèvi ak. Li gen anpil paramèt, ak konbinezon diferan nan valè yo pwodwi trè diferan I / O chaj travay. Pou jwenn bon jan figi pou etcd, ou ta dwe asire w ke tès ekri chay la soti nan fio se pi pre ke posib chaj aktyèl la soti nan etcd lè w ap ekri dosye WAL.

Se poutèt sa, fio ta dwe, nan yon minimòm, kreye yon chaj nan yon seri de ekri sekans nan dosye a, chak ekri pral konpoze de yon apèl sistèm. ekriki te swiv pa apèl sistèm fdatasync. Ekri sekans nan fio mande pou opsyon --rw=write. Pou fio sèvi ak apèl sistèm ekri a lè w ap ekri, olye ke ekri, ou ta dwe presize paramèt --ioengine=sync. Finalman, pou w rele fdatasync apre chak ekri, ou bezwen ajoute paramèt --fdatasync=1. De lòt opsyon ki nan egzanp sa a (--size ak -bs) yo espesifik pou script. Nan pwochen seksyon an, nou pral montre w kouman yo mete kanpe yo.

Poukisa fio ak kijan nou te aprann mete l kanpe

Nan pòs sa a, nou dekri yon ka reyèl. Nou gen yon grap Kubernetes v1.13 ke nou te kontwole ak Prometheus. etcd v3.2.24 te anime sou yon SSD. Etcd mezi yo te montre latans fdatasync twò wo, menm lè gwoup la pa t fè anyen. Paramèt yo te etranj e nou pa t vrèman konnen sa yo vle di. Gwoup la konsiste de machin vityèl, li te nesesè yo konprann ki sa pwoblèm nan te: nan SSD fizik oswa nan kouch nan Virtualization. Anplis de sa, nou souvan fè chanjman nan konfigirasyon pyès ki nan konpitè ak lojisyèl, epi nou te bezwen yon fason pou evalye rezilta yo. Nou ta ka kouri etcd nan chak konfigirasyon epi gade nan mezi Prometheus, men sa a twòp nan yon konplikasyon. Nou t ap chèche yon fason ki senp pou evalye yon konfigirasyon espesifik. Nou te vle tcheke si nou konprann mezi Prometheus soti nan etcd kòrèkteman.

Men, pou sa, de pwoblèm yo te dwe rezoud. Premyèman, ki sa chaj I/O ki etcd kreye lè w ap ekri nan WAL sanble? Ki apèl sistèm yo itilize? Ki gwosè dosye yo? Dezyèmman, si nou reponn kesyon sa yo, ki jan nou repwodui yon kantite travay menm jan ak fio? Pa bliye ke fio se yon zouti trè fleksib ak anpil opsyon. Nou rezoud tou de pwoblèm ak yon sèl apwòch - lè l sèvi avèk kòmandman yo lsof и strace. lsof bay lis tout deskriptè dosye yo itilize pa pwosesis la ak dosye ki asosye yo. Epi ak strace, ou ka egzamine yon pwosesis ki deja kouri, oswa kòmanse yon pwosesis epi egzaminen li. strace enprime tout apèl sistèm nan pwosesis yo ap egzamine (ak pwosesis pitit li yo). Lèt la trè enpòtan, depi etcd jis pran yon apwòch menm jan an.

Nou te premye itilize strace pou eksplore sèvè etcd pou Kubernetes lè pa te gen okenn chaj sou gwoup la. Nou te wè prèske tout dosye WAL yo te apeprè menm gwosè a: 2200–2400 bytes. Se poutèt sa, nan lòd la nan kòmansman an nan pòs la, nou espesifye paramèt la -bs = 2300 (bs vle di gwosè a an byte pou chak antre fio). Remake byen ke gwosè a nan antre nan etcd depann sou vèsyon an etcd, distribisyon, valè paramèt, elatriye, ak afekte dire a fdatasync. Si ou gen yon senaryo menm jan an, egzamine pwosesis etcd ou ak strace pou chèche konnen nimewo egzak yo.

Lè sa a, pou jwenn yon bon lide sou sa sistèm fichye etcd la ap fè, nou te kòmanse li ak opsyon strace ak -ffttT. Se konsa, nou te eseye egzamine pwosesis timoun yo ak anrejistre pwodiksyon an nan chak nan yo nan yon dosye separe, epi tou jwenn rapò detaye sou kòmansman an ak dire chak apèl sistèm. Nou te itilize lsof pou konfime analiz nou an sou pwodiksyon strace a epi wè ki deskriptè dosye yo te itilize pou ki objektif. Se konsa, avèk èd nan strace, rezilta yo montre pi wo a yo te jwenn. Estatistik tan senkronizasyon konfime ke wal_fsync_duration_seconds soti nan etcd ki konsistan avèk apèl fdatasync ak deskriptè dosye WAL.

Nou te ale nan dokiman an pou fio epi te chwazi opsyon pou script nou an pou fio ta jenere yon chaj ki sanble ak etcd. Nou tcheke tou apèl sistèm yo ak dire yo nan kouri fio soti nan strace, menm jan ak etcd.

Nou te chwazi ak anpil atansyon valè paramèt --size pou reprezante tout chaj I/O ki soti nan fio. Nan ka nou an, sa a se kantite total bytes ekri nan depo a. Li te vin dirèkteman pwopòsyonèl ak kantite apèl sistèm ekri (ak fdatasync). Pou yon sèten valè bs, kantite apèl fdatasync = gwosè/bs. Piske nou te enterese nan percentile a, nou te oblije gen ase echantiyon pou asire w, epi nou kalkile ke 10^4 ta ase pou nou (sa se 22 mebibyte). Si --size pi piti, yo ka rive (pa egzanp, plizyè apèl fdatasync pran plis tan pase nòmal epi afekte 99yèm percentile).

Eseye li tèt ou

Nou te montre w kouman pou w itilize fio epi wè si depo a ase vit pou etcd fè byen. Koulye a, ou ka eseye li pou tèt ou lè l sèvi avèk, pou egzanp, machin vityèl ak depo SSD nan IBM Cloud.

Sous: www.habr.com

Add nouvo kòmantè