Sampeyan mung perlu kanggo katon ing asil lan mriksa sing persentil 99th saka durasi fdatasync kurang saka 10 ms. Yen mangkono, sampeyan duwe panyimpenan sing cukup cepet. Punika conto asil:
Kita wis ngatur pilihan --size lan --bs kanggo skenario tartamtu. Kanggo entuk asil sing migunani saka fio, nyedhiyakake nilai sampeyan dhewe. Where kanggo njaluk wong? maca carane kita sinau kanggo ngatur fio.
Njupuk versi fio ora kurang saka 3.5 (sing sadurunge ora nuduhake persentil durasi fdatasync).
Ndhuwur mung cuplikan asil saka fio.
Crita dawa babagan fio lan etc
Apa WAL ing etcd
Biasane nggunakake database nulis-ahead log; etcd uga nggunakake. Kita ora bakal ngrembug babagan nulis-ahead log (WAL) kanthi rinci ing kene. Iku cukup kanggo kita ngerti sing saben anggota kluster etcd njaga ing panyimpenan ngengkel. etcd nulis saben operasi kunci-nilai (kayata nganyari) menyang WAL sadurunge nglamar menyang toko. Yen salah siji saka anggota panyimpenan tubrukan lan miwiti maneh antarane jepretan, bisa lokal mulihake transaksi wiwit gambar asli seko pungkasan dening isi WAL.
Nalika klien nambah tombol kanggo nyimpen tombol-nilai utawa nganyari Nilai saka tombol ana, etcd ngrekam operasi ing WAL, kang file biasa ing panyimpenan ngengkel. etcd kudu yakin manawa entri WAL bener-bener kedadeyan sadurunge nerusake proses. Ing Linux, siji panggilan sistem ora cukup kanggo iki. nulis, wiwit nulis nyata kanggo panyimpenan fisik bisa telat. Contone, Linux bisa nyimpen entri WAL ing cache ing memori kernel (kayata cache kaca) kanggo sawetara wektu. Lan supaya data bisa ditulis kanthi akurat menyang panyimpenan sing terus-terusan, telpon sistem fdatasync dibutuhake sawise nulis, lan etcd mung nggunakake (kaya sing sampeyan deleng ing asil karya. strace, ing ngendi 8 minangka deskriptor file WAL):
Sayange, nulis menyang panyimpenan terus-terusan ora kedadeyan langsung. Yen telpon fdatasync alon, kinerja sistem etcd bakal nandhang sangsara. Dokumentasi kanggo etcd ngandikasing panyimpenan dianggep cukup cepet yen, ing persentil 99th, fdatasync telpon njupuk kurang saka 10ms kanggo nulis menyang file WAL. Ana metrik liyane sing migunani kanggo panyimpenan, nanging ing kirim iki kita mung ngomong babagan metrik iki.
Ngira-ngira panyimpenan karo fio
Yen sampeyan kudu ngevaluasi yen panyimpenan sampeyan cocok kanggo etcd, gunakake fio, alat uji beban I/O sing populer banget. Sampeyan kudu eling yen operasi disk bisa beda banget: sinkron lan asinkron, akeh kelas panggilan sistem, lan liya-liyane. Akibate, fio cukup angel digunakake. Nduwe akeh parameter, lan kombinasi sing beda-beda saka nilai kasebut ngasilake beban kerja I / O sing beda banget. Kanggo entuk angka sing cukup kanggo etcd, sampeyan kudu nggawe manawa beban nulis tes saka fio cedhak karo beban nyata saka etcd nalika nulis file WAL.
Mulane, fio kudu, paling ora, nggawe beban saka seri nulis urutan menyang file, saben nulis bakal kalebu panggilan sistem nulisngiring dening telpon sistem fdatasync. Sequential writes to fio mbutuhake pilihan --rw=write. Kanggo fio nggunakake telpon sistem nulis nalika nulis, tinimbang nulis, sampeyan kudu nemtokake parameter --ioengine=sync. Pungkasan, kanggo nelpon fdatasync sawise saben nulis, sampeyan kudu nambah parameter --fdatasync=1. Rong opsi liyane ing conto iki (--size lan -bs) khusus skrip. Ing bagean sabanjure, kita bakal nuduhake sampeyan carane nyetel.
Apa persis fio lan carane kita sinau kanggo nyetel
Nanging kanggo iki, rong masalah kudu ditanggulangi. Pisanan, apa beban I / O sing digawe etcd nalika nulis menyang WAL katon kaya? Panggilan sistem apa sing digunakake? Apa ukuran cathetan? Kapindho, yen kita mangsuli pitakon kasebut, kepiye carane ngasilake beban kerja sing padha karo fio? Aja lali yen fio minangka alat sing fleksibel kanthi akeh pilihan. Kita ngrampungake loro masalah ing siji pendekatan - nggunakake printah lsof ΠΈ strace. lsof nampilake kabeh deskriptor file sing digunakake dening proses lan file sing ana gandhengane. Lan kanthi strace, sampeyan bisa mriksa proses sing wis mlaku, utawa miwiti proses lan mriksa. strace nyithak kabeh telpon sistem saka proses sing ditliti (lan proses anak). Sing terakhir penting banget, amarga etcd mung njupuk pendekatan sing padha.
Kita pisanan nggunakake strace kanggo njelajah server etcd kanggo Kubernetes nalika ora ana beban ing kluster. Kita weruh manawa meh kabeh cathetan WAL ukurane padha: 2200β2400 bita. Mulane, ing printah ing awal kirim, kita nemtokake parameter -bs = 2300 (bs tegese ukuran ing bita kanggo saben entri fio). Elinga yen ukuran entri etcd gumantung ing versi etcd, distribusi, nilai parameter, etc., lan mengaruhi durasi fdatasync. Yen sampeyan duwe skenario sing padha, priksa proses etcd sampeyan kanthi strace kanggo ngerteni nomer sing tepat.
Banjur, kanggo ngerteni apa sing ditindakake sistem file etcd, kita miwiti kanthi strace lan opsi -ffttT. Dadi, kita nyoba mriksa proses bocah lan ngrekam output saben wong ing file sing kapisah, lan uga entuk laporan rinci babagan wiwitan lan durasi saben telpon sistem. Kita nggunakake lsof kanggo konfirmasi analisis output strace lan ndeleng deskriptor file sing digunakake kanggo tujuane. Dadi kanthi bantuan strace, asil sing dituduhake ing ndhuwur dipikolehi. Statistik wektu sinkronisasi dikonfirmasi manawa wal_fsync_duration_seconds saka etcd konsisten karo telpon fdatasync karo deskriptor file WAL.
Kita lunga liwat dokumentasi kanggo fio lan milih opsi kanggo script kita supaya fio bakal generate mbukak padha etcd. Kita uga mriksa telpon sistem lan durasi kanthi mbukak fio saka strace, padha karo etcd.
Kita wis kasebut kanthi teliti, milih Nilai saka parameter --ukuran kanggo makili kabeh I / O mbukak saka fio. Ing kasus kita, iki minangka jumlah total bita sing ditulis ing panyimpenan. Ternyata dadi proporsional langsung karo jumlah panggilan sistem nulis (lan fdatasync). Kanggo nilai bs tartamtu, jumlah panggilan fdatasync = ukuran / bs. Awit kita padha kasengsem ing persentil, kita kudu sampel cukup kanggo mesthekake, lan kita ngetung sing 10 ^ 4 bakal cukup kanggo kita (iku 22 mebibyte). Yen --size luwih cilik, outlier bisa kedadeyan (contone, sawetara panggilan fdatasync luwih suwe tinimbang biasane lan mengaruhi persentil kaping 99).
Coba dhewe
We nuduhake sampeyan carane nggunakake fio lan ndeleng yen panyimpenan wis cukup kacepetan kanggo kinerja dhuwur etcd. Saiki sampeyan bisa nyoba dhewe nggunakake, contone, mesin virtual karo panyimpenan SSD ing IBM Cloud.