ããŒãã 翻蚳ã: ãã®èšäºã¯ãetcd ããŒã¿ããŒã¹ã®æäœã«é¢é£ããå®éã®åé¡ã®è§£æ±ºçãæ±ã㊠IBM Cloud ãšã³ãžãã¢ã«ãã£ãŠå®è¡ããããããªãµãŒãã®çµæã§ãã åæ§ã®èª²é¡ã¯ç§ãã¡ã«ãé¢ä¿ããããŸããããèè ãã¡ã®èå¯ãšè¡åã®éçšã¯ãããåºãæèã§èå³æ·±ããããããŸããã
èšäºå šäœã®ç°¡åãªèŠçŽ: fio ãš etcd
etcd ã¯ã©ã¹ã¿ãŒã®ããã©ãŒãã³ã¹ã¯ãåºç€ãšãªãã¹ãã¬ãŒãžã®é床ã«å€§ããäŸåããŸãã etcd ã¯ãããã©ãŒãã³ã¹ãç£èŠããããã«ããŸããŸãª Prometheus ã¡ããªã¯ã¹ããšã¯ã¹ããŒãããŸãã ãã®ãã¡ã® XNUMX ã€ã¯ã wal_fsync_duration_seconds
ã etcd ã®ããã¥ã¡ã³ãå
Linux ãã·ã³äžã§ etcd ã¯ã©ã¹ã¿ãŒã®ã»ããã¢ãããæ€èšããŠããããã©ã€ã (SSD ãªã©) ãååã«é«éã§ãããã©ããããã¹ããããå Žåã¯ãäžè¬ç㪠I/O ãã¹ã¿ãŒã䜿çšããããšããå§ãããŸãã test-data
ãã¹ããããã©ã€ãã®ããŠã³ããããããŒãã£ã·ã§ã³ã«é
眮ããå¿
èŠããããŸã):
fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest
ããšã¯åºåãèŠãŠã99 ããŒã»ã³ã¿ã€ã«ãé©åãããã©ããã確èªããã ãã§ãã fdatasync
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]
ããã€ãã®ã¡ã¢ïŒ
- äžèšã®äŸã§ã¯ããã©ã¡ãŒã¿ã調æŽããŸãã
--size
О--bs
ç¹å®ã®ã±ãŒã¹ã®å Žåã æå³ã®ããçµæãåŸãã«ã¯fio
ããŠãŒã¹ã±ãŒã¹ã«é©ããå€ãæå®ããŸãã ããããéžæããæ¹æ³ã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã - ãã¹ãäžã®ã¿
fio
ãã£ã¹ã¯ãµãã·ã¹ãã ãããŒãããŸãã å®éã«ã¯ãä»ã®ããã»ã¹ (é¢é£ããããã»ã¹ä»¥å€) ããã£ã¹ã¯ã«æžã蟌ãå¯èœæ§ããããŸããwal_fsync_duration_seconds
ïŒã ãã®è¿œå ã®è² è·ã¯å¢å ããå¯èœæ§ããããŸãwal_fsync_duration_seconds
ã èšãæããã°ã次ã®ãã¹ã㧠99 ããŒã»ã³ã¿ã€ã«ãåŸãããå Žåãfio
ã10 ããªç§æªæºãããªãå Žåãã¹ãã¬ãŒãžã®ããã©ãŒãã³ã¹ãååã§ã¯ãªãå¯èœæ§ãååã«ãããŸãã - ãã¹ãã«ã¯ããŒãžã§ã³ãå¿
èŠã§ã
fio
3.5以äžå€ãããŒãžã§ã³ã§ã¯çµæãéèšãããªãããfdatasync
ããŒã»ã³ã¿ã€ã«ã®åœ¢åŒã§ã - äžèšã®çµè«ã¯ãäžè¬çãªçµè«ããã®ã»ãã®äžéšã®æç²ã§ã
fio
.
fio ãš etcd ã®è©³çŽ°
WAL ãªã©ã«ã€ããŠäžèš
äžè¬ã«ããŒã¿ããŒã¹ã§ã¯ã
ãããã£ãŠãã¯ã©ã€ã¢ã³ãã KV ã¹ãã¢ã«ããŒãè¿œå ããããæ¢åã®ããŒã®å€ãæŽæ°ãããã³ã«ãetcd ã¯æ°žç¶ã¹ãã¢å
ã®éåžžã®ãã¡ã€ã«ã§ãã WAL ã«æäœã®èšè¿°ãè¿œå ããŸãã etcd ã¯ãç¶è¡ããåã«ãWAL ãšã³ããªãå®éã«ä¿åãããŠããããšã 100% 確èªããå¿
èŠããããŸãã Linux ã§ãããå®çŸããã«ã¯ãã·ã¹ãã ã³ãŒã«ã䜿çšããã ãã§ã¯ååã§ã¯ãããŸããã write
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 ã®ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã ãªããžããªã®ããã¥ã¡ã³ãå
fdatasync
WAL ãã¡ã€ã«ãžã®æžã蟌ã¿ã¯ 10 ããªç§æªæºã§ããã ä»ã«ãã¹ãã¬ãŒãžé¢é£ã®ææšã¯ãããŸããããã®èšäºã§ã¯ããã«çŠç¹ãåœãŠãŸãã
fio ã§ã¹ãã¬ãŒãžã倧åã«ãã
ãŠãŒãã£ãªãã£ã䜿çšããŠãç¹å®ã®ã¹ãã¬ãŒãžã etcd ã§ã®äœ¿çšã«é©ããŠãããã©ãããè©äŸ¡ã§ããŸãã fio
éåžžã«äœ¿ãã«ããã ãŠãŒãã£ãªãã£ã«ã¯å€ãã®ãã©ã¡ãŒã¿ãŒãããããããã®å€ã®ããŸããŸãªçµã¿åããã«ããããŸã£ããç°ãªãçµæãåŸãããŸãã etcd ã®é©åãªèŠç©ãããååŸããã«ã¯ãfio ã«ãã£ãŠçæãããæžã蟌ã¿è² è·ã etcd ã® WAL ãã¡ã€ã«æžã蟌ã¿è² è·ã«ã§ããã ãè¿ãããšã確èªããå¿
èŠããããŸãã
- ããã¯ãçæããã
fio
ããŒãã¯å°ãªããšããã¡ã€ã«ãžã®äžé£ã®é£ç¶æžã蟌ã¿ã§ããå¿ èŠããããåæžã蟌ã¿ã¯ã·ã¹ãã ã³ãŒã«ã§æ§æãããŸãã ã«ç¶ãwrite
fdatasync
. - ã·ãŒã±ã³ã·ã£ã«æžã蟌ã¿ãæå¹ã«ããã«ã¯ããã©ã°ãæå®ããå¿
èŠããããŸãã
--rw=write
. - ãã®
fio
åŒã³åºãã䜿çšããŠæžã蟌ããwrite
(ä»ã®ã·ã¹ãã ã³ãŒã«ã§ã¯ãªããããšãã°ã )ããã©ã°ã䜿çšããŸãpwrite
--ioengine=sync
. - æåŸã«æã§ã
--fdatasync=1
ãã¹ãŠã®ããšãä¿èšŒããŸãwrite
ã§ãªããã°ãªããŸããfdatasync
. - ãã®äŸã®ä»ã® XNUMX ã€ã®ãã©ã¡ãŒã¿ãŒã¯æ¬¡ã®ãšããã§ãã
--size
О--bs
- ç¹å®ã®äœ¿çšäŸã«ãã£ãŠç°ãªãå ŽåããããŸãã 次ã®ã»ã¯ã·ã§ã³ã§ã¯ããã®æ§æã«ã€ããŠèª¬æããŸãã
fio ãéžãã çç±ãšãã®èšå®æ¹æ³ãåŠãã æ¹æ³
ãã®ã¡ã¢ã¯ãç§ãã¡ãå®éã«ééããã±ãŒã¹ã«åºã¥ããŠããŸãã Kubernetes v1.13 äžã«ã¯ã©ã¹ã¿ãŒãæ§ç¯ããPrometheus äžã§ã¢ãã¿ãªã³ã°ãè¡ããŸããã etcd v3.2.24 ã®ã¹ãã¬ãŒãžãšã㊠SSD ã䜿çšãããŸããã etcd ã¡ããªã¯ã¹ã®ã¬ã€ãã³ã·ãé«ãããããšã瀺ãããŸãã fdatasync
ã¯ã©ã¹ã¿ãŒãã¢ã€ãã«ç¶æ
ã®ãšãã§ãã ç§ãã¡ã«ãšã£ãŠããããã®ææšã¯éåžžã«çããããã®ã«èŠãããããæ£ç¢ºã«äœãè¡šããŠããã®ãããããŸããã§ããã ããã«ãã¯ã©ã¹ã¿ãŒã¯ä»®æ³ãã·ã³ã§æ§æãããŠãããããé
延ãä»®æ³åã«ãããã®ãªã®ããSSD ã«ãããã®ãªã®ããå€æããããšã¯ã§ããŸããã§ããã
ããã«ãããŒããŠã§ã¢ããã³ãœãããŠã§ã¢æ§æã®ããŸããŸãªå€æŽãæ€èšãããããããããè©äŸ¡ããæ¹æ³ãå¿ èŠã§ããã ãã¡ãããåæ§æ㧠etcd ãå®è¡ããŠã察å¿ãã Prometheus ã¡ããªã¯ã¹ã確èªããããšãå¯èœã§ãããããã«ã¯å€å€§ãªåŽåãå¿ èŠã«ãªããŸãã ç§ãã¡ãå¿ èŠãšããŠããã®ã¯ãç¹å®ã®æ§æãè©äŸ¡ããç°¡åãªæ¹æ³ã§ããã etcd ããã® Prometheus ã¡ããªã¯ã¹ã®ç解ããã¹ãããããšæããŸããã
ããã«ã¯ã次㮠XNUMX ã€ã®åé¡ã解決ããå¿ èŠããããŸããã
- ãŸããWAL ãã¡ã€ã«ã«æžã蟌ããšãã« etcd ã«ãã£ãŠçæããã I/O è² è·ã¯ã©ã®ãããªãã®ã«ãªãã§ãããã? ã©ã®ãããªã·ã¹ãã ã³ãŒã«ã䜿çšãããŠããŸãã? ã¬ã³ãŒããããã¯ã®ãµã€ãºã¯ã©ããããã§ãã?
- 次ã«ãäžèšã®è³ªåã«å¯ŸããçãããããšããŸãã 察å¿ããè² è·ãåçŸããæ¹æ³
fio
ïŒ çµå±fio
â è±å¯ãªãã©ã¡ãŒã¿ãåããéåžžã«æè»ãªãŠãŒãã£ãªã㣠(ããã¯ç°¡åã«ç¢ºèªã§ããŸããããšãã°ããã㧠- çŽç¿»èš³ïŒ.
åãã³ãã³ãããŒã¹ã®ã¢ãããŒãã§äž¡æ¹ã®åé¡ã解決ããŸãã lsof
strace
- ãšãšãââã«
lsof
ããã»ã¹ã§äœ¿çšããããã¹ãŠã®ãã¡ã€ã«èšè¿°åãšãããããåç §ãããã¡ã€ã«ã衚瀺ã§ããŸãã - ãšãšãââã«
strace
ãã§ã«å®è¡äžã®ããã»ã¹ãåæããããããã»ã¹ãå®è¡ããŠç£èŠãããã§ããŸãã ãã®ã³ãã³ãã¯ããã®ããã»ã¹ã«ãã£ãŠè¡ããããã¹ãŠã®ã·ã¹ãã ã³ãŒã«ãšãå¿ èŠã«å¿ããŠãã®åå«ã衚瀺ããŸãã åŸè ã¯ãã©ãŒã¯ããããã»ã¹ã«ãšã£ãŠéèŠã§ãããetcd ããã®ãããªããã»ã¹ã® XNUMX ã€ã§ãã
ç§ãã¡ãæåã«ãã£ãããšã¯ã strace
Kubernetes ã¯ã©ã¹ã¿ãŒå
ã® etcd ãµãŒããŒãã¢ã€ãã«ç¶æ
ã§ãããšãã«æ€æ»ããŸãã
ãã®ãããWAL ã¬ã³ãŒã ãããã¯ã¯éåžžã«å¯ã«ã°ã«ãŒãåãããŠããã倧éšåã®ãµã€ãºã¯ 2200 ïœ 2400 ãã€ãã®ç¯å²ã«ããããšãããããŸããã ãã®èšäºã®åé ã®ã³ãã³ãã§ãã©ã°ã䜿çšããã®ã¯ãã®ããã§ãã --bs=2300
(bs
ã®åæžã蟌ã¿ãããã¯ã®ãã€ãåäœã®ãµã€ãºã§ãã fio
).
etcd æžã蟌ã¿ãããã¯ã®ãµã€ãºã¯ãããŒãžã§ã³ããããã€ã¡ã³ãããã©ã¡ãŒã¿ãŒå€ãªã©ã«ãã£ãŠç°ãªãå Žåãããããšã«æ³šæããŠãã ããã - æç¶æéã«åœ±é¿ããŸã fdatasync
ã åæ§ã®ãŠãŒã¹ã±ãŒã¹ãããå Žåã¯ã次ã®ããã«åæããŠãã ããã strace
etcd ããã»ã¹ã§ææ°ã®å€ãååŸããŸãã
次ã«ãetcd ããã¡ã€ã« ã·ã¹ãã ã§ã©ã®ããã«åäœãããã«ã€ããŠæ確ãã€å
æ¬çãªã¢ã€ãã¢ãåŸãããã«ã以äžããéå§ããŸããã strace
ãã©ã°ä»ã -ffttT
ã ããã«ãããåããã»ã¹ããã£ããã£ããããããã®åºåãå¥ã®ãã¡ã€ã«ã«æžã蟌ãããšãå¯èœã«ãªããŸããã ããã«ãåã·ã¹ãã ã³ãŒã«ã®éå§æå»ãšç¶ç¶æéã«é¢ãã詳现æ
å ±ãååŸãããŸããã
ã³ãã³ãã䜿çšããŸãã lsof
åºåã®ç解ã確èªãããã strace
ã©ã®ãã¡ã€ã«èšè¿°åãã©ã®ç®çã§äœ¿çšãããããšããç¹ã§ã çµè«ãåºãŸãã strace
ãäžèšãšåæ§ã§ãã åææéã«ããçµ±èšæäœã«ãããã¡ããªã¯ã¹ã次ã®ããšã確èªããŸããã wal_fsync_duration_seconds
etcd ããã®åŒã³åºããšäžèŽãã fdatasync
WAL ãã¡ã€ã«èšè¿°åã䜿çšããŸãã
ã§çæããã«ã¯ fio
etcd ã®ã¯ãŒã¯ããŒããšåæ§ã®ã¯ãŒã¯ããŒãã§ã¯ããŠãŒãã£ãªãã£ã®ããã¥ã¡ã³ããæ€èšãããã¿ã¹ã¯ã«é©ãããã©ã¡ãŒã¿ãéžæãããŸããã æ£ããã·ã¹ãã ã³ãŒã«ãé²è¡äžã§ããããšã確èªãã次ã®ã³ãã³ããå®è¡ããŠãã®ç¶ç¶æéã確èªããŸããã fio
ã® strace
(etcdã®å Žåãšåæ§)ã
ãã©ã¡ãŒã¿ã®å€ã®æ±ºå®ã«ã¯ç¹ã«æ³šæãæãããŸãã --size
ã ããã¯ãfio ãŠãŒãã£ãªãã£ã«ãã£ãŠçæãããåèš I/O è² è·ãè¡šããŸãã ãã®äŸã§ã¯ãããã¯ã¡ãã£ã¢ã«æžã蟌ãŸããåèšãã€ãæ°ã§ãã é話æ°ã«æ£æ¯äŸããŸã write
ïŒãã㊠fdatasync
ïŒã ç¹å®ã® bs
é話åæ° fdatasync
çãã size / bs
.
ããŒã»ã³ã¿ã€ã«ã«èå³ããã£ãããããµã³ãã«æ°ãçµ±èšçã«ææã«ãªãã®ã«ååãªå€§ããã§ããããšãå¿
èŠã§ããã ãããŠæ±ºããã®ã¯ã 10^4
(22 MB ã®ãµã€ãºã«çžåœ) ã§ååã§ãã ãã©ã¡ãŒã¿å€ãå°ãããã --size
ããé¡èãªãã€ãºãçºçããŸããïŒé話ãªã©ïŒ fdatasync
ãéåžžãããã¯ããã«æéããããã99 ããŒã»ã³ã¿ã€ã«ã«åœ±é¿ããŸã)ã
ããã¯ããªã次第ã§ã
èšäºã§ã¯äœ¿ãæ¹ã玹ä»ããŠããŸã fio
etcd ã§ã®äœ¿çšãç®çãšããã¡ãã£ã¢ãååã«é«éã§ãããã©ãããå€æã§ããŸãã ããšã¯ããªã次第ã§ãïŒ ãµãŒãã¹å
㧠SSD ããŒã¹ã®ã¹ãã¬ãŒãžãåããä»®æ³ãã·ã³ãæ¢çŽ¢ã§ããŸã
翻蚳è ããã®è¿œäŒž
æ¢è£œã®ãŠãŒã¹ã±ãŒã¹ãäœ¿çš fio
ãã®ä»ã®ã¿ã¹ã¯ã«ã€ããŠã¯ããåç
§ããŠãã ããã
翻蚳è ããã® PPS
ç§ãã¡ã®ããã°ããèªã¿ãã ãã:
- «
etcd 3.4.3: ã¹ãã¬ãŒãžã®ä¿¡é Œæ§ãšã»ãã¥ãªãã£ã®èª¿æ» "; - «
etcd Kubernetes ã¯ã©ã¹ã¿ãŒå ã®ããŒã¿ãçŽæ¥ (K8s API ãªãã§) 䜿çšããçµéš "; - «
Kubernetes ã®éçšã«ããã 6 ã€ã®èå³æ·±ãã·ã¹ãã ãã° [ããã³ãã®è§£æ±ºç] 'ã
åºæïŒ habr.com