7 minute read

ํšŒ์‚ฌ์—์„œ Kafka ์šฉ๋Ÿ‰ ์ฆ์„ค ํ•  ๋•Œ, xfs ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์“ฐ๋Š”๋ฐ, ์š” ๋…€์„์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋กœ ์ €๋„๋ง์ด ๋‚˜์˜ค๋”๋ผ๊ตฌ์š”!! ๊ทธ๋ž˜์„œ ์ด๋ฒˆ์— ํ•œ๋ฒˆ ๋ญ”์ง€ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค

๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ โ€œ์ €๋„โ€์ด๋ผ๋Š” ๋กœ๊ทธ ํŒŒ์ผ์— ๋จผ์ € ๊ธฐ๋กํ•˜๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ฐฉ์‹์ž„.

ํŒŒ์ผ ์“ฐ๊ธฐ๋‚˜ ์ˆ˜์ • ๋„์ค‘์— ์ „์› ๊บผ์ง์ด๋‚˜ ์ปค๋„ ํŒจ๋‹‰ ๋“ฑ์œผ๋กœ ์ธํ•ด ๋””์Šคํฌ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ •๋ง๋กœ ๋””์Šคํฌ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์ƒ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ํŒŒ์ผ ์ „์ฒด๊ฐ€ ๊ผฌ์ด๊ฒŒ ๋˜๋ฉด์„œ ๋ณต๊ตฌ๊ฐ€ ์•ˆ ๋˜๊ฑฐ๋‚˜, ๋ณต๊ตฌ ํ”„๋กœ๊ทธ๋žจ์„ ์ง์ ‘ ๋Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์œ„ํ—˜์„ ์™„ํ™” ํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ์ผ ์“ฐ๊ธฐ/์ˆ˜์ •์— ํŠธ๋žœ์žญ์…˜๊ณผ ๊ฐ™์€ ๊ฐœ๋…์„ ๋„์ž…ํ•œ ๊ฒƒ์ด ์ €๋„๋ง ํŒŒ์ผ ์‹œ์Šคํ…œ ์ž…๋‹ˆ๋‹ค.

๊ณผ์ •

  1. ์“ฐ๊ธฐ ์š”์ฒญ์ด ๋ฐœ์ƒ
    • ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋‚ด์šฉ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(inode, ๋ธ”๋ก ํ• ๋‹น ํ…Œ์ด๋ธ”)์„ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ์ƒํ™ฉ
  2. ์‹ค์ œ ๋ณ€๊ฒฝ์„ ํ•˜๊ธฐ ์ „์— ์ €๋„ ์˜์—ญ์— ์ž‘์„ฑ
    • ์ด ๋ธ”๋ก์„ A -> B ์ƒํƒœ๋กœ ๋ฐ”๊พธ๊ฑฐ๋‚˜
    • ํŒŒ์ผ์„ A ์œ„์น˜์—์„œ B ์œ„์น˜๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜
  3. ์ปค๋ฐ‹
    • ์ €๋„ ์˜์—ญ์— ๊ธฐ๋ก์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ €์žฅ๋œ ํ›„์—์•ผ
    • ์‹ค์ œ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋ฐ์ดํ„ฐ ๋ธ”๋ก๊ณผ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ์ˆ˜์ •์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ข…๋ฃŒ์™€ ์ •๋ฆฌ
    • ๋ณ€๊ฒฝ์ด ์™„๋ฃŒ๋˜๋ฉด, ์ €๋„์—์„œ ํ•ด๋‹น ๊ธฐ๋ก์„ ์ง€์›Œ์ค๋‹ˆ๋‹ค.

์žฅ์ 

๋น ๋ฅธ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค! ์“ฐ๊ธฐ/์ˆ˜์ • ์ž‘์—… ๋„์ค‘ ์‹œ์Šคํ…œ์ด ์ฃฝ๋”๋ผ๋„, ์žฌ๋ถ€ํŒ… ๋•Œ ์ €๋„ ์˜์—ญ๋งŒ ํ™•์ธํ•ด, โ€œ์™„๋ฃŒโ€ ์ฒ˜๋ฆฌ ๋˜์ง€ ์•Š์€ ์ž‘์—…๋งŒ ๋กค๋ฐฑ ๋˜๋Š” ์žฌ์ ์šฉ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋‹จ์ 

์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๊ฒช์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ €๋„์— ํ•œ๋ฒˆ, ์‹ค์ œ ์˜์—ญ์— 2๋ฒˆ์”ฉ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ๋””์Šคํฌ์— ์“ฐ๊ธฐ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

SSD ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฒ„ํ‹ธ๋งŒํ•œ ์„ฑ๋Šฅ ์ €ํ•˜์˜€๊ณ , HDD์—์„  ํฌ๊ฒŒ ์ฒด๊ฐ ๋˜๋Š” ์ •๋„๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ์ €๋„๋ง ํ•œ๋‹ค๋ฉด, ์—ฌ์ „ํžˆ ๋ฐ์ดํ„ฐ ์œ ์‹ค ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ์„ธํŒ…์œผ๋กœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ์ €๋„๋ง ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ์‹œ์Šคํ…œ ์žฅ์• ์‹œ ํŒŒ์ผ ๋‚ด์šฉ ์ค‘ ์ผ๋ถ€๊ฐ€ ์†์ƒ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ํŒŒ์ผ ์‹œ์Šคํ…œ ์ž์ฒด์— ๋Œ€ํ•œ ์†์ƒ์œผ๋กœ ์ด์–ด์ง€์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ€ํ‘œ ์˜ˆ์‹œ๋“ค

Linux ๊ณ„์—ด: ext3, ext4, xfs

ํ™•์ธ ๋ฐฉ๋ฒ•์€

$ mount | grep "^/dev"
/dev/nvme0n1p1 /etc/hosts xfs ...
/dev/nvme0n1p1 /dev/etermination-log xfs ...
...

๋˜๋Š” lsblk(list block devices) ๋ช…๋ น์–ด ์‚ฌ์šฉ

$ lsblk -f
NAME          FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
nvme0n1
โ”œโ”€nvme0n1p1   xfs          /     xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   31.3G    37% /
โ””โ”€nvme0n1p128 vfat   FAT16       xxxx-xxxx                               8.6M    14% /boot/efi

์œ„์˜ ๊ฒฐ๊ณผ์—์„œ efi๋Š” ์‹œ์Šคํ…œ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋ถ€ํŠธ ๋กœ๋”๊ฐ€ ์žˆ๋Š” ๊ณณ์ž„. vfat ํŒŒ์ผ ์‹œ์Šคํ…œ์€ ์ €๋„๋ง ์ง€์›ํ•˜์ง€ ์•Š์Œ. ๋‹ค๋งŒ ๋ถ€ํŒ…์šฉ ํŒŒํ‹ฐ์…˜์ด๊ธฐ์— ํŒŒ์ผ ๋ณ€๊ฒฝ์ด ๊ฑฐ์˜ ์—†๊ณ , ๋”ฐ๋ผ์„œ ์†์ƒ ์œ„ํ—˜๋„ ์•„์ฃผ ๋‚ฎ์Œ.

xfs์—์„œ๋Š” ์ €๋„์„ โ€œlogโ€๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ํŒŒ์ผ์‹œ์Šคํ…œ ์ƒ์„ฑ ์‹œ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ง.

$ sudo xfs_info /
meta-data=/dev/nvme0n1p1         isize=512    agcount=13, agsize=1047168 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1    bigtime=1 inobtcount=1
data     =                       bsize=4096   blocks=13104379, imaxpct=25
         =                       sunit=128    swidth=128 blks
naming   =version 2              bsize=16384  ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=16384, version=2
         =                       sectsz=4096  sunit=4 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

๋กœ๊ทธ ๋ถ€๋ถ„์€ bsize=4096(๋ธ”๋ก์‚ฌ์ด์ฆˆ 4kb) ๊ทธ๋ฆฌ๊ณ  blocks=16384(๋กœ๊ทธ ๋ธ”๋ก ๊ฐฏ์ˆ˜). ๋”ฐ๋ผ์„œ ๋กœ๊ทธ ์ €๋„ ์ „์ฒด ํฌ๊ธฐ๋Š” 4096 * 16384 = 67mb

์ด ๊ณต๊ฐ„์„ ๊ณ ์ • ํฌ๊ธฐ๋กœ ์‚ฌ์šฉํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์„ ํŠธ๋ž™์žญ์…˜ ๋‹จ์œ„๋กœ ๊ธฐ๋กํ•˜๋Š”๋ฐ ์‚ฌ์šฉ.

Windows: NTFS

macOS: hfs, apfs

์ง€๊ธˆ ์“ฐ๋Š” ๋งฅ๋ถ M2 Air์—์„œ๋Š” apfs ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉ ์ค‘ ์ž…๋‹ˆ๋‹ค. Disk Utility์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋„ ์˜์—ญ์€ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ญ”๊ฐ€?

๋‚ด๊ฐ€ ์ €๋„ ์šฉ๋Ÿ‰์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„๊นŒ?

ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ์„œ ์ €๋„ ์˜์—ญ์˜ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ณ , ๋™์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์• ํ”Œ์˜ apfs์˜ ๊ฒฝ์šฐ, ๋™์  ์˜์—ญ ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  Copy-on-Write ๋ฐฉ์‹์œผ๋กœ ํŒŒ์ผ์„ ์ƒ์„ฑ/์ˆ˜์ • ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ˆ˜์ •ํ•  ๋ธ”๋ก์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ƒˆ๋กœ์šด ๋ธ”๋ก์— ๊ธฐ๋ก ํ•œ ํ›„, ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ค„์ง‘๋‹ˆ๋‹ค.

์ •๋ง ์ €๋„๋ง์€ ์žฅ์•  ์•ˆ์ „ํ•œ๊ฐ€?

์ €๋„ ์˜์—ญ์ด ์†์ƒ๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†์„๊นŒ?

์ €๋„๋ง ๊ธฐ๋ฒ•์„ ์“ด๋‹ค๊ณ  ํ•ด์„œ ์žฅ์•  ์ƒํ™ฉ์— ์ ˆ๋Œ€์ ์œผ๋กœ ์•ˆ์ „ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ €๋„ ์˜์—ญ๋„ ๊ฒฐ๊ตญ ๋””์Šคํฌ ์œ„์˜ ๋ฐ์ดํ„ฐ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์†์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””์Šคํฌ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒ ํ–ˆ์ง€๋งŒ ์ €๋„ ์˜์—ญ์ด ์•ˆ์ „ํ•˜๋‹ค๋Š” ๊ฐ€์ • ์•„๋ž˜์— ์ €๋„ ์žฌ์ƒ์ด ์ด๋ค„์ง‘๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ ์ €๋„๋ง๋งŒ ์ผ ๋‹ค๋ฉด, ์“ฐ๊ธฐ๋ฅผ ์š”์ฒญํ•œ ๊ฒƒ ์ค‘ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ๋ณต๊ตฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๊ฐ•๋ ฅํ•œ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ ์ €๋„๋ง ๋ชจ๋“œ๊นŒ์ง€ ํ™œ์„ฑํ™” ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๋˜๋Š” RAID ๋ฐฉ์‹์œผ๋กœ ์šด์˜ํ•˜๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ• ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ด์ค‘์œผ๋กœ ์ €์žฅํ•จ์œผ๋กœ์จ ํ•˜๋‚˜์˜ ๋””์Šคํฌ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋‹ค๋ฅธ ๋””์Šคํฌ์—์„œ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

๋˜, ์ •๊ธฐ์ ์ธ ๋ฐฑ์—…๋„ ๊ฐ™์ด ์ˆ˜ํ–‰ํ•ด ๋ณด์™„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋””์Šคํฌ ๋ณผ๋ฅจ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•ด์š”

์ €๋Š” ์ด ๊ฐœ๋…์„ Kafka ๋ธŒ๋กœ์ปค์˜ ์šฉ๋Ÿ‰ ์ฆ์„ค ๋•Œ, ๋ธŒ๋กœ์ปค์˜ ๋””์Šคํฌ๋ฅผ xfs ๋ฐฉ์‹์œผ๋กœ ๋งˆ์šดํŠธ ํ•ด์„œ ๋””์Šคํฌ ์šฉ๋Ÿ‰ ์ฆ์„ค์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ์š”? ์™œ xfs๋Š” ๋””์Šคํฌ ์ฆ์„ค์ด ์‰ฌ์šด ๊ฑธ๊นŒ์š”?

์ฐพ์•„๋ณด๋‹ˆ๊นŒ ๊ทธ ์ด์œ ๋Š” xfs์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ตฌํ˜„ ๋•Œ๋ฌธ์ด์—ˆ์Šค๋นˆ๋‹ค. xfs๋Š” Extent ๊ธฐ๋ฐ˜ ํ• ๋‹น์— B+ Tree ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋””์Šคํฌ ํ™•์žฅ์ด ์ข€๋” ๋น ๋ฅด๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋””์Šคํฌ ํ™•์žฅ์€ ext4 ํฌ๋งท๋„ ์ง€์› ํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ ext4๋Š” ๋ธ”๋ก ๊ทธ๋ฃน ๊ธฐ๋ฐ˜์œผ๋กœ ๋””์Šคํฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ใ…Ž๋””์Šคํฌ ํ™•์žฅ ๋•Œ ๋ธ”๋ก ๊ทธ๋ฃน๊ณผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฐฑ์‹ ์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋Œ€๊ทœ๋ชจ ์›จ์–ดํ•˜์šฐ์Šค, ๋กœ๊ทธ ์ €์žฅ์†Œ์—๋Š” ๋””์Šคํฌ ํ™•์žฅ์„ ๊ณ ๋ คํ•ด xfs ํฌ๋งท์ด ์„ ํ˜ธ๋˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

Kubernetes PV๋„ ์ฆ์„ค์ด ๊ฐ€๋Šฅํ•ด์š”

๋งŒ์•ฝ K8s์—์„œ ์‚ฌ์šฉํ•˜๋Š” StorageClass๊ฐ€ AllowVolumeExpansion: True ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค๋ฉด, ์šฉ๋Ÿ‰ ์ฆ์„ค์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!

K8s PVC ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„์— k edit pvc ...๋กœ ์šฉ๋Ÿ‰์„ ์ฆ์„ค ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค!

์ด๋•Œ, ext4, xfs ํŒŒ์ผ์‹œ์Šคํ…œ์ด๋ผ๋ฉด, kubelet์ด ์ž๋™์œผ๋กœ Pod์— ๋งˆ์šดํŠธ๋œ PV ๋ณผ๋ฅจ์„ ๋ฆฌ์‚ฌ์ด์ฆˆ ํ•ด์ค€๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

์ฐธ๊ณ ๋กœ EKS์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ebs.csi.aws.com driver๋Š” StorageClass๋ฅผ ์ •์˜ํ•  ๋•Œ, ์•„๋ž˜์™€ ๊ฐ™์ด ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์ข…๋ฅ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: storage.k8s.io/v1
kind: StorageClass
...
provisioner: ebs.csi.aws.com
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
parameters:
  type: gp3
  csi.storage.k8s.io/fstype: xfs # ์—ฌ๊ธฐ!
  encrypted: "{false/true}"
  iops: "1234"
  throughput: "123"

Categories:

Updated: