DB/REDIS

[Redis] ๋ ˆ๋””์Šค ์ •๋ฆฌ โ€ป

YeopJu 2024. 9. 10. 15:08
๋ฐ˜์‘ํ˜•

๋‹จ์ผ JVM์ด ์•„๋‹Œ ๋‹ค์ค‘ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ์˜ ๋™์‹œ์„ฑ ์ œ์–ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฝ ๋˜๋Š” Redis, Zookeeper ๋“ฑ์„ ์‚ฌ์šฉํ•œ ๋ถ„์‚ฐ ๋ฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ๋ ˆ๋””์Šค ๋ถ„์‚ฐ ๋ฝ ๋„์ž… ์ „์— ๋ ˆ๋””์Šค์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ฉฐ ๋ ˆ๋””์Šค Persistence์™€ ์ฃผ์˜ ์‚ฌํ•ญ, ์•„ํ‚คํ…์ฒ˜ ๋“ฑ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ๊ฒƒ๋“ค์— ๋Œ€ํ•ด ์ •๋ฆฌํ•  ์˜ˆ์ •์ด๋‹ค.

 


 

 

โ˜‘๏ธ ๋ ˆ๋””์Šค Persistence

๋ ˆ๋””์Šค๋Š” ์˜ˆ๊ธฐ์น˜ ๋ชปํ•˜๊ฒŒ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์„ ๋Œ€๋น„ํ•ด ๋‘๊ฐ€์ง€ Persistence ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

1๏ธโƒฃ RDB

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

 

๊ทธ๋ ‡๊ธฐ ๋–„๋ฌธ์— RDB ๋ฐฉ์‹์€ ์บ์‹œ๋กœ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ์ผ๋ถ€ ๋ฐ์ดํ„ฐ ์œ ์‹ค์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค.

 

 

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

`redis.conf` ํŒŒ์ผ์˜ `save` ์˜ต์…˜์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ cli์—์„œ `BGSAVE` ์ปค๋ฉ˜๋“œ๋ฅผ ํ†ตํ•ด์„œ ์ˆ˜๋™ ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋•Œ `SAVE` ์ปค๋ฉ˜๋“œ๋Š” Blocking ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜์—ฌ ์ง„ํ–‰ ์ค‘์ธ ๋‹ค๋ฅธ ์ž‘์—…๋“ค์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— `fork`๋ฅผ ํ†ตํ•ด ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” `BGSAVE` ์ปค๋ฉ˜๋“œ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•œ๋‹ค.

 

์œ„์™€ ๊ฐ™์€ ์ด์œ ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ๋•Œ์—๋Š” `del` ์ปค๋ฉ˜๋“œ ๋Œ€์‹  `unlink` ์ปค๋ฉ˜๋“œ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•œ๋‹ค.

 

//redis.conf ํŒŒ์ผ
save 900 1  // 900์ดˆ ๋™์•ˆ 1๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์žˆ์„ ๊ฒฝ์šฐ RDF ํŒŒ์ผ ์žฌ์ž‘์„ฑ

 

 

2๏ธโƒฃ AOF

AOF๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค Log๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. AOF๋Š” FSYNC ์ฃผ๊ธฐ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ์˜ ์œ ์‹ค์ด ์ „ํ˜€ ์—†๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์žฅ์•  ์ง์ „๊นŒ์ง€์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์žฅ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค.

 

 

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

`redis.conf` ํŒŒ์ผ์˜ `auto-aof-rewrite-percentage` ์˜ต์…˜์„ ํ†ตํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ˜„์žฌ AOF ํŒŒ์ผ ๋Œ€๋น„ AOF ํŒŒ์ผ ์žฌ์ž‘์„ฑ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋˜ํ•œ CLI์—์„œ `BGREWRITEAOF` ์ปค๋ฉ˜๋“œ๋ฅผ ํ†ตํ•ด AOF ํŒŒ์ผ ์žฌ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

APPENDFSYNC ์˜ต์…˜

  • always: ๋ ˆ๋””์Šค ๋ช…๋ น์ด ์‹คํ–‰๋  ๋•Œ ๋งˆ๋‹ค ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๋ฉฐ ์„ฑ๋Šฅ์ด ๋งค์šฐ ๋–จ์–ด์ง„๋‹ค.
  • everysec: ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ 1์ดˆ ๋งˆ๋‹ค ๋””์Šคํฌ์— ์“ด๋‹ค. Write()์™€ fsync() ์‹œ์Šคํ…œ ์ฝœ ํ˜ธ์ถœ์˜ ์ง€์—ฐ ์‹œ๊ฐ„์— ๋”ฐ๋ผ์„œ ์ตœ๋Œ€ 2์ดˆ ์ด๋‚ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์žƒ์–ด ๋ฒ„๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ์„ฑ๋Šฅ๊ณผ ๋ฐ์ดํ„ฐ ๋ณด์กด ์–‘ ์ธก๋ฉด์—์„œ ์ ์ ˆํ•œ ๊ฐ’์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์ธ ์˜ต์…˜์ด๋‹ค.
  • no: ๋””์Šคํฌ์— ์“ฐ๋Š” ์‹œ์ ์„ ์šด์˜์ฒด์ œ์— ๋งก๊ธด๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ฆฌ๋ˆ…์Šค ์‹œ์Šคํ…œ์—์„œ๋Š” 30์ดˆ ๋งˆ๋‹ค ๋””์Šคํฌ์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ 30์ดˆ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์‹คํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

โ˜‘๏ธ Redis ์ฃผ์˜ ์‚ฌํ•ญ

 

1. STOP-WRITES-ON-BGSAVE-ERROR

์ด ์„ค์ •์€ RDB ํŒŒ์ผ ์ €์žฅ ์‹คํŒจ ์‹œ redis๋กœ์˜ ๋ชจ๋“  write๋ฅผ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ `yes`๊ฐ€ ๊ธฐ๋ณธ ์„ค์ •๊ฐ’์œผ๋กœ ๋˜์–ด์žˆ๋‹ค.

ํ˜„์žฌ Redis๋Š” RDB ๋ฐฉ์‹๊ณผ AOF๋ฐฉ์‹์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์—๋Ÿฌ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ค์ •๊ฐ’์„ `NO`๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

 

2. MAXMEMORY-POLICY

ํ•ด๋‹น ์˜ต์…˜์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฐ€๋“ ์ฐผ์„ ๋•Œ์˜ ์ •์ฑ…์„ ๊ด€๋ฆฌํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์€ ์„ธ๊ฐ€์ง€ ์˜ต์…˜์ด ์กด์žฌํ•˜๋ฉฐ `allkeys-lru` ์˜ต์…˜์„ ๊ถŒ์žฅํ•œ๋‹ค.

  • noeviction (default) - ์‚ญ์ œํ•˜์ง€ ์•Š์Œ
  • volatile-lru - expire time์ด ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋Œ€์ƒ์œผ๋กœ LRU
  • allkeys-lru - ๋ชจ๋“  ํ‚ค๋ฅผ ๋Œ€์ƒ์œผ๋กœ LRU

3. MAXMEMORY ๊ฐ’ ์„ค์ •

RDB ์ €์žฅ๊ณผ AOF rewirte ์‹œ fork() ์‹œ์Šคํ…œ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ Copy-on-Write๋กœ ์ธํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‘๋ฐฐ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Persistence ์‚ฌ์šฉ ์‹œ MaxMentry๋Š” ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ ˆ๋ฐ˜์œผ๋กœ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.

 

4. MEMORY FRAGMENTATION ๊ด€๋ฆฌ

๋…ผ๋ฆฌ์ ์œผ๋กœ Redis๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์ธ `used_memory`์™€ OS๊ฐ€ Redis์— ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ์–‘์ธ `used_memory_rss`์˜ ์ฐจ์ด๊ฐ€ ํด ๊ฒƒ์€ fragmentation์ด ํฌ๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๋Š” TTL๋กœ ์ธํ•œ eviction์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ์‚ญ์ œ๋˜๋Š” ํ‚ค๊ฐ€ ๋งŽ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด `activedefrag` ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, redis ๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ์ด๋Š” ํ•ญ์ƒ ์ผœ๋‘๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹จํŽธํ™”๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์ž ์‹œ๋™์•ˆ ์ผœ๋‘๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

`CONFIG SET activedefrag yes`

 

 

 

โ˜‘๏ธ ๋ ˆ๋””์Šค ์•„ํ‚คํ…์ฒ˜

 

์ถœ์ฒ˜ : NHN FORWORD 2021 ๋ ˆ๋””์Šค ์•ผ๋ฌด์ง€๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ!   https://www.youtube.com/watch?v=92NizoBL4uA

 

 

1. Replication

Replication์€ Master-Replica ๊ตฌ์กฐ๋กœ, ๋ฐ์ดํ„ฐ ๋ณต์ œ๋Š” ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. Replica๋Š” Master๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•˜์ง€๋งŒ, ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์ˆ˜๋™์œผ๋กœ ๋ณต๊ตฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์ˆ˜๋™์œผ๋กœ ์ƒˆ๋กœ์šด Redis ์„œ๋ฒ„์˜ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

 

2. Sentinel

Redis Sentinel์€ ์ž๋™ Failover๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ณ ๊ฐ€์šฉ์„ฑ(HA) ๊ตฌ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. Sentinel์€ Master์™€ Replica๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ž๋™์œผ๋กœ Replica๋ฅผ Master๋กœ ์Šน๊ฒฉํ•œ๋‹ค. ๋˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Sentinel์„ ํ†ตํ•ด Redis์— ์—ฐ๊ฒฐํ•˜๋ฏ€๋กœ, ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Sentinel ์ž์ฒด๋„ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 3๊ฐœ ์ด์ƒ์˜ Sentinel ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ˆ์ •์„ฑ์„ ๋†’์—ฌ์•ผ ํ•œ๋‹ค๋Š” ์ฃผ์˜์‚ฌํ•ญ์ด ์กด์žฌํ•œ๋‹ค.

 

3. Cluster

 

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

 

 

 

 


 

โ˜‘๏ธ ๊ฒฐ๋ก 

 

Redis์—์„œ ๋‹ค๋ฃจ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ, ๋‹ค์–‘ํ•œ ์บ์‹œ ์ €์žฅ ๋ฐฉ์‹ ๋“ฑ ๋งŽ์€ ๋‚ด์šฉ๋“ค์ด ์žˆ์ง€๋งŒ ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Redis์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ฉฐ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ ๋œ ๊ฒƒ๋“ค์— ๋Œ€ํ•ด์„œ๋งŒ ์ •๋ฆฌํ•ด๋ดค๋‹ค. ์•ž์œผ๋กœ์˜ ๊ฐœ๋ฐœ ์ค‘ ๋งŒ๋‚˜๊ฒŒ ๋  ๋‹ค์–‘ํ•œ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„ ์ƒํ™ฉ์— ๋„์›€์ด ๋˜๋Š” ๊ธ€์ด ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

๋ฐ˜์‘ํ˜•