Journal File System
ํ์ฌ์์ Kafka ์ฉ๋ ์ฆ์ค ํ ๋, xfs ํ์ผ ์์คํ
์ ์ฐ๋๋ฐ, ์ ๋
์์ ํน์ง ์ค ํ๋๋ก ์ ๋๋ง์ด ๋์ค๋๋ผ๊ตฌ์!! ๊ทธ๋์ ์ด๋ฒ์ ํ๋ฒ ๋ญ์ง ์์๋ณด๋ ค๊ณ ํฉ๋๋ค
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋ณ๊ฒฝ ๋ด์ฉ์ โ์ ๋โ์ด๋ผ๋ ๋ก๊ทธ ํ์ผ์ ๋จผ์ ๊ธฐ๋กํ๋ ํ์ผ ์์คํ ๋ฐฉ์์.
ํ์ผ ์ฐ๊ธฐ๋ ์์ ๋์ค์ ์ ์ ๊บผ์ง์ด๋ ์ปค๋ ํจ๋ ๋ฑ์ผ๋ก ์ธํด ๋์คํฌ์ ๋ฉํ๋ฐ์ดํฐ ์์์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ง์ฝ ์ ๋ง๋ก ๋์คํฌ์ ๋ฉํ๋ฐ์ดํฐ ์์์ด ๋ฐ์ํ๊ฒ ๋๋ค๋ฉด, ํ์ผ ์ ์ฒด๊ฐ ๊ผฌ์ด๊ฒ ๋๋ฉด์ ๋ณต๊ตฌ๊ฐ ์ ๋๊ฑฐ๋, ๋ณต๊ตฌ ํ๋ก๊ทธ๋จ์ ์ง์ ๋๋ ค์ผ ํฉ๋๋ค.
์ด๋ฐ ์ํ์ ์ํ ํ๊ธฐ ์ํด ํ์ผ ์ฐ๊ธฐ/์์ ์ ํธ๋์ญ์ ๊ณผ ๊ฐ์ ๊ฐ๋ ์ ๋์ ํ ๊ฒ์ด ์ ๋๋ง ํ์ผ ์์คํ ์ ๋๋ค.
๊ณผ์
- ์ฐ๊ธฐ ์์ฒญ์ด ๋ฐ์
- ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ์ ๋ด์ฉ, ๋ฉํ๋ฐ์ดํฐ(inode, ๋ธ๋ก ํ ๋น ํ ์ด๋ธ)์ ๋ฐ๊ฟ์ผ ํ๋ ์ํฉ
- ์ค์ ๋ณ๊ฒฝ์ ํ๊ธฐ ์ ์ ์ ๋ ์์ญ์ ์์ฑ
- ์ด ๋ธ๋ก์ A -> B ์ํ๋ก ๋ฐ๊พธ๊ฑฐ๋
- ํ์ผ์ A ์์น์์ B ์์น๋ก ์ฎ๊ธฐ๊ฑฐ๋
- ์ปค๋ฐ
- ์ ๋ ์์ญ์ ๊ธฐ๋ก์ด ์ฑ๊ณต์ ์ผ๋ก ์ ์ฅ๋ ํ์์ผ
- ์ค์ ํ์ผ ์์คํ ์ด ๋ฐ์ดํฐ ๋ธ๋ก๊ณผ ๋ฉํ ๋ฐ์ดํฐ ์์ ์ ์์ํฉ๋๋ค.
- ์ข
๋ฃ์ ์ ๋ฆฌ
- ๋ณ๊ฒฝ์ด ์๋ฃ๋๋ฉด, ์ ๋์์ ํด๋น ๊ธฐ๋ก์ ์ง์์ค๋๋ค.
์ฅ์
๋น ๋ฅธ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅ ํฉ๋๋ค! ์ฐ๊ธฐ/์์ ์์ ๋์ค ์์คํ ์ด ์ฃฝ๋๋ผ๋, ์ฌ๋ถํ ๋ ์ ๋ ์์ญ๋ง ํ์ธํด, โ์๋ฃโ ์ฒ๋ฆฌ ๋์ง ์์ ์์ ๋ง ๋กค๋ฐฑ ๋๋ ์ฌ์ ์ฉ ํ๋ฉด ๋ฉ๋๋ค.
๋จ์
์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ๊ฒช์ด์ผ ํฉ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ๋์ ํ๋ฒ, ์ค์ ์์ญ์ 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"