SlideShare a Scribd company logo
์ธํ”„๋ผ ์šด์˜์ž๋ฅผ ์œ„ํ•œ
Redis ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…
Clark.kang
charsyam@naver.com
๋ชฉ์ฐจ
โ€ข Redis ํŠน์„ฑ ์†Œ๊ฐœ
โ€“ Single Threaded
โ€ข ์žฅ์•  ์‚ฌ๋ก€ ๋ฐ ๋Œ€์‘๋ฒ•
โ€“ G ์„œ๋น„์Šค ์žฅ์•  ์‚ฌ๋ก€
โ€“ P ์„œ๋น„์Šค ์žฅ์•  ์‚ฌ๋ก€
โ€“ S ์„œ๋น„์Šค ์žฅ์•  ์‚ฌ๋ก€
โ€ข Redis ๋ณด์•ˆ ์ด์Šˆ
Single Threaded #1
Client #1
Client #2
โ€ฆโ€ฆ
Client #N
Redis Event Loop
I/O Multiplexing
Process
Command
Packet #1
Packet #2
Single Threaded #2
โ€ข ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ช…๋ น๋งŒ ์ฒ˜๋ฆฌ ๋จ.
โ€ข ๊ธด ์ž‘์—…์„ ํ˜ธ์ถœํ•˜๋ฉด Redis ์˜ ๋‹ค๋ฅธ ๋ช…๋ น๋“ค์€ ์ „๋ถ€ Pending ๋จ
โ€“ Keys, flushall, flushdb, lua script, MULTI/EXEC
โ€ข ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ๊ธด ํ•˜์ง€๋งŒ fsync ์šฉ์ž„.
์–ผ๋งˆ๋‚˜ ๋Š๋ฆฐ๊ฐ€?
Command Item Count Time
flashall 1,000,000 1000ms(1 second)
์ถ”์ฒœ ๋ฒ„์ „ #1
โ€ข ๊ฐ€๋Šฅํ•œ ์ตœ์‹  ๋ฒ„์ „
โ€“ 3.0.x ๋„ ๊ดœ์ฐฎ์Œ.
โ€“ ์•„๋‹ˆ๋ฉด 2.8.x ํ›„๋ฐ˜๋Œ€(์ตœ์†Œ 2.8.13 ์ดํ›„๊ฐ€ ์œ ๋ฆฌ)
โ€ข ๋ฒ„์ „๋งˆ๋‹ค ์•ฝ๊ฐ„์”ฉ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Œ.(์ตœ์‹  ๋ฒ„์ „์ด ์ ค ์ข‹์Œ)
โ€“ 2.6.x ์—์„œ๋Š” config set client-output-buffer-limit ์€ redis-
cli ์—์„œ๋งŒ ๊ฐ€๋Šฅ
โ€“ 2.8.20์—์„œ๋Š” config set client-output-buffer-limit ์—์„œ 1GB
์ด๋Ÿฐ ํ‘œํ˜„์ด ์•ˆ๋จ
๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™” #1
โ€ข Jemalloc ์ด 3.6.0 ์ด์ „ ๋ฒ„์ „
๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™” #2
โ€ข Jemalloc ์ด 3.6.0 ์ดํ›„๋ฒ„์ „
โ€“ ๊ทธ๋ž˜๋„ ์ฃผ์˜๊ฐ€ ํ•„์š”.
์ถ”์ฒœ ํด๋ผ์ด์–ธํŠธ(๋งค๋‹ˆ์ง€๋จผํŠธ์šฉ)
โ€ข Redis-cli ๋ฅผ ์“ฐ์„ธ์š”.
โ€“ ๊ถŒ์žฅ ์ถ”์ฒœ
โ€ข telnet ๋„ ๊ฐ€๋Šฅ
โ€“ Inline command ๋ผ๊ณ  ํ•ด์„œ ํ•œ์ค„์งœ๋ฆฌ๋Š” ๋ ˆ๋””์Šค๊ฐ€ ์•Œ์•„์„œ ํ•ด์„
โ€“ Inline command๋Š” twemproxy์—์„œ๋Š” ์ง€์›๋˜์ง€ ์•Š์Œ
โ€“ ๊ตฌ๋ฒ„์ „์˜ ๊ฒฝ์šฐ๋Š” ์•ˆ๋จน๋Š” ์ปค๋งจ๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์Œ
์„œ๋น„์Šค ํŒ€์— ์ œ๊ณต์‹œ ์œ ์˜ ์‚ฌํ•ญ
โ€ข ์บ์‹œ์ธ์ง€ ์ €์žฅ์šฉ์ธ์ง€์— ๋Œ€ํ•ด์„œ ํ™•์ธ์ด ํ•„์š”
โ€“ ์บ์‹œ์šฉ์ด๋ผ๋ฉด, SAVE ์˜ต์…˜์€ ๋ฌด์กฐ๊ฑด ๋„๊ณ  ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
โ€“ ์ €์žฅ์šฉ์ผ๋•Œ๋„, ํ•ด๋‹น ์˜ต์…˜์— ๋Œ€ํ•œ ์กฐ์ ˆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
โ€ข ํ•˜๋‚˜์˜ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ์ ์ ˆํžˆ
์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋„์šฐ๋„๋ก ๊ฐ€์ด๋“œํ•ฉ๋‹ˆ๋‹ค.
โ€“ 16G ๋ฉด 11G, 12G๋ฅผ ์“ฐ๋Š”๊ฒƒ๋ณด๋‹ค๋Š” 6G * 2 ๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋” ์ข‹์Œ.
โ€ข ๊ธฐ๋ณธ์ ์œผ๋กœ maxmemory๋ฅผ ์„ค์ •ํ•ด ๋‘๋Š” ๊ฒƒ์ด ์œ ๋ฆฌ.
์„œ๋น„์Šค ํŒ€์— ์ œ๊ณต์‹œ ์œ ์˜ ์‚ฌํ•ญ
โ€ข CPU 4 core 32G Memory
Mem: 26G
Mem: 8G
Mem: 8G
Mem: 8G
Replication
Redis Replication
โ€ข Redis๋Š” Single Thread
โ€“ Replication์„ ์œ„ํ•ด์„œ fork๋ฅผ ํ•˜๊ฒŒ ๋จ
โ€ข Chained replication์„ ์ง€์›
โ€“ Multi-Master ๋˜๋Š” ์–‘๋ฐฉํ–ฅ Replication์€ ์ง€์› ์•ˆํ•จ
โ€ข Replication์„ ํ•ด์•ผํ•  ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์‹ ๊ฒฝ์จ
์•ผ ํ•จ.
Replication
โ€ขSupport Chained Replication
Master 1st Slave 2nd Slave
1st slave is master of 2nd slave
Replication
Master Slave
replicationCron
Health check
Replication
Master Slave
replicationCron
Health check
Replication
Master Slave
replicationCron
When master reruns, Resync with Master
Mistake: Replication
Master Slave
replicationCron
Slave will has no data after resyncing
If master has no data.
Persistent
Persistent ๋ผ๊ณ  ์“ฐ๊ณ 
Hell Gate๋ผ๊ณ  ์ฝ์œผ์„ธ์š”.
RDB/AOF
โ€ข RDB/AOF๋Š” ์™„์ „ํžˆ ๋ณ„๊ฐœ์˜ ๊ธฐ๋Šฅ(์„œ๋กœ ์—ฐ๊ด€์„ฑ์ด ์—†์Œ)
โ€ข RDB
โ€“ ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค๋ฅผ Fork ํ•ด์„œ ํ˜„์žฌ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ๋””์Šคํฌ๋กœ ๋คํ”„ํ•จ.
โ€“ COW์— ์˜ํ•ด์„œ ์ฝ๊ธฐ๊ฐ€ ๋งŽ์„ ๋•Œ๋Š” ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ ์ง€๋งŒ,
write ๊ฐ€ ๋งŽ์œผ๋ฉด ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ 2๋ฐฐ๊นŒ์ง€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
โ€ข AOF
โ€“ ํ˜„์žฌ ๋ ˆ๋””์Šค์˜ write ์ปค๋งจ๋“œ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•จ.
โ€“ Disk Sync ์˜ต์…˜์— ๋”ฐ๋ผ์„œ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์คŒ(default: everysec)
โ€“ AOF rewrite๊ฐ€ ์ผ์–ด๋‚˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ทธ๋ž˜๋„ ๋ถ€ํ•˜๊ฐ€ ์ ์Œ.
ํ”ผํ•ด๊ฐ€๊ณ  ์‹ถ์–ด๋„
๋ฌด์กฐ๊ฑด ๊ฒช๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
(์žฅ๋น„ ์ด์ „ ์ด์Šˆโ€ฆ)
Migration
Migration ๋ฐฉ๋ฒ•
1. ํ˜„์žฌ ์žฅ๋น„์— ๋Œ€ํ•ด์„œ ๋Œ€์ฒด ์žฅ๋น„๋ฅผ ์ค€๋น„
2. ๋Œ€์ฒด ์žฅ๋น„์—์„œ slave of ํ˜„์žฌ์žฅ๋น„ IP ํ˜„์žฌ์žฅ๋น„ port
3. Replication ์™„๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆผ
1. ์ด๋•Œ ๋ฌด์กฐ๊ฑด fork ๊ฐ€ ๋ฐœ์ƒ(๋ฉ”๋ชจ๋ฆฌ ๋‘๋ฐฐ ์ด์Šˆ ๋ฐœ์ƒ ๊ฐ€๋Šฅ)
4. Replication์ด ๋๋‚˜๋ฉด Slave ์žฅ๋น„์—์„œ ์“ฐ๊ธฐ ํ™œ์„ฑํ™”
1. Config set slave-read-only no
5. ํด๋ผ์ด์–ธํŠธ๋“ค์ด ๋Œ€์ฒด ์žฅ๋น„๋ฅผ ๋ฐ”๋ผ๋ณด๋„๋ก ์„ค์ •
6. ๋Œ€์ฒด ์žฅ๋น„์—์„œ ๋‹ค์Œ ๋ช…๋ น ์ˆ˜ํ–‰
1. slaveof no one
Partial Sync
Redis Replication ๊ณผ์ •
1. Slave ๊ฐ€ Master๋กœ Sync ๋ช…๋ น์„ ๋ณด๋ƒ„
2. Master๋Š” Fork ํ•˜์—ฌ RDB ์ƒ์„ฑ
3. RDB ์ƒ์„ฑ์ด ๋๋‚˜๋ฉด Master๋Š” RDB๋ฅผ Slave๋กœ ์ „์†ก
4. ํ•ด๋‹น ์‹œ๊ฐ„๋™์— master๊ฐ€ ๋ฐ›๋Š” ๋ช…๋ น์–ด๋Š” memory์— ์ €์žฅ
5. RDB ์ „์†ก์ด ๋๋‚˜๋ฉด Slave ๊ฐ€ ํ•ด๋‹น RDB Load
6. Slave์˜ RDB ๋กœ๋“œ๊ฐ€ ๋๋‚˜๋ฉด Master๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์Œ“์ธ ๋ฐ์ดํ„ฐ ์ „
์†ก
Redis Repliaction์˜ ๋ฌธ์ œ์ 
โ€ข Redis์˜ ๊ฒฝ์šฐ ๋งˆ์Šคํ„ฐ ์Šฌ๋ ˆ์ด๋ธŒ ์ƒํ™ฉ์—์„œ Master๋ž‘ ์—ฐ๊ฒฐ์ด ์ž ์‹œ
๋ผ๋„ ๋Š์–ด์ง€๋ฉด, Slave๋Š” Master์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ Full Sync ๋ฐ›๋Š”๋‹ค.
โ€“ Disk IO๋Š” ๋น„์Œˆ
โ€ข Slave๋Š” Master ์ƒํƒœ๋ฅผ ๊ณ„์† ํด๋ง์œผ๋กœ ์ฒดํฌํ•จ.
Partial Sync
โ€ข Master์™€์˜ ์ ‘์†์ด ๋Š๊ธฐ๊ณ  ๋‹ค์‹œ ์—ฐ๊ฒฐ๋  ๋•Œ, ๊ธฐ์กด๊ณผ ๋™์ผํ•œ master
๋ผ๋ฉด, ๊ทธ๋ฆฌ๊ณ  master์˜ memory buffer ๋ฒ”์œ„ ๋‚ด๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€
๊ฒฝ๋˜์—ˆ๋‹ค๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋งŒ ์ „์†ก ๋ฐ›์•„์„œ full sync๋ฅผ ํ”ผํ•จ.
โ€“ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์—†์–ด๋„, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด PING ๋“ฑ์˜ ๋ฉ”์‹œ์ง€๋กœ ์ธํ•ด์„œ ๋ฒ„ํผ๊ฐ€
์ฐฐ ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒŒ ํ•จ์ •.
โ€ข ๋‹ค๋งŒ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ์—๋Š” Partial Sync๋Š” ์•ˆ๋จ
โ€“ ์ฆ‰, ์žฅ์• ๋กœ ๋งˆ์Šคํ„ฐ ์žฅ๋น„ ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ๋ฉดโ€ฆ slave๋Š” ๋ฌด์กฐ๊ฑด full sync
์žฅ์•  ์‚ฌ๋ก€
T๋ชจ ์„œ๋น„์Šค
โ€ข ์ƒํ™ฉ
โ€“ ์บ์‹œ๋กœ๋งŒ ์‚ฌ์šฉ
โ€ข Redis ์„ค์ •
โ€“ stop-writes-on-bgsave-error yes
โ€ข ์žฅ์•  ํ˜„์ƒ
โ€“ RDB ์ƒ์„ฑ ์‹คํŒจ ํ›„, write ๊ฐ€ ๊ณ„์† ์‹คํŒจ.
โ€“ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅ
โ€ข ์žฅ์•  ์ฒ˜๋ฆฌ
โ€“ stop-writes-on-bgsave-error no ๋กœ ์„ค์ •
โ€“ ํ•ด๋‹น ๊ฐ’์ด yes ๋ฉด RDB ์ƒ์„ฑ์— ์‹คํŒจํ•˜๋ฉด write ๋ช…๋ น์„ ๋ชจ๋‘ ์—๋Ÿฌ๋ƒ„.
G๋ชจ ์„œ๋น„์Šค
โ€ข ์ƒํ™ฉ
โ€“ ์บ์‹œ๋กœ๋งŒ ์‚ฌ์šฉ
โ€ข Redis ์„ค์ •
โ€“ SAVE ๊ฐ€ ๋””ํดํŠธ ์˜ต์…˜
โ€“ SAVE 900 1
โ€“ SAVE 300 10
โ€“ SAVE 60 10000
โ€ข ์žฅ์•  ํ˜„์ƒ
โ€“ ์งง์€ ์‹œ๊ฐ„์— ๊ณ„์† RDB๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด์„œ Disk IO๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒ
โ€ข ์žฅ์•  ์ฒ˜๋ฆฌ
โ€“ SAVE ๊ฐ’์„ ์ œ๊ฑฐ(config set SAVE โ€œโ€)
S๋ชจ ์„œ๋น„์Šค
โ€ข ์ƒํ™ฉ
โ€“ ์บ์‹œ์™€ ์ผ๋ถ€ ๋ณต๊ตฌ๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ.
โ€“ ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ 32G ์—์„œ 28G ์‚ฌ์šฉ
โ€“ ๋””์Šคํฌ ์žฅ์• ๋„ ์žˆ๋˜ ์ƒํ™ฉ
โ€ข ์žฅ์•  ํ˜„์ƒ
โ€“ Swap memory ์‚ฌ์šฉ์œผ๋กœ ์‘๋‹ต์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚จ.
โ€“ RDB ์ƒ์„ฑ์— ์—„์ฒญ๋‚œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ(28G ๋ฉ”๋ชจ๋ฆฌ dump์— 7์‹œ๊ฐ„ ์ด์ƒ ๊ฑธ๋ฆผ)
โ€ข ์žฅ์•  ์ฒ˜๋ฆฌ
โ€“ ๊ทธ๋ƒฅ ํฌ๊ธฐ(T.T)
Copy on Write
โ€ข ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ Page ์— Write ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๋งˆ๋‹ค, ํ•ด๋‹น
๋ฉ”๋ชจ๋ฆฌ Page๋ฅผ ๋ณต์‚ฌํ•˜๊ฒŒ ๋œ๋‹ค.
โ€ข ์ฝ๊ธฐ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถ”๊ฐ€๋กœ ๋ณต์‚ฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
Copy on Write #1
Process - Parent
Physical Memory
Page A
Page B
Page C
Copy on Write #2 โ€“ Fork(), ๋ฉ”๋ชจ๋ฆฌ ์ˆ˜์ • ์ „
Process - Parent
Physical Memory
Page A
Page B
Page C
Process - Child
Copy on Write #2 โ€“ Fork(), ๋ฉ”๋ชจ๋ฆฌ ์ˆ˜์ • ํ›„
Process - Parent
Physical Memory
Page A
Page B
Page C
Copy of Page C
Process - Child
Copy on Write ๊ฒฐ๋ก 
โ€ข ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‘ ๋ฐฐ ๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€“ ๋ชจ๋“  Page ์— write๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ
โ€ข ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์„œ ์Šค์™‘ ์˜์—ญ์„ ์‚ฌ์šฉํ•˜๋ฉด ์—„์ฒญ๋‚˜๊ฒŒ ๋Š๋ ค์ง€๊ฒŒ ๋œ๋‹ค.
P๋ชจ ์„œ๋น„์Šค(#1)
โ€ข ์ƒํ™ฉ
โ€“ AOF ์‚ฌ์šฉ
โ€“ 8๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ 256G ์žฅ๋น„์—์„œ ๋™์ž‘
โ€ข ์žฅ์•  ํ˜„์ƒ
โ€“ 8๊ฐœ์˜ AOF๊ฐ€ ์ „๋ถ€ AOF Rewrite๊ฐ€ ๋ฐœ์ƒ
โ€“ ๊ณผ๋„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๊ณผ Disk ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ์žฅ์• 
โ€ข ์žฅ์•  ์ฒ˜๋ฆฌ
โ€“ AOF Rewrite๋ฅผ ์ค‘์ง€
P๋ชจ ์„œ๋น„์Šค(#2) โ€“ ์žฅ์• ๋Š” ์•„๋‹˜
โ€ข ์ƒํ™ฉ
โ€“ ๋„คํŠธ์› Master/Slave Replication์ด ๋ชจ๋‘ ๋Š์–ด์ง.
โ€ข ์žฅ์•  ๊ฐ€๋Šฅ์„ฑ
โ€“ ๋„คํŠธ์›์ด ๋ณต๊ตฌ๋˜๋ฉด ๋ชจ๋“  ์„œ๋ฒ„๊ฐ€ Master/Slave ์ƒํƒœ๋ฅผ ๋ณต๊ตฌํ•˜๊ฒŒ ๋จ
โ€“ ๋ชจ๋“  Master๊ฐ€ Fork ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์™€ Disk๋ฅผ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ(์ „๋ฉด์žฅ์• )
โ€ข ๋Œ€์ฒ˜
โ€“ Slaveof no one ๋ช…๋ น์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋“  M/S ๊ด€๊ณ„๋ฅผ ์ œ๊ฑฐ
โ€“ ์ˆœ์ฐจ์ ์œผ๋กœ ํ•œ๋Œ€์”ฉ Replication์„ ์žฌ ์—ฐ๊ฒฐํ•จ.
Replication ์‹คํŒจ
โ€ข ์ƒํ™ฉ
โ€“ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด 20G ์ •๋„
โ€“ ์–ด๋Š์ •๋„์˜ Write๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ
โ€ข ์žฅ์•  ํ˜„์ƒ
โ€“ Master/Slave Replication ์—ฐ๊ฒฐ์ด ๊ณ„์† ์‹คํŒจํ•จ
โ€ข ์žฅ์•  ์ฒ˜๋ฆฌ #1
โ€“ Redis๋Š” Replication ์ค‘์— fork ํ›„์— ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•จ.
โ€“ ํ•ด๋‹น ๊ฐ’์ด ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด ์ ‘์†์ด ๋Š์–ด์ง
โ€“ client-output-buffer-limit slave 256mb 64mb 60
โ€“ 20G ์ด์ƒ์ด๋ฉด ์ด ๊ฐ’์„ 512mb ์ด์ƒ์œผ๋กœ ์žก์•„๋‘๋Š” ๊ฒƒ์ด ์ข‹์Œ(๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ์— ๋น„๋ก€)
โ€ข ๋ฐ์ดํ„ฐ๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ์œผ๋ฉด ๋ฏธ๋ฆฌ ์Šฌ๋ ˆ์ด๋ธŒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›Œ์ฃผ๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•จ.
โ€“ Loading ์ง์ „์—, ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๋ฏ€๋กœ, ์ง€์šฐ๋Š”๋ฐ๋„ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ.
THP Disable
โ€ข ์ƒํ™ฉ
โ€“ THP๊ฐ€ enable
โ€“ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ์Œ
โ€ข ์žฅ์•  ํ˜„์ƒ
โ€“ Fork ์‹œ์— ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ์„œ fork ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆผ
โ€ข ์žฅ์•  ์ฒ˜๋ฆฌ
โ€“ THP Disable
Diskless Replication
โ€ข RDB ๋คํ”„๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜๋ฉด disk io๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, ๋””์Šคํฌ์— ์“ฐ์ง€
์•Š๊ณ , ๋ฐ”๋กœ Slave๋กœ ์ „์†ก
โ€“ AWS์˜ EBS๋Š” ๋Š๋ฆฌ๋‹ค.
โ€“ ์ผ๋ฐ˜ ์„œ๋ฒ„์˜ ๋””์Šคํฌ๋„ ๋งŽ์ด ์“ฐ๋ฉด ๋Š๋ฆฌ๋‹ค.
โ€ข ๋ฉ”๋ชจ๋ฆฌ ๋‘๋ฐฐ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋Š” ๋ชปํ•˜์ง€๋งŒ, Disk IO๋Š” ์ค„์ผ ์ˆ˜ ์žˆ์Œ.
Redis ๋ชจ๋‹ˆํ„ฐ๋ง
Redis Monitoring ํ•ญ๋ชฉ
ํ•ญ๋ชฉ ์ˆ˜์ง‘ ์œ„์น˜(Host or Redis(info))
CPU Usage, Load Host
Network inbound,
outbound
Host
ํ˜„์žฌ ํด๋ผ์ด์–ธํŠธ ๊ฐœ์ˆ˜,
max client ์„ค์ •
Redis
ํ‚ค ๊ฐœ์ˆ˜, ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ ์ˆ˜ Redis
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, RSS Redis
Disk ์‚ฌ์šฉ๋Ÿ‰, io Host
Expired keys, Evicted keys Redis
Redis ๋ณด์•ˆ ์ด์Šˆ
Redis ๋ณด์•ˆ์€ ๊ต‰์žฅํžˆ ์ทจ์•ฝํ•˜๋‹ค.
โ€ข ACL
โ€“ ๊ธฐ๋Šฅ ์—†์Œ
โ€“ ๋‚ด๋ถ€๋ง์ด ์•„๋‹ ๊ฒฝ์šฐ ์ ˆ๋Œ€๋กœ ํ•ด๋‹น ํฌํŠธ๊ฐ€ ์—ด๋ ค์žˆ์œผ๋ฉด ์•ˆ๋จ
โ€“ Root๋กœ ๋„์šฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ๊ฐ€๋Šฅํ•œ ํŠน์ • user๋กœ ๋„์›Œ์•ผ ํ•จ
โ€ข ๋ฐ์ดํ„ฐ
โ€“ ํ‰๋ฌธ์œผ๋กœ ๋ชจ๋‘ ํ™•์ธ ๊ฐ€๋Šฅ.
Redis ํ•ดํ‚น ์‚ฌ๋ก€
โ€ข ํ•ด๋‹น ํฌํŠธ๊ฐ€ ์™ธ๋ถ€์— ์—ด๋ ค์žˆ์Œ(์ž์„ธํ•œ ์ฝ”๋“œ๋Š” ์ˆจ๊น๋‹ˆ๋‹ค.)
โ€“ Config set dir โ€œ/root/.sshโ€
โ€“ Config set dbfilename โ€œauthorized_keysโ€
โ€“ Save
โ€ข ์ด์ œ ๋ฃจํŠธ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ.
๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

More Related Content

What's hot

AzureไธŠใฎ ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น ๆฉŸ่ƒฝใฎ้ธใณๆ–นใ€‚KVSใ‹ใ‚‰DWHใพใง
AzureไธŠใฎ ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น ๆฉŸ่ƒฝใฎ้ธใณๆ–นใ€‚KVSใ‹ใ‚‰DWHใพใงAzureไธŠใฎ ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น ๆฉŸ่ƒฝใฎ้ธใณๆ–นใ€‚KVSใ‹ใ‚‰DWHใพใง
AzureไธŠใฎ ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น ๆฉŸ่ƒฝใฎ้ธใณๆ–นใ€‚KVSใ‹ใ‚‰DWHใพใง
Daisuke Masubuchi
ย 
Keeping Your Data Close and Your Caches Hotter (Ricardo Ferreira, Confluent) ...
Keeping Your Data Close and Your Caches Hotter (Ricardo Ferreira, Confluent) ...Keeping Your Data Close and Your Caches Hotter (Ricardo Ferreira, Confluent) ...
Keeping Your Data Close and Your Caches Hotter (Ricardo Ferreira, Confluent) ...
confluent
ย 
[124] แ„’แ…กแ„‹แ…ตแ„‡แ…ณแ„…แ…ตแ„ƒแ…ณ แ„‹แ…ขแ†ธ แ„€แ…ขแ„‡แ…กแ†ฏแ„€แ…ต แ„€แ…ตแ†ทแ„’แ…กแ†ซแ„‰แ…ฉแ†ฏ
[124] แ„’แ…กแ„‹แ…ตแ„‡แ…ณแ„…แ…ตแ„ƒแ…ณ แ„‹แ…ขแ†ธ แ„€แ…ขแ„‡แ…กแ†ฏแ„€แ…ต แ„€แ…ตแ†ทแ„’แ…กแ†ซแ„‰แ…ฉแ†ฏ[124] แ„’แ…กแ„‹แ…ตแ„‡แ…ณแ„…แ…ตแ„ƒแ…ณ แ„‹แ…ขแ†ธ แ„€แ…ขแ„‡แ…กแ†ฏแ„€แ…ต แ„€แ…ตแ†ทแ„’แ…กแ†ซแ„‰แ…ฉแ†ฏ
[124] แ„’แ…กแ„‹แ…ตแ„‡แ…ณแ„…แ…ตแ„ƒแ…ณ แ„‹แ…ขแ†ธ แ„€แ…ขแ„‡แ…กแ†ฏแ„€แ…ต แ„€แ…ตแ†ทแ„’แ…กแ†ซแ„‰แ…ฉแ†ฏ
NAVER D2
ย 
์šฐ์•„ํ•œ ๋ชจ๋…ธ๋ฆฌ์Šค
์šฐ์•„ํ•œ ๋ชจ๋…ธ๋ฆฌ์Šค์šฐ์•„ํ•œ ๋ชจ๋…ธ๋ฆฌ์Šค
์šฐ์•„ํ•œ ๋ชจ๋…ธ๋ฆฌ์Šค
Arawn Park
ย 

What's hot (20)

Massive service basic
Massive service basicMassive service basic
Massive service basic
ย 
Osc2015ๅŒ—ๆตท้“ ๆœญๅนŒmy sqlๅ‹‰ๅผทไผš_ๆณขๅคš้‡Ž_r3
Osc2015ๅŒ—ๆตท้“ ๆœญๅนŒmy sqlๅ‹‰ๅผทไผš_ๆณขๅคš้‡Ž_r3Osc2015ๅŒ—ๆตท้“ ๆœญๅนŒmy sqlๅ‹‰ๅผทไผš_ๆณขๅคš้‡Ž_r3
Osc2015ๅŒ—ๆตท้“ ๆœญๅนŒmy sqlๅ‹‰ๅผทไผš_ๆณขๅคš้‡Ž_r3
ย 
Microservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring CloudMicroservices with Java, Spring Boot and Spring Cloud
Microservices with Java, Spring Boot and Spring Cloud
ย 
ใƒใ‚นใƒˆใƒปใƒฉใƒ ใƒ€ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใฎๅˆ‡ใ‚Šๆœญ? Apache Hudi๏ผˆNTTใƒ‡ใƒผใ‚ฟ ใƒ†ใ‚ฏใƒŽใƒญใ‚ธใƒผใ‚ซใƒณใƒ•ใ‚กใƒฌใƒณใ‚น 2020 ็™บ่กจ่ณ‡ๆ–™๏ผ‰
ใƒใ‚นใƒˆใƒปใƒฉใƒ ใƒ€ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใฎๅˆ‡ใ‚Šๆœญ? Apache Hudi๏ผˆNTTใƒ‡ใƒผใ‚ฟ ใƒ†ใ‚ฏใƒŽใƒญใ‚ธใƒผใ‚ซใƒณใƒ•ใ‚กใƒฌใƒณใ‚น 2020 ็™บ่กจ่ณ‡ๆ–™๏ผ‰ใƒใ‚นใƒˆใƒปใƒฉใƒ ใƒ€ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใฎๅˆ‡ใ‚Šๆœญ? Apache Hudi๏ผˆNTTใƒ‡ใƒผใ‚ฟ ใƒ†ใ‚ฏใƒŽใƒญใ‚ธใƒผใ‚ซใƒณใƒ•ใ‚กใƒฌใƒณใ‚น 2020 ็™บ่กจ่ณ‡ๆ–™๏ผ‰
ใƒใ‚นใƒˆใƒปใƒฉใƒ ใƒ€ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใฎๅˆ‡ใ‚Šๆœญ? Apache Hudi๏ผˆNTTใƒ‡ใƒผใ‚ฟ ใƒ†ใ‚ฏใƒŽใƒญใ‚ธใƒผใ‚ซใƒณใƒ•ใ‚กใƒฌใƒณใ‚น 2020 ็™บ่กจ่ณ‡ๆ–™๏ผ‰
ย 
AzureไธŠใฎ ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น ๆฉŸ่ƒฝใฎ้ธใณๆ–นใ€‚KVSใ‹ใ‚‰DWHใพใง
AzureไธŠใฎ ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น ๆฉŸ่ƒฝใฎ้ธใณๆ–นใ€‚KVSใ‹ใ‚‰DWHใพใงAzureไธŠใฎ ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น ๆฉŸ่ƒฝใฎ้ธใณๆ–นใ€‚KVSใ‹ใ‚‰DWHใพใง
AzureไธŠใฎ ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚น ๆฉŸ่ƒฝใฎ้ธใณๆ–นใ€‚KVSใ‹ใ‚‰DWHใพใง
ย 
Building RESTful applications using Spring MVC
Building RESTful applications using Spring MVCBuilding RESTful applications using Spring MVC
Building RESTful applications using Spring MVC
ย 
Swoole Love PHP
Swoole Love PHPSwoole Love PHP
Swoole Love PHP
ย 
AEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser CachingAEM (CQ) Dispatcher Security and CDN+Browser Caching
AEM (CQ) Dispatcher Security and CDN+Browser Caching
ย 
Keeping Your Data Close and Your Caches Hotter (Ricardo Ferreira, Confluent) ...
Keeping Your Data Close and Your Caches Hotter (Ricardo Ferreira, Confluent) ...Keeping Your Data Close and Your Caches Hotter (Ricardo Ferreira, Confluent) ...
Keeping Your Data Close and Your Caches Hotter (Ricardo Ferreira, Confluent) ...
ย 
Deep Dive Into Kafka Streams (and the Distributed Stream Processing Engine) (...
Deep Dive Into Kafka Streams (and the Distributed Stream Processing Engine) (...Deep Dive Into Kafka Streams (and the Distributed Stream Processing Engine) (...
Deep Dive Into Kafka Streams (and the Distributed Stream Processing Engine) (...
ย 
[124] แ„’แ…กแ„‹แ…ตแ„‡แ…ณแ„…แ…ตแ„ƒแ…ณ แ„‹แ…ขแ†ธ แ„€แ…ขแ„‡แ…กแ†ฏแ„€แ…ต แ„€แ…ตแ†ทแ„’แ…กแ†ซแ„‰แ…ฉแ†ฏ
[124] แ„’แ…กแ„‹แ…ตแ„‡แ…ณแ„…แ…ตแ„ƒแ…ณ แ„‹แ…ขแ†ธ แ„€แ…ขแ„‡แ…กแ†ฏแ„€แ…ต แ„€แ…ตแ†ทแ„’แ…กแ†ซแ„‰แ…ฉแ†ฏ[124] แ„’แ…กแ„‹แ…ตแ„‡แ…ณแ„…แ…ตแ„ƒแ…ณ แ„‹แ…ขแ†ธ แ„€แ…ขแ„‡แ…กแ†ฏแ„€แ…ต แ„€แ…ตแ†ทแ„’แ…กแ†ซแ„‰แ…ฉแ†ฏ
[124] แ„’แ…กแ„‹แ…ตแ„‡แ…ณแ„…แ…ตแ„ƒแ…ณ แ„‹แ…ขแ†ธ แ„€แ…ขแ„‡แ…กแ†ฏแ„€แ…ต แ„€แ…ตแ†ทแ„’แ…กแ†ซแ„‰แ…ฉแ†ฏ
ย 
Soma search
Soma searchSoma search
Soma search
ย 
Transactions and Concurrency Control Patterns
Transactions and Concurrency Control PatternsTransactions and Concurrency Control Patterns
Transactions and Concurrency Control Patterns
ย 
์šฐ์•„ํ•œ ๋ชจ๋…ธ๋ฆฌ์Šค
์šฐ์•„ํ•œ ๋ชจ๋…ธ๋ฆฌ์Šค์šฐ์•„ํ•œ ๋ชจ๋…ธ๋ฆฌ์Šค
์šฐ์•„ํ•œ ๋ชจ๋…ธ๋ฆฌ์Šค
ย 
Laravel Presentation
Laravel PresentationLaravel Presentation
Laravel Presentation
ย 
Load Balancing MySQL with HAProxy - Slides
Load Balancing MySQL with HAProxy - SlidesLoad Balancing MySQL with HAProxy - Slides
Load Balancing MySQL with HAProxy - Slides
ย 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
ย 
Clean architecture
Clean architectureClean architecture
Clean architecture
ย 
ใ•ใ„ใใ‚“ใฎ InnoDB Adaptive Flushing ๏ผˆไปฎ๏ผ‰
ใ•ใ„ใใ‚“ใฎ InnoDB Adaptive Flushing ๏ผˆไปฎ๏ผ‰ใ•ใ„ใใ‚“ใฎ InnoDB Adaptive Flushing ๏ผˆไปฎ๏ผ‰
ใ•ใ„ใใ‚“ใฎ InnoDB Adaptive Flushing ๏ผˆไปฎ๏ผ‰
ย 
laravel.pptx
laravel.pptxlaravel.pptx
laravel.pptx
ย 

Similar to Redis trouble shooting

Redis basicandroadmap
Redis basicandroadmapRedis basicandroadmap
Redis basicandroadmap
DaeMyung Kang
ย 
Redis Overview
Redis OverviewRedis Overview
Redis Overview
kalzas
ย 
Cassandra ๋ฉ˜๋ถ•๊ธฐ | Devon 2012
Cassandra ๋ฉ˜๋ถ•๊ธฐ | Devon 2012Cassandra ๋ฉ˜๋ถ•๊ธฐ | Devon 2012
Cassandra ๋ฉ˜๋ถ•๊ธฐ | Devon 2012
Daum DNA
ย 

Similar to Redis trouble shooting (20)

Redis acc 2015
Redis acc 2015Redis acc 2015
Redis acc 2015
ย 
Redis basicandroadmap
Redis basicandroadmapRedis basicandroadmap
Redis basicandroadmap
ย 
Mongo db ๋ณต์ œ(Replication)
Mongo db ๋ณต์ œ(Replication)Mongo db ๋ณต์ œ(Replication)
Mongo db ๋ณต์ œ(Replication)
ย 
Redis Overview
Redis OverviewRedis Overview
Redis Overview
ย 
Pgday bdr gt1000
Pgday bdr gt1000Pgday bdr gt1000
Pgday bdr gt1000
ย 
Pgday bdr ์ฒœ์ •๋Œ€
Pgday bdr ์ฒœ์ •๋Œ€Pgday bdr ์ฒœ์ •๋Œ€
Pgday bdr ์ฒœ์ •๋Œ€
ย 
[2B5]nBase-ARC Redis Cluster
[2B5]nBase-ARC Redis Cluster[2B5]nBase-ARC Redis Cluster
[2B5]nBase-ARC Redis Cluster
ย 
Cassandra ๋ฉ˜๋ถ•๊ธฐ | Devon 2012
Cassandra ๋ฉ˜๋ถ•๊ธฐ | Devon 2012Cassandra ๋ฉ˜๋ถ•๊ธฐ | Devon 2012
Cassandra ๋ฉ˜๋ถ•๊ธฐ | Devon 2012
ย 
KGC 2014: ๋ถ„์‚ฐ ๊ฒŒ์ž„ ์„œ๋ฒ„ ๊ตฌ์กฐ๋ก 
KGC 2014: ๋ถ„์‚ฐ ๊ฒŒ์ž„ ์„œ๋ฒ„ ๊ตฌ์กฐ๋ก KGC 2014: ๋ถ„์‚ฐ ๊ฒŒ์ž„ ์„œ๋ฒ„ ๊ตฌ์กฐ๋ก 
KGC 2014: ๋ถ„์‚ฐ ๊ฒŒ์ž„ ์„œ๋ฒ„ ๊ตฌ์กฐ๋ก 
ย 
3.[d2 แ„‹แ…ฉแ„‘แ…ณแ†ซแ„‰แ…ฆแ„†แ…ตแ„‚แ…ก]แ„‡แ…ฎแ†ซแ„‰แ…กแ†ซแ„‰แ…ตแ„‰แ…ณแ„แ…ฆแ†ท แ„€แ…ขแ„‡แ…กแ†ฏ แ„†แ…ตแ†พ แ„€แ…ญแ„’แ…ฎแ†ซ n base arc
3.[d2 แ„‹แ…ฉแ„‘แ…ณแ†ซแ„‰แ…ฆแ„†แ…ตแ„‚แ…ก]แ„‡แ…ฎแ†ซแ„‰แ…กแ†ซแ„‰แ…ตแ„‰แ…ณแ„แ…ฆแ†ท แ„€แ…ขแ„‡แ…กแ†ฏ แ„†แ…ตแ†พ แ„€แ…ญแ„’แ…ฎแ†ซ n base arc3.[d2 แ„‹แ…ฉแ„‘แ…ณแ†ซแ„‰แ…ฆแ„†แ…ตแ„‚แ…ก]แ„‡แ…ฎแ†ซแ„‰แ…กแ†ซแ„‰แ…ตแ„‰แ…ณแ„แ…ฆแ†ท แ„€แ…ขแ„‡แ…กแ†ฏ แ„†แ…ตแ†พ แ„€แ…ญแ„’แ…ฎแ†ซ n base arc
3.[d2 แ„‹แ…ฉแ„‘แ…ณแ†ซแ„‰แ…ฆแ„†แ…ตแ„‚แ…ก]แ„‡แ…ฎแ†ซแ„‰แ…กแ†ซแ„‰แ…ตแ„‰แ…ณแ„แ…ฆแ†ท แ„€แ…ขแ„‡แ…กแ†ฏ แ„†แ…ตแ†พ แ„€แ…ญแ„’แ…ฎแ†ซ n base arc
ย 
์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด๋ฅผ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ
์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด๋ฅผ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด๋ฅผ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ
์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด๋ฅผ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค์™€ ์“ฐ๋ ˆ๋“œ
ย 
CUDA๋ฅผ ๊ฒŒ์ž„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๊ธฐ
CUDA๋ฅผ ๊ฒŒ์ž„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๊ธฐCUDA๋ฅผ ๊ฒŒ์ž„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๊ธฐ
CUDA๋ฅผ ๊ฒŒ์ž„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๊ธฐ
ย 
Cache governance
Cache governanceCache governance
Cache governance
ย 
The nosql echossytem
The nosql echossytemThe nosql echossytem
The nosql echossytem
ย 
[์Šค๋งˆํŠธ์Šคํ„ฐ๋””]๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค์—์„œ์˜ ๋กœ๊ทธ ์ˆ˜์ง‘๊ณผ ๋ถ„์„
[์Šค๋งˆํŠธ์Šคํ„ฐ๋””]๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค์—์„œ์˜ ๋กœ๊ทธ ์ˆ˜์ง‘๊ณผ ๋ถ„์„[์Šค๋งˆํŠธ์Šคํ„ฐ๋””]๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค์—์„œ์˜ ๋กœ๊ทธ ์ˆ˜์ง‘๊ณผ ๋ถ„์„
[์Šค๋งˆํŠธ์Šคํ„ฐ๋””]๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค์—์„œ์˜ ๋กœ๊ทธ ์ˆ˜์ง‘๊ณผ ๋ถ„์„
ย 
MySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestMySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software Test
ย 
Osc4.x installation v1-upload
Osc4.x installation v1-uploadOsc4.x installation v1-upload
Osc4.x installation v1-upload
ย 
GPGPU(CUDA)๋ฅผ ์ด์šฉํ•œ MMOG ์บ๋ฆญํ„ฐ ์ถฉ๋Œ์ฒ˜๋ฆฌ
GPGPU(CUDA)๋ฅผ ์ด์šฉํ•œ MMOG ์บ๋ฆญํ„ฐ ์ถฉ๋Œ์ฒ˜๋ฆฌGPGPU(CUDA)๋ฅผ ์ด์šฉํ•œ MMOG ์บ๋ฆญํ„ฐ ์ถฉ๋Œ์ฒ˜๋ฆฌ
GPGPU(CUDA)๋ฅผ ์ด์šฉํ•œ MMOG ์บ๋ฆญํ„ฐ ์ถฉ๋Œ์ฒ˜๋ฆฌ
ย 
Advanced nGrinder 2nd Edition
Advanced nGrinder 2nd EditionAdvanced nGrinder 2nd Edition
Advanced nGrinder 2nd Edition
ย 
NoSQL
NoSQLNoSQL
NoSQL
ย 

More from DaeMyung Kang

More from DaeMyung Kang (20)

Count min sketch
Count min sketchCount min sketch
Count min sketch
ย 
Redis
RedisRedis
Redis
ย 
Ansible
AnsibleAnsible
Ansible
ย 
Why GUID is needed
Why GUID is neededWhy GUID is needed
Why GUID is needed
ย 
How to use redis well
How to use redis wellHow to use redis well
How to use redis well
ย 
The easiest consistent hashing
The easiest consistent hashingThe easiest consistent hashing
The easiest consistent hashing
ย 
How to name a cache key
How to name a cache keyHow to name a cache key
How to name a cache key
ย 
Integration between Filebeat and logstash
Integration between Filebeat and logstash Integration between Filebeat and logstash
Integration between Filebeat and logstash
ย 
How to build massive service for advance
How to build massive service for advanceHow to build massive service for advance
How to build massive service for advance
ย 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
ย 
How To Become Better Engineer
How To Become Better EngineerHow To Become Better Engineer
How To Become Better Engineer
ย 
Kafka timestamp offset_final
Kafka timestamp offset_finalKafka timestamp offset_final
Kafka timestamp offset_final
ย 
Kafka timestamp offset
Kafka timestamp offsetKafka timestamp offset
Kafka timestamp offset
ย 
Data pipeline and data lake
Data pipeline and data lakeData pipeline and data lake
Data pipeline and data lake
ย 
Redis acl
Redis aclRedis acl
Redis acl
ย 
Coffee store
Coffee storeCoffee store
Coffee store
ย 
Scalable webservice
Scalable webserviceScalable webservice
Scalable webservice
ย 
Number system
Number systemNumber system
Number system
ย 
Internet Scale Service Arichitecture
Internet Scale Service ArichitectureInternet Scale Service Arichitecture
Internet Scale Service Arichitecture
ย 
Bloomfilter
BloomfilterBloomfilter
Bloomfilter
ย 

Redis trouble shooting

  • 1. ์ธํ”„๋ผ ์šด์˜์ž๋ฅผ ์œ„ํ•œ Redis ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… Clark.kang charsyam@naver.com
  • 2. ๋ชฉ์ฐจ โ€ข Redis ํŠน์„ฑ ์†Œ๊ฐœ โ€“ Single Threaded โ€ข ์žฅ์•  ์‚ฌ๋ก€ ๋ฐ ๋Œ€์‘๋ฒ• โ€“ G ์„œ๋น„์Šค ์žฅ์•  ์‚ฌ๋ก€ โ€“ P ์„œ๋น„์Šค ์žฅ์•  ์‚ฌ๋ก€ โ€“ S ์„œ๋น„์Šค ์žฅ์•  ์‚ฌ๋ก€ โ€ข Redis ๋ณด์•ˆ ์ด์Šˆ
  • 3. Single Threaded #1 Client #1 Client #2 โ€ฆโ€ฆ Client #N Redis Event Loop I/O Multiplexing Process Command Packet #1 Packet #2
  • 4. Single Threaded #2 โ€ข ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ช…๋ น๋งŒ ์ฒ˜๋ฆฌ ๋จ. โ€ข ๊ธด ์ž‘์—…์„ ํ˜ธ์ถœํ•˜๋ฉด Redis ์˜ ๋‹ค๋ฅธ ๋ช…๋ น๋“ค์€ ์ „๋ถ€ Pending ๋จ โ€“ Keys, flushall, flushdb, lua script, MULTI/EXEC โ€ข ๋‚ด๋ถ€์ ์œผ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ๊ธด ํ•˜์ง€๋งŒ fsync ์šฉ์ž„.
  • 5. ์–ผ๋งˆ๋‚˜ ๋Š๋ฆฐ๊ฐ€? Command Item Count Time flashall 1,000,000 1000ms(1 second)
  • 6. ์ถ”์ฒœ ๋ฒ„์ „ #1 โ€ข ๊ฐ€๋Šฅํ•œ ์ตœ์‹  ๋ฒ„์ „ โ€“ 3.0.x ๋„ ๊ดœ์ฐฎ์Œ. โ€“ ์•„๋‹ˆ๋ฉด 2.8.x ํ›„๋ฐ˜๋Œ€(์ตœ์†Œ 2.8.13 ์ดํ›„๊ฐ€ ์œ ๋ฆฌ) โ€ข ๋ฒ„์ „๋งˆ๋‹ค ์•ฝ๊ฐ„์”ฉ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Œ.(์ตœ์‹  ๋ฒ„์ „์ด ์ ค ์ข‹์Œ) โ€“ 2.6.x ์—์„œ๋Š” config set client-output-buffer-limit ์€ redis- cli ์—์„œ๋งŒ ๊ฐ€๋Šฅ โ€“ 2.8.20์—์„œ๋Š” config set client-output-buffer-limit ์—์„œ 1GB ์ด๋Ÿฐ ํ‘œํ˜„์ด ์•ˆ๋จ
  • 7. ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™” #1 โ€ข Jemalloc ์ด 3.6.0 ์ด์ „ ๋ฒ„์ „
  • 8. ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™” #2 โ€ข Jemalloc ์ด 3.6.0 ์ดํ›„๋ฒ„์ „ โ€“ ๊ทธ๋ž˜๋„ ์ฃผ์˜๊ฐ€ ํ•„์š”.
  • 9. ์ถ”์ฒœ ํด๋ผ์ด์–ธํŠธ(๋งค๋‹ˆ์ง€๋จผํŠธ์šฉ) โ€ข Redis-cli ๋ฅผ ์“ฐ์„ธ์š”. โ€“ ๊ถŒ์žฅ ์ถ”์ฒœ โ€ข telnet ๋„ ๊ฐ€๋Šฅ โ€“ Inline command ๋ผ๊ณ  ํ•ด์„œ ํ•œ์ค„์งœ๋ฆฌ๋Š” ๋ ˆ๋””์Šค๊ฐ€ ์•Œ์•„์„œ ํ•ด์„ โ€“ Inline command๋Š” twemproxy์—์„œ๋Š” ์ง€์›๋˜์ง€ ์•Š์Œ โ€“ ๊ตฌ๋ฒ„์ „์˜ ๊ฒฝ์šฐ๋Š” ์•ˆ๋จน๋Š” ์ปค๋งจ๋“œ๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์Œ
  • 10. ์„œ๋น„์Šค ํŒ€์— ์ œ๊ณต์‹œ ์œ ์˜ ์‚ฌํ•ญ โ€ข ์บ์‹œ์ธ์ง€ ์ €์žฅ์šฉ์ธ์ง€์— ๋Œ€ํ•ด์„œ ํ™•์ธ์ด ํ•„์š” โ€“ ์บ์‹œ์šฉ์ด๋ผ๋ฉด, SAVE ์˜ต์…˜์€ ๋ฌด์กฐ๊ฑด ๋„๊ณ  ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. โ€“ ์ €์žฅ์šฉ์ผ๋•Œ๋„, ํ•ด๋‹น ์˜ต์…˜์— ๋Œ€ํ•œ ์กฐ์ ˆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. โ€ข ํ•˜๋‚˜์˜ ๋ ˆ๋””์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ์ ์ ˆํžˆ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋„์šฐ๋„๋ก ๊ฐ€์ด๋“œํ•ฉ๋‹ˆ๋‹ค. โ€“ 16G ๋ฉด 11G, 12G๋ฅผ ์“ฐ๋Š”๊ฒƒ๋ณด๋‹ค๋Š” 6G * 2 ๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋” ์ข‹์Œ. โ€ข ๊ธฐ๋ณธ์ ์œผ๋กœ maxmemory๋ฅผ ์„ค์ •ํ•ด ๋‘๋Š” ๊ฒƒ์ด ์œ ๋ฆฌ.
  • 11. ์„œ๋น„์Šค ํŒ€์— ์ œ๊ณต์‹œ ์œ ์˜ ์‚ฌํ•ญ โ€ข CPU 4 core 32G Memory Mem: 26G Mem: 8G Mem: 8G Mem: 8G
  • 13. Redis Replication โ€ข Redis๋Š” Single Thread โ€“ Replication์„ ์œ„ํ•ด์„œ fork๋ฅผ ํ•˜๊ฒŒ ๋จ โ€ข Chained replication์„ ์ง€์› โ€“ Multi-Master ๋˜๋Š” ์–‘๋ฐฉํ–ฅ Replication์€ ์ง€์› ์•ˆํ•จ โ€ข Replication์„ ํ•ด์•ผํ•  ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์‹ ๊ฒฝ์จ ์•ผ ํ•จ.
  • 14. Replication โ€ขSupport Chained Replication Master 1st Slave 2nd Slave 1st slave is master of 2nd slave
  • 18. Mistake: Replication Master Slave replicationCron Slave will has no data after resyncing If master has no data.
  • 20. Persistent ๋ผ๊ณ  ์“ฐ๊ณ  Hell Gate๋ผ๊ณ  ์ฝ์œผ์„ธ์š”.
  • 21. RDB/AOF โ€ข RDB/AOF๋Š” ์™„์ „ํžˆ ๋ณ„๊ฐœ์˜ ๊ธฐ๋Šฅ(์„œ๋กœ ์—ฐ๊ด€์„ฑ์ด ์—†์Œ) โ€ข RDB โ€“ ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค๋ฅผ Fork ํ•ด์„œ ํ˜„์žฌ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ๋””์Šคํฌ๋กœ ๋คํ”„ํ•จ. โ€“ COW์— ์˜ํ•ด์„œ ์ฝ๊ธฐ๊ฐ€ ๋งŽ์„ ๋•Œ๋Š” ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ ์ง€๋งŒ, write ๊ฐ€ ๋งŽ์œผ๋ฉด ์ตœ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ 2๋ฐฐ๊นŒ์ง€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. โ€ข AOF โ€“ ํ˜„์žฌ ๋ ˆ๋””์Šค์˜ write ์ปค๋งจ๋“œ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•จ. โ€“ Disk Sync ์˜ต์…˜์— ๋”ฐ๋ผ์„œ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์คŒ(default: everysec) โ€“ AOF rewrite๊ฐ€ ์ผ์–ด๋‚˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๊ทธ๋ž˜๋„ ๋ถ€ํ•˜๊ฐ€ ์ ์Œ.
  • 22. ํ”ผํ•ด๊ฐ€๊ณ  ์‹ถ์–ด๋„ ๋ฌด์กฐ๊ฑด ๊ฒช๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (์žฅ๋น„ ์ด์ „ ์ด์Šˆโ€ฆ)
  • 24. Migration ๋ฐฉ๋ฒ• 1. ํ˜„์žฌ ์žฅ๋น„์— ๋Œ€ํ•ด์„œ ๋Œ€์ฒด ์žฅ๋น„๋ฅผ ์ค€๋น„ 2. ๋Œ€์ฒด ์žฅ๋น„์—์„œ slave of ํ˜„์žฌ์žฅ๋น„ IP ํ˜„์žฌ์žฅ๋น„ port 3. Replication ์™„๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆผ 1. ์ด๋•Œ ๋ฌด์กฐ๊ฑด fork ๊ฐ€ ๋ฐœ์ƒ(๋ฉ”๋ชจ๋ฆฌ ๋‘๋ฐฐ ์ด์Šˆ ๋ฐœ์ƒ ๊ฐ€๋Šฅ) 4. Replication์ด ๋๋‚˜๋ฉด Slave ์žฅ๋น„์—์„œ ์“ฐ๊ธฐ ํ™œ์„ฑํ™” 1. Config set slave-read-only no 5. ํด๋ผ์ด์–ธํŠธ๋“ค์ด ๋Œ€์ฒด ์žฅ๋น„๋ฅผ ๋ฐ”๋ผ๋ณด๋„๋ก ์„ค์ • 6. ๋Œ€์ฒด ์žฅ๋น„์—์„œ ๋‹ค์Œ ๋ช…๋ น ์ˆ˜ํ–‰ 1. slaveof no one
  • 26. Redis Replication ๊ณผ์ • 1. Slave ๊ฐ€ Master๋กœ Sync ๋ช…๋ น์„ ๋ณด๋ƒ„ 2. Master๋Š” Fork ํ•˜์—ฌ RDB ์ƒ์„ฑ 3. RDB ์ƒ์„ฑ์ด ๋๋‚˜๋ฉด Master๋Š” RDB๋ฅผ Slave๋กœ ์ „์†ก 4. ํ•ด๋‹น ์‹œ๊ฐ„๋™์— master๊ฐ€ ๋ฐ›๋Š” ๋ช…๋ น์–ด๋Š” memory์— ์ €์žฅ 5. RDB ์ „์†ก์ด ๋๋‚˜๋ฉด Slave ๊ฐ€ ํ•ด๋‹น RDB Load 6. Slave์˜ RDB ๋กœ๋“œ๊ฐ€ ๋๋‚˜๋ฉด Master๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์Œ“์ธ ๋ฐ์ดํ„ฐ ์ „ ์†ก
  • 27. Redis Repliaction์˜ ๋ฌธ์ œ์  โ€ข Redis์˜ ๊ฒฝ์šฐ ๋งˆ์Šคํ„ฐ ์Šฌ๋ ˆ์ด๋ธŒ ์ƒํ™ฉ์—์„œ Master๋ž‘ ์—ฐ๊ฒฐ์ด ์ž ์‹œ ๋ผ๋„ ๋Š์–ด์ง€๋ฉด, Slave๋Š” Master์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ Full Sync ๋ฐ›๋Š”๋‹ค. โ€“ Disk IO๋Š” ๋น„์Œˆ โ€ข Slave๋Š” Master ์ƒํƒœ๋ฅผ ๊ณ„์† ํด๋ง์œผ๋กœ ์ฒดํฌํ•จ.
  • 28. Partial Sync โ€ข Master์™€์˜ ์ ‘์†์ด ๋Š๊ธฐ๊ณ  ๋‹ค์‹œ ์—ฐ๊ฒฐ๋  ๋•Œ, ๊ธฐ์กด๊ณผ ๋™์ผํ•œ master ๋ผ๋ฉด, ๊ทธ๋ฆฌ๊ณ  master์˜ memory buffer ๋ฒ”์œ„ ๋‚ด๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ ๊ฒฝ๋˜์—ˆ๋‹ค๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋งŒ ์ „์†ก ๋ฐ›์•„์„œ full sync๋ฅผ ํ”ผํ•จ. โ€“ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์—†์–ด๋„, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด PING ๋“ฑ์˜ ๋ฉ”์‹œ์ง€๋กœ ์ธํ•ด์„œ ๋ฒ„ํผ๊ฐ€ ์ฐฐ ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒŒ ํ•จ์ •. โ€ข ๋‹ค๋งŒ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ์—๋Š” Partial Sync๋Š” ์•ˆ๋จ โ€“ ์ฆ‰, ์žฅ์• ๋กœ ๋งˆ์Šคํ„ฐ ์žฅ๋น„ ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ๋ฉดโ€ฆ slave๋Š” ๋ฌด์กฐ๊ฑด full sync
  • 30. T๋ชจ ์„œ๋น„์Šค โ€ข ์ƒํ™ฉ โ€“ ์บ์‹œ๋กœ๋งŒ ์‚ฌ์šฉ โ€ข Redis ์„ค์ • โ€“ stop-writes-on-bgsave-error yes โ€ข ์žฅ์•  ํ˜„์ƒ โ€“ RDB ์ƒ์„ฑ ์‹คํŒจ ํ›„, write ๊ฐ€ ๊ณ„์† ์‹คํŒจ. โ€“ ์ฝ๊ธฐ๋งŒ ๊ฐ€๋Šฅ โ€ข ์žฅ์•  ์ฒ˜๋ฆฌ โ€“ stop-writes-on-bgsave-error no ๋กœ ์„ค์ • โ€“ ํ•ด๋‹น ๊ฐ’์ด yes ๋ฉด RDB ์ƒ์„ฑ์— ์‹คํŒจํ•˜๋ฉด write ๋ช…๋ น์„ ๋ชจ๋‘ ์—๋Ÿฌ๋ƒ„.
  • 31. G๋ชจ ์„œ๋น„์Šค โ€ข ์ƒํ™ฉ โ€“ ์บ์‹œ๋กœ๋งŒ ์‚ฌ์šฉ โ€ข Redis ์„ค์ • โ€“ SAVE ๊ฐ€ ๋””ํดํŠธ ์˜ต์…˜ โ€“ SAVE 900 1 โ€“ SAVE 300 10 โ€“ SAVE 60 10000 โ€ข ์žฅ์•  ํ˜„์ƒ โ€“ ์งง์€ ์‹œ๊ฐ„์— ๊ณ„์† RDB๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด์„œ Disk IO๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒ โ€ข ์žฅ์•  ์ฒ˜๋ฆฌ โ€“ SAVE ๊ฐ’์„ ์ œ๊ฑฐ(config set SAVE โ€œโ€)
  • 32. S๋ชจ ์„œ๋น„์Šค โ€ข ์ƒํ™ฉ โ€“ ์บ์‹œ์™€ ์ผ๋ถ€ ๋ณต๊ตฌ๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ. โ€“ ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ 32G ์—์„œ 28G ์‚ฌ์šฉ โ€“ ๋””์Šคํฌ ์žฅ์• ๋„ ์žˆ๋˜ ์ƒํ™ฉ โ€ข ์žฅ์•  ํ˜„์ƒ โ€“ Swap memory ์‚ฌ์šฉ์œผ๋กœ ์‘๋‹ต์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚จ. โ€“ RDB ์ƒ์„ฑ์— ์—„์ฒญ๋‚œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ(28G ๋ฉ”๋ชจ๋ฆฌ dump์— 7์‹œ๊ฐ„ ์ด์ƒ ๊ฑธ๋ฆผ) โ€ข ์žฅ์•  ์ฒ˜๋ฆฌ โ€“ ๊ทธ๋ƒฅ ํฌ๊ธฐ(T.T)
  • 33. Copy on Write โ€ข ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ Page ์— Write ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๋งˆ๋‹ค, ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ Page๋ฅผ ๋ณต์‚ฌํ•˜๊ฒŒ ๋œ๋‹ค. โ€ข ์ฝ๊ธฐ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ถ”๊ฐ€๋กœ ๋ณต์‚ฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • 34. Copy on Write #1 Process - Parent Physical Memory Page A Page B Page C
  • 35. Copy on Write #2 โ€“ Fork(), ๋ฉ”๋ชจ๋ฆฌ ์ˆ˜์ • ์ „ Process - Parent Physical Memory Page A Page B Page C Process - Child
  • 36. Copy on Write #2 โ€“ Fork(), ๋ฉ”๋ชจ๋ฆฌ ์ˆ˜์ • ํ›„ Process - Parent Physical Memory Page A Page B Page C Copy of Page C Process - Child
  • 37. Copy on Write ๊ฒฐ๋ก  โ€ข ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‘ ๋ฐฐ ๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. โ€“ ๋ชจ๋“  Page ์— write๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ โ€ข ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์„œ ์Šค์™‘ ์˜์—ญ์„ ์‚ฌ์šฉํ•˜๋ฉด ์—„์ฒญ๋‚˜๊ฒŒ ๋Š๋ ค์ง€๊ฒŒ ๋œ๋‹ค.
  • 38. P๋ชจ ์„œ๋น„์Šค(#1) โ€ข ์ƒํ™ฉ โ€“ AOF ์‚ฌ์šฉ โ€“ 8๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ 256G ์žฅ๋น„์—์„œ ๋™์ž‘ โ€ข ์žฅ์•  ํ˜„์ƒ โ€“ 8๊ฐœ์˜ AOF๊ฐ€ ์ „๋ถ€ AOF Rewrite๊ฐ€ ๋ฐœ์ƒ โ€“ ๊ณผ๋„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๊ณผ Disk ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ์žฅ์•  โ€ข ์žฅ์•  ์ฒ˜๋ฆฌ โ€“ AOF Rewrite๋ฅผ ์ค‘์ง€
  • 39. P๋ชจ ์„œ๋น„์Šค(#2) โ€“ ์žฅ์• ๋Š” ์•„๋‹˜ โ€ข ์ƒํ™ฉ โ€“ ๋„คํŠธ์› Master/Slave Replication์ด ๋ชจ๋‘ ๋Š์–ด์ง. โ€ข ์žฅ์•  ๊ฐ€๋Šฅ์„ฑ โ€“ ๋„คํŠธ์›์ด ๋ณต๊ตฌ๋˜๋ฉด ๋ชจ๋“  ์„œ๋ฒ„๊ฐ€ Master/Slave ์ƒํƒœ๋ฅผ ๋ณต๊ตฌํ•˜๊ฒŒ ๋จ โ€“ ๋ชจ๋“  Master๊ฐ€ Fork ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์™€ Disk๋ฅผ ์‚ฌ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ(์ „๋ฉด์žฅ์• ) โ€ข ๋Œ€์ฒ˜ โ€“ Slaveof no one ๋ช…๋ น์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋“  M/S ๊ด€๊ณ„๋ฅผ ์ œ๊ฑฐ โ€“ ์ˆœ์ฐจ์ ์œผ๋กœ ํ•œ๋Œ€์”ฉ Replication์„ ์žฌ ์—ฐ๊ฒฐํ•จ.
  • 40. Replication ์‹คํŒจ โ€ข ์ƒํ™ฉ โ€“ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด 20G ์ •๋„ โ€“ ์–ด๋Š์ •๋„์˜ Write๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ โ€ข ์žฅ์•  ํ˜„์ƒ โ€“ Master/Slave Replication ์—ฐ๊ฒฐ์ด ๊ณ„์† ์‹คํŒจํ•จ โ€ข ์žฅ์•  ์ฒ˜๋ฆฌ #1 โ€“ Redis๋Š” Replication ์ค‘์— fork ํ›„์— ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•จ. โ€“ ํ•ด๋‹น ๊ฐ’์ด ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด ์ ‘์†์ด ๋Š์–ด์ง โ€“ client-output-buffer-limit slave 256mb 64mb 60 โ€“ 20G ์ด์ƒ์ด๋ฉด ์ด ๊ฐ’์„ 512mb ์ด์ƒ์œผ๋กœ ์žก์•„๋‘๋Š” ๊ฒƒ์ด ์ข‹์Œ(๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ์— ๋น„๋ก€) โ€ข ๋ฐ์ดํ„ฐ๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ์œผ๋ฉด ๋ฏธ๋ฆฌ ์Šฌ๋ ˆ์ด๋ธŒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›Œ์ฃผ๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•จ. โ€“ Loading ์ง์ „์—, ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๋ฏ€๋กœ, ์ง€์šฐ๋Š”๋ฐ๋„ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ.
  • 41. THP Disable โ€ข ์ƒํ™ฉ โ€“ THP๊ฐ€ enable โ€“ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ์Œ โ€ข ์žฅ์•  ํ˜„์ƒ โ€“ Fork ์‹œ์— ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์— ๋”ฐ๋ผ์„œ fork ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆผ โ€ข ์žฅ์•  ์ฒ˜๋ฆฌ โ€“ THP Disable
  • 42. Diskless Replication โ€ข RDB ๋คํ”„๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜๋ฉด disk io๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, ๋””์Šคํฌ์— ์“ฐ์ง€ ์•Š๊ณ , ๋ฐ”๋กœ Slave๋กœ ์ „์†ก โ€“ AWS์˜ EBS๋Š” ๋Š๋ฆฌ๋‹ค. โ€“ ์ผ๋ฐ˜ ์„œ๋ฒ„์˜ ๋””์Šคํฌ๋„ ๋งŽ์ด ์“ฐ๋ฉด ๋Š๋ฆฌ๋‹ค. โ€ข ๋ฉ”๋ชจ๋ฆฌ ๋‘๋ฐฐ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋Š” ๋ชปํ•˜์ง€๋งŒ, Disk IO๋Š” ์ค„์ผ ์ˆ˜ ์žˆ์Œ.
  • 44. Redis Monitoring ํ•ญ๋ชฉ ํ•ญ๋ชฉ ์ˆ˜์ง‘ ์œ„์น˜(Host or Redis(info)) CPU Usage, Load Host Network inbound, outbound Host ํ˜„์žฌ ํด๋ผ์ด์–ธํŠธ ๊ฐœ์ˆ˜, max client ์„ค์ • Redis ํ‚ค ๊ฐœ์ˆ˜, ๋ช…๋ น์–ด ์ฒ˜๋ฆฌ ์ˆ˜ Redis ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, RSS Redis Disk ์‚ฌ์šฉ๋Ÿ‰, io Host Expired keys, Evicted keys Redis
  • 46. Redis ๋ณด์•ˆ์€ ๊ต‰์žฅํžˆ ์ทจ์•ฝํ•˜๋‹ค. โ€ข ACL โ€“ ๊ธฐ๋Šฅ ์—†์Œ โ€“ ๋‚ด๋ถ€๋ง์ด ์•„๋‹ ๊ฒฝ์šฐ ์ ˆ๋Œ€๋กœ ํ•ด๋‹น ํฌํŠธ๊ฐ€ ์—ด๋ ค์žˆ์œผ๋ฉด ์•ˆ๋จ โ€“ Root๋กœ ๋„์šฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ๊ฐ€๋Šฅํ•œ ํŠน์ • user๋กœ ๋„์›Œ์•ผ ํ•จ โ€ข ๋ฐ์ดํ„ฐ โ€“ ํ‰๋ฌธ์œผ๋กœ ๋ชจ๋‘ ํ™•์ธ ๊ฐ€๋Šฅ.
  • 47. Redis ํ•ดํ‚น ์‚ฌ๋ก€ โ€ข ํ•ด๋‹น ํฌํŠธ๊ฐ€ ์™ธ๋ถ€์— ์—ด๋ ค์žˆ์Œ(์ž์„ธํ•œ ์ฝ”๋“œ๋Š” ์ˆจ๊น๋‹ˆ๋‹ค.) โ€“ Config set dir โ€œ/root/.sshโ€ โ€“ Config set dbfilename โ€œauthorized_keysโ€ โ€“ Save โ€ข ์ด์ œ ๋ฃจํŠธ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ.