...

Redis ๋ฐ์ดํฐ์ ์์์ฑ (Redis Persistence)
Redis๋ In-memory DB ์์๋ ๋ถ๊ตฌํ๊ณ , ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ disk์ ์ ์ฅํ ์ ์๋ ํน์ง์ด ์๋ค.
๊ทธ๋์ ์๋ฒ๊ฐ ๊บผ์ง ํ restart๋๋๋ผ๋, disk์ ์ ์ฅํด๋์ ๋ฐ์ดํ๋ฅผ ๋ค์ ์ฝ์ด์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํ ์ ์ค๋์ง ์๋๋ค.
์ด๋ฐ Persistent(์์์ฑ) ๊ธฐ๋ฅ์ ํ๋ฐ์ฑ ๋ฉ๋ชจ๋ฆฌ DB๋ฅผ ๋ฐ์ดํฐ ์คํ ์ด๋ก์ ํ์ฉํ๋ค๋ ์ฅ์ ์ด ์์ง๋ง ์ด ๊ธฐ๋ฅ ๋๋ฌธ์ ์ฅ์ ์ ์ฃผ ์์ธ์ด ๋๊ธฐ๋ ํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์ด ๊ธฐ๋ฅ์ ์ ์์๋ณด๊ณ ์ฌ์ฉํ๋๊ฒ ์ค์ํ๋ค.
redis์์๋ ๋ฐ์ดํ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ด RDB (snapshotting) ๋ฐฉ์๊ณผ AOF (Append only file) ๋๊ฐ์ง๊ฐ ์๋ค.
- RDB ๋ฐฉ์์ ํน์ ํ ๊ฐ๊ฒฉ๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ ๋์ค ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ๋์คํฌ์ ์ฐ๋ ๊ฒ์ด๋ค. (๋ฐฑ์ ์ ์ฉ์ด)
- AOF ๋ฐฉ์์ ๋ช ๋ น์ด ์คํ๋ ๋ ๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ํ์ผ์ ๊ธฐ๋กํ์ฌ ๋ฐ์ดํฐ์ ์์ค์ด ๊ฑฐ์ ์๋ค.
์ด ๋๊ฐ์ง์ ๋ํด ์์ธํ ์์๋ณด๊ณ ์ฐจ์ด์ ๊ณผ ํ์ฉ๋ฒ์ ์์๋ณด์.

RDB (snapshotting) ๋ฐฉ์

Redis๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ผ์ ์ ์ฅํ๋๋ฐ, Redis ํ๋ก์ธ์ค๊ฐ ์ฅ์ ๋ก ์ธํด ์ข ๋ฃ๋๋๋ผ๋ ํด๋น ํ์ผ์ ์ฝ์ด๋ค์ด๋ฉด ์ด์ ์ ์ํ๋ฅผ ๋์ผํ๊ฒ ๋ณต๊ตฌํ ์ ์๋ค.
์ฐ๋ฆฌ๊ฐ ์ง์ ์ธํ ํ์ง ์๋๋ผ๋ Redis๋ ์๋์ผ๋ก .rdb ๋ผ๋ ํ์ฅ์์ ํ์ผ์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ก ๋ํดํธ ์ค์ ๋์ด์๋ค.

์ฆ, ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋์ด ์๋ ๋ฐฑ์ ๋ฐฉ์์ผ๋ก, ์์ dump.rdb ํ์ผ ๋ํ RDB ๋ฐฉ์์ผ๋ก ์์ฑ๋ ๊ฒ์ด๋ค.
RDB(snapthot)๋ ์๊ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ด์ฉ์ ์ค๋ ์ท์ ๋ ์ DISK์ ์ฎ๊ฒจ ๋ด๋ ๋ฐฉ์์ด๋ค.
์ค๋ ์ท์ ๋ฌ๋ค๋ ๋ง์ ํน์ ์์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ก ์ ์ฅํ๋ ๋ป์ด๋ค.
์ค๋ ์ท์ด๋ผ๋ ์ฉ์ด๋ Git์ด๋ AWS๋ฅผ ๋ฐฐ์๋ณด์ ๋ถ๋ค์ด๋ผ๋ฉด ์ต์ํ ์ฉ์ด์ผ ๊ฒ์ด๋ค. ๊ทธ๋์ ํน์ ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ฉฐ, ๋ ๋์ค ๋ฐ์ดํฐ์ ๋ฒ์ ๋ ๋ํ ๊ฐ๋ฅํ๋ค.
.rdb ํ์ผ์ AOF ํ์ผ๋ณด๋ค ์ฌ์ด์ฆ๊ฐ ์๋ค๋ ํน์ง์ด ์๋ค. ๋ฐ๋ผ์ ๋ก๋ฉ ์๋๊ฐ AOF ๋ณด๋ค ๋น ๋ฅด๋ค.
RDB ๋ RDBMS ๋ผ๋ ์คํด๋ฅผ ๋ง์ด ๋ฐ์ง๋ง RDB ๋ ๋จ์ํ ๋ฉ๋ชจ๋ฆฌ์ ์ค๋ ์ท์ ํ์ผ ํํ๋ก ์ ์ฅํ ๋ ์ฐ๋ ํ์ผ์ ํ์ฅ์๋ช ์ด๋ค.
์ค๋ ์ท์ ๋ฐ์ด๋๋ฆฌ ํ์ผ ํํ๋ก ์ ์ฅ๋์ด์ ์ง์ ์ฝ์ ์ ์๋ค.
RDB ๋ฐฉ์์ ๋ฉ๋ชจ๋ฆฌ์ snapshot์ ๊ทธ๋๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ฅผ ์ฌ๊ตฌ๋์ํ ๋ snapshot์ ๋ค์ ์ฝ์ผ๋ฉด ๋๋ฏ๋ก ์๋๊ฐ ๋น ๋ฅธ ์ฅ์ ์ด ์๋ค.
๊ทธ๋ฌ๋, snapshot์ ์ถ์ถํ๋๋ฐ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๊ณ ๋์ค์ ์๋ฒ๊ฐ ๊บผ์ง๋ฉด ์ดํ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ฌ๋ผ์ง๋ค๋ ๋จ์ ์ด ์๋ค.
์ค์ ๋ก SAVE ์ต์ ์ผ๋ก 50GB ์ ๋ฉ๋ชจ๋ฆฌ ์ํ๋ฅผ ์ ์ฅํ๋ค๋ฉด 7 ~ 8๋ถ ์ ๋ ์์๋๋ค๊ณ ํ๋ค.
RDB ์ค์ ํ๊ธฐ
RDB ๊ธฐ๋ฅ์ ์ด์ฉํ๋ ค๋ฉด Redis ์ค์ ํ์ผ์ธ redis.conf ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ์ถ๊ฐํด์ผํ๋ค. (์๋์ฐ OS๋ redis-windows-service.conf ๋ฅผ ์์ ํ๊ณ ์๋น์ค ์ฌ์์ ํ๋ฉด ์ ์ฉ๋๋ค)

RDB ์ค์ ํญ๋ชฉ
์ค์ ํญ๋ชฉ | ์ค์ ์ฌ๋ก | ์ค๋ช |
save | 900 1 | 900์ด(15๋ถ) ์ดํ 1๊ฐ์ ์ฐ๊ธฐ ๋ฐ์ |
save | 300 10 | 300์ด(3๋ถ) ์ดํ 10๊ฐ์ ์ฐ๊ธฐ ๋ฐ์ |
save | 60 10000 | 60์ด ์ดํ 10,000๊ฐ์ ์ฐ๊ธฐ ๋ฐ์ ์ ๋์คํฌ์ ๋ฐ์ดํฐ ๋ณต์ |
stop-writes-onbgsave-error | yes |
|
rdbcompression | yes | dump.rdb ํ์ผ์ LZF๋ก ์์ถ |
rdbchecksum | yes |
|
dbfilename | dump.rdb | ๋ณ๊ฒฝ ์ง์ ๊ฐ๋ฅ |
dir | ./ | dump.rdb ํ์ผ๊ณผ AOF ํ์ผ ์์ฑ ์์น |
์ ์ฅ ์์ ์ ํ๊ธฐ
RDB ์ ์ฅ ๋ฐฉ์์๋ SAVE์ BGSAVE ๋ ๊ฐ์ง๊ฐ ์๋ค.
- SAVE๋ ์๊ฐ์ ์ผ๋ก redis์ ๋์์ ์ ์ง์ํค๊ณ ๊ทธ snapshot๋ฅผ ๋์คํฌ์ ์ ์ฅ.(blocking ๋ฐฉ์)
- BGSAVE๋ ๋ฐฑ๊ทธ๋ผ์ด๋ SAVE ๋ผ๋ ์๋ฏธ๋ก ๋ณ๋์ ์์ ํ๋ก์ธ์ค๋ฅผ ๋์ด ํ, ๋ช ๋ น์ด ์ํ ๋น์์ snapshot์ disk์ ์ ์ฅํ๊ณ , redis๋ ๋์์ ๋ฉ์ถ์ง ์๊ฒ ๋๋ค. (non-blocking ๋ฐฉ์)
SAVE ๋์์์
1) Main process๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ RDB temp ํ์ผ์ ์ด๋ค.
2) ์ฐ๊ธฐ๊ฐ ๋๋๋ฉด ๊ธฐ์กด ํ์ผ์ ์ง์ฐ๊ณ , ์ ํ์ผ๋ก ๊ต์ฒดํ๋ค.
BGSAVE ๋์ ์์
1) Child process๋ฅผ fork() ํ๋ค.
2) Child process๋ ๋ฐ์ดํฐ๋ฅผ ์ RDB temp ํ์ผ์ ์ด๋ค.
3) ์ฐ๊ธฐ๊ฐ ๋๋๋ฉด ๊ธฐ์กด ํ์ผ์ ์ง์ฐ๊ณ , ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ค.
SAVE ์กฐ๊ฑด์ ์ฌ๋ฌ ๊ฐ๋ฅผ ์ง์ ํ ์ ์๊ณ , ๋ชจ๋ or ์กฐ๊ฑด์ด๋ค.
์ฆ ์ด๋ ๊ฒ ํ๋๋ผ๋ ๋ง์กฑํ๋ฉด ์ ์ฅํ๋ค.
๋ง์ผ RDB ์ ์ฅ์ ์ฌ์ฉํ์ง ์์ผ๋ ค๋ฉด redis.conf ์์ SAVE๋ฅผ ๋ชจ๋ ์ฃผ์ ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
BGSAVE ๋ฐฉ์์ fork๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฑฐ์ ๋๋ฐฐ ๊ฐ๋ ์ฌ์ฉํ๋ฏ๋ก ์ด์ ์ฃผ์ํด์ผ ํ๋ค.
# save [Seconds] [Changes]
save 900 1 # 900์ด(15๋ถ) ๋์ 1๋ฒ ์ด์ key ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด ์ ์ฅ
save 300 10 # 300์ด(5๋ถ) ๋์ 10๋ฒ ์ด์ key ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด ์ ์ฅ
save 60 10000 # 60์ด(1๋ถ) ๋์ 10000๋ฒ ์ด์ key ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด ์ ์ฅ
RDB ํ์ผ๋ช ์ง์
๋๋ ํ ๋ฆฌ๋ dir๋ก ์ง์ ๋ ์ํน๋๋ ํ ๋ฆฌ๋ฅผ ๋ฐ๋ฅธ๋ค.
dbfilename dump.rdb
RDB ์ ์ฅ ์คํจ์ ๋ฐ์ดํฐ ์ฝ๊ธฐ ์ฌ๋ถ
RDB ํ์ผ ์ ์ฅ์ด ์คํจํ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ค์ผ์ง ๋ง์ง๋ฅผ ์ ํ๋ ํ๋ผ๋ฏธํฐ์ด๋ค
stop-writes-on-bgsave-error yes
- ์ด ๊ฐ์ด yes ์ผ๋, ๋ ๋์ค๋ RDB ํ์ผ์ ๋์คํฌ์ ์ ์ฅํ๋ค ์คํจํ๋ฉด, ๋ชจ๋ ์ฐ๊ธฐ ์์ฒญ์ ๊ฑฐ๋ถํ๋ค.
์ฐ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ผ๋, ๋นจ๋ฆฌ ์กฐ์น๋ฅผ ์ทจํ๋ผ๋ ์๋ฏธ๋ค. default๋ yes์ด๋ค. - ์ด ๊ฐ์ no ๋ก ์ค์ ํ๋ฉด, ๋์คํฌ ์ ์ฅ์ ์คํจํ๋๋ผ๋, ๋ ๋์ค๋ ์ฐ๊ธฐ ์์ฒญ์ ํฌํจํ ๋ชจ๋ ๋์์ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๋ค.
๋์คํฌ ์ฐ๊ธฐ์ ์คํจํ๋ ๊ฒฝ์ฐ๋ ์ฌ์ ๊ณต๊ฐ์ด ๋ถ์กฑํ๊ฑฐ๋, ๊ถํ(permission) ๋ถ์กฑ, ๋์คํฌ ๋ฌผ๋ฆฌ์ ์ค๋ฅ ๋ฑ์ด ์์ ์ ์๋ค. - ์ด ํ๋ผ๋ฏธํฐ๋ save ์ด๋ฒคํธ์๋ง ํด๋นํ๋ค. BGSAVE ๋ช ๋ น์ ์ง์ ์ ๋ ฅํ์ ๊ฒฝ์ฐ์๋ ํด๋นํ์ง ์๋๋ค.
Redis-cli ์ด์ฉํ๊ธฐ
RDB ๊ด๋ จ info ์กฐํ
> info persistence
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1655100738
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:-1
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
์๋ SAVE ํ๊ธฐ
redis.conf ํ์ผ์ ์ค์ ํด์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋์๊ฐ๊ฒ ๋ง๋ค์ ์์ง๋ง, ์ง์ ํฐ๋ฏธ๋์์ ๋ช ๋ น์ผ๋ก๋ RDB ํ์ผ์ ์๋ ์์ฑํ ์ ์๋ค.
๋ฐ๋ก BGSAVE ๋๋ SAVE ๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด ๋๋ค.
> BGSAVE
Background saving started
AOF (Append Only File) ๋ฐฉ์

AOF(Append On File) ๋ฐฉ์์ redis์ ๋ชจ๋ write/update ์ฐ์ฐ ์์ฒด๋ฅผ ๋ชจ๋ log ํ์ผ์ ๊ธฐ๋กํ๋ ํํ์ด๋ค.
default๋ก appendonly.aof ํ์ผ์ ๊ธฐ๋ก๋๋ฉฐ, ์กฐํ๋ฅผ ์ ์ธํ ์ ๋ ฅ/์์ /์ญ์ ๋ช ๋ น์ด ์คํ๋ ๋ ๋ง๋ค ๊ธฐ๋ก๋๋ค
๊ทธ๋ฆฌ๊ณ ์๋ฒ๊ฐ ์ฌ์์๋ ๋, log์ ๊ธฐ๋ก๋ write/update ์ฐ์ฐ์ ์ฌ ์คํํ๋ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต๊ตฌํ๋ ๋ฐฉ์์ด๋ค.
์ฆ, ๋ค์๊ณผ ๊ฐ์ ์์๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ Redis ์ ์ ๋ฐ์ดํธ ๊ด๋ จ ๋ช ๋ น์ ์์ฒญํ๋ค.
- Redis ๋ ํด๋น ๋ช ๋ น์ AOF์ ์ ์ฅํ๋ค.
- ํ์ผ์ฐ๊ธฐ๊ฐ ์๋ฃ๋๋ฉด ์ค์ ๋ก ํด๋น ๋ช ๋ น์ ์ํํด์ Redis ๋ฉ๋ชจ๋ฆฌ์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๋ค.
์ด์ฒ๋ผ, operation์ด ๋ฐ์ํ ๋ ๋ง๋ค ๋งค๋ฒ ๊ธฐ๋กํ๊ธฐ ๋๋ฌธ, RDB ๋ฐฉ์๊ณผ๋ ๋ฌ๋ฆฌ ํน์ ์์ ์ด ์๋๋ผ ํญ์ ํ์ฌ ์์ ๊น์ง์ ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ ์ ์์ผ๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก non-blocking ์ผ๋ก ๋์ ๋๋ค.
AOF๋ log ํ์ผ์ ๋ํด์๋ง appendํ๊ธฐ ๋๋ฌธ์ log write ์๋๊ฐ ๋น ๋ฅด๊ณ ์ด๋ค ์์ ์ ์๋ฒ๊ฐ ๋ค์ด๋๋๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง์ง ์๋ ์ฅ์ ์ด ์๋ค.
RDB๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด๋ผ์ ์์ ์ด ๋ถ๊ฐ๋ฅํ์ง๋ง, AOF ๋ก๊ทธ ํ์ผ์ text ํ์ผ์ด๋ฏ๋ก ํธ์ง์ด ๊ฐ๋ฅํ๋ค.
Redis ๋ฐ์ดํฐ ๋ณต๊ตฌ ์๋๋ฆฌ์ค
๊ทธ๋์ ๋ง์ผ ์ค์๋ก flushall ๋ช ๋ น์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ ๋ ธ์ ๋, ๋ ๋์ค ์๋ฒ๋ฅผ shutdownํ๊ณ appendonly.aof ํ์ผ์์ flushall ๋ช ๋ น์ ์ ๊ฑฐ ํ ํ ๋ ๋์ค๋ฅผ ๋ค์ ์์ํ๋ฉด ๋ฐ์ดํฐ ์์ค์์ด ๋ฐ์ดํฐ๋ฅผ ์ด๋ฆด ์ ์๋ค.
๊ทธ๋ฌ๋, ๋ชจ๋ write/update ์ฐ์ฐ์ logํ์ผ์ ๋จ๊ธฐ๊ธฐ ๋๋ฌธ์ log ๋ฐ์ดํฐ ์์ด ๊ต์ฅํ ํฌ๊ณ , ๋ณต๊ตฌ ์ ์ ์ฅ๋ ๋ชจ๋ write/update์ฐ์ฐ์ ๋ค์ ์คํํ๊ธฐ ๋๋ฌธ์ ์ฌ์์ ์๋๊ฐ ๋๋ฆฐ ๋จ์ ์ด ์๋ค.
์๋ฅผ ๋ค์ด set ๋ช ๋ น์ด key๋ ๊ฐ๊ณ ๊ฐ์ ๋ค๋ฅธ ์กฐ๊ฑด์์ ์ฌ๋ฌ๋ฒ ์ํ๋์๋ค๊ณ ํ๋ฉด, ๋ฉ๋ชจ๋ฆฌ์๋ ๋ง์ง๋ง ์ํ๋ ๊ฐ๋ง ๋จ์์์ง๋ง, AOF์๋ ์ํ๋ ๋ชจ๋ ๊ธฐ๋ก์ด ๋จ์์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๊ธฐ์ AOF ๋ฐฉ์์ rewrite ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ํน์ ์์ ์ ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ๋ค์ ์ฐ๋ ๊ธฐ๋ฅ์ด ์๋ค.
rewrite๋ฅผ ์ํํ๋ฉด ์ด์ ๊ธฐ๋ก์ ๋ชจ๋ ์ฌ๋ผ์ง๊ณ ์ต์ข ๋ฐ์ดํฐ๋ง ๊ธฐ๋ก๋๊ธฐ์ ํ์ผ์ ํฌ๊ธฐ๊ฐ ์ค์ด๋ค๊ฒ ๋๋ค.
AOF ์ฌ์ฉ๋ฒ
AOF(APPEND ONLY MODE) ํญ๋ชฉ
์ค์ ํญ๋ชฉ | ์ค์ ์ฌ๋ก | ์ค๋ช |
appendonly | yes | AOF ํ์ผ ์ฌ์ฉ ์ฌ๋ถ |
appendfilename | "appendonly.aof" | AOF ํ์ผ ์ด๋ฆ ์ง์ |
appendfsync | always | ์ด์์ฒด์ ์ fsync( )์ ์ํ ์ง์ฐ๋ ์ฐ๊ธฐ ์ต์
(๋ฉ๋ชจ๋ฆฌ -> Disk)
|
no-appendfsync-on-rewrite | no | ์ฐ๊ธฐ ๋ช ๋ น์ ๋ํ fsync( ) ๋ฆฌํด ์ง์ฐ ์๊ฐ์ด ๋๋ฌด ๊ธธ์ด์ง๋ฉด ์ด์์ฒด์ ์ ๊ฐ์ญ์ด ์์ ์ ์์ผ๋ฏ๋ก, ์ค๋ ์ท ์์ฑ์ ์ํ BGSAVE ๋๋ AOF ํ์ผ ๊ธฐ๋ก์ ์ํ BGREWRITEAOF๊ฐ ์คํ๋๊ณ ์์ ๋๋ fsync( )์ ํธ์ถ์ ๋ธ๋กํน ํจ |
auto-aof-rewrite-percentage | 100 | AOF ํ์ผ ์ด๊ธฐํ ๋ฐ ์ฌ๊ธฐ๋ก ์์์ ์ํด ์ต์ด AOF ํ์ผ์ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ ๋น์จ์ ์ง์ (โ0โ์ผ๋ก ์ง์ ์ AOF ํ์ผ ์ด๊ธฐํ ์์) |
auto-aof-rewrite-min-size | 64mb | AOF ํ์ผ ์ด๊ธฐํ ๋ฐ ์ฌ๊ธฐ๋ก ์์์ ์ํด ํ์ผ ํฌ๊ธฐ๋ฅผ ์ง์ (โ0โ์ผ๋ก ์ง์ ์ AOF ํ์ผ ์ด๊ธฐํ ์์) |
redis.conf ์ค์ ๋ฐฉ์
๋ ๋์ค๋ ์๋ฒ๊ฐ ์์๋ ๋ ๋ฐ์ดํฐ ํ์ผ์ ์ฝ๋๋ค.
์ด๋ ์ด๋ค ๋ฐ์ดํฐ ํ์ผ์ ์ฝ์์ง๋ redis.conf ์ค์ ํ์ผ์ appendonlyfile ์ค์ ์ ๋ฐ๋ฅด๊ฒ ๋๋ค.
appendonly yes
- appendonlyfile yes : aof ํ์ผ์ ์ฝ์
- appendonlyfile no : rdb ํ์ผ์ ์ฝ์

AOF ํ์ผ๋ช ์ง์
Append only file ๋ช ์ ์ง์ ํ๋ ํ๋ผ์ดํฐ์ด๋ค.
์ด ํ๋ผ๋ฏธํฐ๋ appendonly๊ฐ yes์ผ๋ ์ ์ฉ๋๋ค.
์ด ํ๋ฆฌ๋ฏธํฐ๋ config set ๋ช ๋ น์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
appendfilename "appendonly.aof"
AOF์ ๊ธฐ๋ก๋๋ ์์ ์ง์
appendfsync๋ appendonly ํ์ผ์ ๋ฐ์ดํฐ๊ฐ ์ฐ์ฌ์ง๋ ์์ ์ ์ ํ๋ ํ๋ผ๋ฏธํฐ์ด๋ค.
AOF ๋ ํ์ผ์ ์ ์ฅํ ๋ ํ์ผ์ ๋ฒํผ ์บ์์ ์ ์ฅํ๊ณ ์ ์ ํ ์์ ์ ์ด ๋ฐ์ดํฐ๋ฅผ ๋์คํฌ๋ก ์ ์ฅํ๋๋ฐ appendfsync ๋ ๋์คํฌ์ ๋๊ธฐํ๋ฅผ ์ผ๋ง๋ ์์ฃผ ํ ๊ฒ์ธ์ง์ ๋ํด ์ค์ ํ๋ ๊ฐ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด 3๊ฐ์ง ์ต์ ์ด ์กด์ฌํ๋ค.
appendfsync everysec
ํ๋ผ๋ฏธํฐ ์ต์
- always : ๋ช ๋ น ์คํ ์ ๋ง๋ค AOF์ ๊ธฐ๋ก. ๋ฐ์ดํฐ ์ ์ค์ ๊ฑฐ์ ์์ง๋ง ์ฑ๋ฅ์ด ๋งค์ฐ ๋จ์ด์ง.
- everysec : 1์ด๋ง๋ค AOF์ ๊ธฐ๋ก. ๊ถ์ฅ
- no : AOF์ ๊ธฐ๋กํ๋ ์์ ์ OS๊ฐ ์ ํจ(์ผ๋ฐ์ ์ผ๋ก ๋ฆฌ๋ ์ค์ ๋์คํฌ ๊ธฐ๋ก ๊ฐ๊ฒฉ์ 30์ด). ๋ฐ์ดํฐ๊ฐ ์ ์ค๋ ์ ์์..
AOF Rewrite ์ค์
rewrite๋ AOF ํ์ผ์ ์ํ๊ฐ ํน์ ์กฐ๊ฑด(ํ์ผ ์ฌ์ด์ฆ๊ฐ ์ผ๋ง ์ด์) ์ผ ๋ AOF ํ์ผ์ ํ์ฌ ์ํ์ ๋ง์ถฐ์ ์ค์ ์ ๋ฐ๋ผ ๋ฎ์ด์ฐ๊ธฐ ํ๊ฑฐ๋ ์๋ก ์์ฑ๋๋ค.
์ฒ์ ๋ ๋์ค ์๋ฒ๊ฐ ์์ํ ์์ ์ AOF ํ์ผ ์ฌ์ด์ฆ๊ฐ 100% ์ด์ ์ปค์ง๋ฉด rewrite ํ๊ฒ ๋์ด์๋ค
๋ง์ฝ ๋ ๋์ค ์๋ฒ ์์ ์ AOF ํ์ผ ์ฌ์ด์ฆ๊ฐ 0์ด์๋ค๋ฉด, auto-aof-rewrite-min-size๋ฅผ ๊ธฐ์ค์ผ๋ก rewrite ํ๋ค
ํ์ง๋ง, min-size๊ฐ 64mb ์ดํ์ด๋ฉด rewrite๋ฅผ ํ์ง ์๋๋ฐ, ์ด๋ ํ์ผ์ด ์์ ๋ rewrite๊ฐ ์์ฃผ ๋ฐ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํจ์ด๋ค.
# AOF ํ์ผ ์ฌ์ด์ฆ๊ฐ ํน์ ํผ์ผํธ ์ด์ ์ปค์ง๋ฉด rewrite ํ๋ค.
# ๋น๊ต ๊ธฐ์ค์ ๋ ๋์ค ์๋ฒ๊ฐ ์์ํ ์์ ์ AOFํ์ผ ์ฌ์ด์ฆ์ด๋ค.
# 0์ผ๋ก ์ค์ ํ๋ฉด rewrite๋ฅผ ํ์ง ์๋๋ค
auto-aof-rewrite-percentage 100
# AOF ํ์ผ ์ฌ์ด์ฆ๊ฐ 64mb ์ดํ๋ฉด rewrite๋ฅผ ํ์ง ์๋๋ค.
# ํ์ผ์ด ์์๋ rewrite๊ฐ ์์ฃผ ๋ฐ์ํ๋ ๊ฒ์ ๋ง์์ค๋ค.
auto-aof-rewrite-min-size 64mb
AOF ํ์ผ์ ์ด์ฉํ ๋ณต๊ตฌํ๊ธฐ
๋ง์ผ ๋ช ๋ น์ด ์ค์๋ก redis db ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ ๋ ค๋จน์์ ๋์ ๋ณต๊ตฌ ๋ฐฉ๋ฒ์ ์์๋ณด์.
redis cli๋ฅผ ์คํํ๊ณ ํค a,b,c์ ๊ฐ์ ๋์ ํ ๋ค flushall ์ปค๋งจ๋๋ฅผ ์คํํด ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ง์๋ฒ๋ ธ๋ค.
> set a 11
OK
> set b 22
OK
> set c 33
OK
> keys *
1) "b"
2) "a"
3) "c"
> flushall
OK
> keys *
(empty list or set)
appendonly.aof ํ์ผ ํ์
๋ง์ผ redis ๋ช ๋ น์ด๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์คํํ๋ฉด appendonly.aof ํ์ผ์ ๋ก๊ทธ๊ฐ ์์ด๊ฒ ๋๋ค.
- AOF๋ ๋ช ๋ น ์คํ ์์๋๋ก ํ ์คํธ๋ก ์ฐ์ฌ์ฆ๋ฉฐ ํธ์ง์ด ๊ฐ๋ฅํ๋ค.
- * ๋ ๋ช ๋ น ์์์ ๋ํ๋ธ๋ค. ์ซ์๋ ๋ช ๋ น๊ณผ ์ธ์์ ๊ฐ์์ด๋ค.
- $ ๋ ๋ช ๋ น์ด๋ ์ธ์, ๋ฐ์ดํฐ์ ๋ฐ์ดํธ ์์ด๋ค. (ํ๊ธ์ UTF8๋ก ํ์ ๊ฒฝ์ฐ ํ ๊ธ์์ 3๋ฐ์ดํธ)
*2
$6
SELECT
$1
0
*3
$3
set
$1
a
$2
11
*3
$3
set
$1
b
$2
22
*3
$3
set
$1
c
$2
33
*1
$8
flushall
์ด์ aof ํ์ผ ๋ง์ง๋ง์ flushall ์ ํ์๋ ๋ถ๋ถ์ ์ง์์ฃผ๊ณ ์ ์ฅํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ ๋์ค๋ฅผ ์ฌ๊ธฐ๋ ํด์ฃผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ณต๊ตฌ๊ฐ ๋์ด์์์ ํ์ธ ํ ์ ์๋ค.


Redis-cli ์ด์ฉํ๊ธฐ
์๋ Rewrite
AOF Rewrite๋ BGREWRITEAOF ์ปค๋ฉ๋๋ฅผ ์ด์ฉํด CLI ์ฐฝ์์ ์๋์ผ๋ก AOF ํ์ผ ์ฌ์์ฑํ ์ ์๋ค.
> BGREWRITEAOF
Background append only file rewriting started
RDB vs AOF ์ ํ ๊ธฐ์ค
RDB ์ฌ์ฉ ์ฃผ์ํ ์
RDB(Snapshot) ๋ฐฉ์์ ๋ฌธ์ ์ ์ ๋งค์ฐ ๋ช ํํ๋ฐ, Redis์ ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๋ ๋ฐฑ์ ์์ ์ ์ ์ธํ ์ค๊ฐ ์์ ์์ ๋ฐ์ํ ๋ฐ์ดํฐ๋ ์ ์ค๋ ์ ์๋ค๋ ๊ฒ์ด๋ค.

๊ทธ๋ฆฌ๊ณ rdb ํ์ผ์ ์์ฑํ๋ cli ๋ช ๋ น์ด save ๋ single thread๋ก ์ํํ๊ธฐ ๋๋ฌธ์ ์์ ์ด ์๋ฃ๋๊ธฐ ๊น์ง ๋ชจ๋ ์์ฒญ์ด ๋๊ธฐํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ bgsave ์ปค๋งจ๋๋ก background ์์ ํ๋ก์ธ์ค๋ฅผ ํตํด RDB ์์ ์ํํ๋๋ก ํ ๊ฒ์ ๊ถ์ฅ๋๋ ํธ์ด๋ค.
๊ทธ๋ฌ๋ bgsave ์ปค๋งจ๋ ์ํ ์์ memory ์ฌ์ฉ๋ฅ ์กฐ์ฌํด์ผ ๋๋ค.
redis ์๋น์ค์์ ์ฌ์ฉ์ค์ธ ๋ฐ์ดํฐ๋ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์๋๋ฐ ์ด๋ฅผ โ์๋น์ค ์ํฅ ์์ดโ ์ค๋
์ท์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด์๋ Copy-on-Write(COW) ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์์ ํ๋ก์ธ์ค fork() ํ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์์ ์ค์ ๋ก ๋ณ๊ฒฝ์ด ๋ฐ์ํ ๋ถ๋ถ๋ง ๋ณต์ฌํ๊ฒ ๋๋๋ฐ, ๋ง์ผ write ์์
์ด ๋ง์์ ๋ถ๋ชจ ํ์ด์ง ์ ๋ถ์ ๋ณ๊ฒฝ์ด ๋ฐ์ํ๊ฒ ๋๋ฉด ๋ถ๋ชจ ํ์ด์ง ์ ๋ถ๋ฅผ ๋ณต์ฌํ๊ฒ ๋๋ ํ์์ด ๋ฐ์ํ๊ฒ ๋๋ค.
์๋ฅผ๋ค์ด, ์๋ฒ memory 10GB, redis memory 6GB ์ฌ์ฉํ๋ ์๋น์ค์์ RDB ์ํ ์ค Copy-on-Write(COW)๋ฅผ ์คํํ์ฌ๋ฐฑ์ ํ๋๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋๋ฐฐ๊ฐ ํ์ํ๋ค๊ณ ํ์.
๊ทธ๋ฌ๋ฉด 2GB ๊ฐ ๋ถ์กฑํ ์ํฉ ์ค๊ฒ ๋๋๋ฐ ๊ทธ๋ฌ๋ฉด swap ์ด ๋ฐ์ํ์ฌ ์๋น์ค ์ง์ฐ์ด ๋ฐ์ํ๊ฒ ๋๋ฏ๋ก, redis์ max-memory ์ค์ ์ ์ฃผ์ ๊น๊ฒ ํด์ผ ๋๋ค.
save ์ปค๋งจ๋๋ redis process๊ฐ ์ง์ ์ํํ์ฌ Copy-on-Write(COW)๊ฐ ๋ฐ์ํ์ง ์์ ๋ฌธ์ ๋ ์๋ค.


AOF ์ฌ์ฉ ์ฃผ์ํ ์
์ธ๋ป ๋ณด๋ฉด "์ฐ๊ธฐ ์์ ์ ๊ธฐ๋ก์ ์ ์ฅํด replayํ๋ ํ์์ผ๋ก ๋ณต๊ตฌ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ์ ์ด๊ณ ์ ์ด์์ ์ด์ง ์๋๋" ๋ผ๊ณ ์๊ฐํ ์ ์์ผ๋, ๋จ์ํ ๊ทธ๋ ์ง๋ง์ ์๋ค.
์๋ฅผ ๋ค์ด 100๋ฒ์ Increment ์์ ์ ํตํด 0์ ๋ฐ์ดํฐ๋ฅผ 100์ผ๋ก ๋ง๋ค์๋ค๊ณ ์๊ฐํด๋ณด์.
๊ทธ๋ ๋ค๋ฉด ์ต์ข ์ ์ผ๋ก ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ๋ 100์ด์ง๋ง, AOF ๋ฐฉ์์์ ๊ธฐ๋ก๋ ํ์ผ์ ์ฝ์ด์ ๋ณต๊ตฌํ๋ ค๋ฉด ๋ถํ์ํ๊ฒ 100๋ฒ์ Increment ์ฐ๊ธฐ ์์ ์ ๋ฌด์ํ๊ฒ ์คํํด์ผ๋ง ํ๋ค.
RDB ๋ฐฉ์์์๋ 100์ด๋ ๊ฐ์ ๋จ์ํ ์ฝ์ด์ค๊ธฐ๋ง ํ๋ฉด ๋๋๋ฐ๋ ๋ง์ด๋ค.
๋ฟ๋ง ์๋๋ผ RDB ๋ฐฉ์์ ๋นํด ๋ฐฑ์ ๋ฐ์ดํฐ๊ฐ ํฌ๊ธฐ๋ ํ๊ณ , ์๋ฒ ์์ ๋ํ ๋ง์ด ์ก์๋จน๋ ํธ์ด๋ค.

๋ฐ๋ผ์ Redis์ ๊ณต์ ๋ฌธ์์์๋ RDB์ AOF ๋ฐฉ์์ ์ ์ ํ ํผ์ฌํด์ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํ๊ณ ์๋ค.
๋ํ Redis์ ๋ก๋๋งต์ผ๋ก์ ์ถํ์ AOF์ RDB ๋ฐฉ์์ ํฉ์น๋ ๊ฒ์ ๊ณํ ์ค์ ์๋ค๊ณ ํ๋ค.
๋ฐ๋ผ์ ํ์ฌ ์์ ์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๊ฐ ๋ฐฉ์์ trade-off๋ฅผ ์ ํํ ์ดํดํ๊ณ ์ ์ฉํ๋ ๊ฒ์ด ๋๊ฒ ๋ค.
RDB vs AOF ์ ํ
๊ทธ๋ผ ์ด๋ ๊ฒฝ์ฐ์ AOF ์ RDB ์ค ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํด ํ์ผ์ ์ฝ์๊น?
์ฐ์ redis๋ฅผ ์บ์๋ก๋ง ์ฌ์ฉํ๋ค๋ฉด "๊ตณ์ด" ๋ฐฑ์ ๊ธฐ๋ฅ์ ํ์ ์๋ค. ์ ์ฅ ๊ณต๊ฐ ๋ญ๋น๊ฐ ๋ ์ ์๋ค.
๊ทธ๋๋ ๋ฐฑ์ ์ ํ์ํ์ง๋ง ์ด๋ ์ ๋์ ๋ฐ์ดํฐ ์์ค์ด ๋ฐ์ํด๋ ๊ด์ฐฎ์ ๊ฒฝ์ฐ, RDB๋ฅผ ๋จ๋ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ๋ค.
redis.conf ํ์ผ์์ SAVE ์ต์ ์ ์ ์ ํ๊ฒ ๋ณ๊ฒฝํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
SAVE 900 1 # 900์ด ๋์ 1๊ฐ ์ด์ ํค๊ฐ ๋ณ๊ฒฝ๋์์ ๋ RDB ํ์ผ ์ฌ์์ฑ
ํ์ง๋ง, ์ฅ์ ์ํฉ ์ง์ ๊น์ง ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ณด์ฅ๋์ด์ผ ํ ๊ฒฝ์ฐ AOF ์ฌ์ฉ (appendonly yes) ํ๋ฉด ๋๋ค.
appendfsync everysec
๊ทธ๋ ์ง๋ง RDB์ AOF ๋ฐฉ์์ ์ฅ๋จ์ ์ ์์ํ๊ธฐ ์ํด์ ๋๊ฐ์ง ๋ฐฉ์์ ํผ์ฉํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์ฃผ๊ธฐ์ ์ผ๋ก RDB(snapshot)์ผ๋ก ๋ฐฑ์ ํ๊ณ , ๋ค์ snapshot๊น์ง์ ์ ์ฅ์ AOF ๋ฐฉ์์ผ๋ก ์ํํ๋ ์์ผ๋ก ํผ์ฉํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์๋ฒ๊ฐ restart๋ ๋ ๋ฐฑ์ ๋ snapshot์ reloadํ๊ณ , ๋น๊ต์ ์ ์ ์์ AOF ๋ก๊ทธ๋ง replayํ๋ฉด ๋๊ธฐ ๋๋ฌธ์, restart ์๊ฐ์ ์ ์ฝํ๊ณ ๋ฐ์ดํ์ ์ ์ค์ ๋ฐฉ์งํ ์ ์๋ค.
# ์ฐธ๊ณ ์๋ฃ
https://rmcodestar.github.io/redis/2018/12/10/redis-persistence/
์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.