Redis ๊ณต์ ์ ํ๋ธ ์ฑ๋์์ ์ ๊ณตํ๋ Redis Cluster์ ๊ดํ ๋์์์ ์ฐธ๊ณ ํ์ฌ ์์ฑํ ๊ธ์ ๋๋ค.
๋ค์ด๊ฐ๊ธฐ์ ์์, Redis์ ๋ํด ๊ฐ๋จํ๊ฒ ์์๋ณด๊ฒ ์ต๋๋ค.
Redis๋ key-value ๊ตฌ์กฐ์ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์คํ ์์ค DBMS์ ๋๋ค.
์บ์ ์ ์ฅ์๋ก ๋ง์ด ์ฌ์ฉ๋๋ฉฐ, ์ธ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ Redis ์๋ฒ๋ฅผ ์ฌ์์ํ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์๋ฉธ๋๋ค๋ ํน์ง์ด ์์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด ์ปค์ง๋ฉด ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ์ ๋ ๋ง์ CPU, ๊ทธ๋ฆฌ๊ณ ๋ ๋ง์ ์ฒ๋ฆฌ๋์ด ํ์ํ๊ฒ ๋ฉ๋๋ค. ์ด๋ Redis Cluster๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ์ถ๊ฐ ์ฉ๋์ ํ๋ณดํ ์ ์์ต๋๋ค.
๊ทธ๋ผ ์ฌ๊ธฐ์ ํ์ฅ์ฑ์ด๋ ๊ฐ๋ ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
ํ์ฅ์ฑ์ด๋ โ์์คํ ์ ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํ์ฌ, ๋์ด๋๋ ์์ ๋์ ์ฒ๋ฆฌํ ์ ์๋ ์์คํ ์ ์์ฑโ์ ์๋ฏธํฉ๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ์ฅ ๋ฐฉ๋ฒ์ผ๋ก ์์ง์ ํ์ฅ๊ณผ ์ํ์ ํ์ฅ์ด ์์ต๋๋ค.
์์ง์ ํ์ฅ์ ์๋ฒ์ CPU๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ๋ ์ถ๊ฐํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฆ, ํฐ ์๋ฒ๋ฅผ ํ๋ณดํ๋ ๊ฒ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
์ํ์ ํ์ฅ์ ๋ฆฌ์์ค ํ์ ๋ ๋ง์ ์๋ฒ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฆ, ์ ์ฒด ์๋ฒ๋ฅผ ๋ฐฐํฌํ๋ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
Redis์ ๊ฒฝ์ฐ ๋๋ถ๋ถ ๋จ์ผ ์ค๋ ๋์ด๋ฏ๋ก, ์๋ฒ ์ธ์คํด์ค๊ฐ ๋ช ๋ น ์ฒ๋ฆฌ๋ฅผ ์ํด ์๋ฒ CPU์ ๋ค์ค ์ฝ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ง๋ง ๋ ๊ฐ์ Redis ์๋ฒ ์ธ์คํด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๋ฉด ์์คํ ์ด ์์ฒญ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ์ฌ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ์ฒ๋ฆฌ๋์ ๋ ๋ฐฐ๋ก ๋๋ฆด ์ ์์ต๋๋ค.
์ด์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ Redis ์๋ฒ ์ธ์คํด์ค ํน์ Redis ๋ ธ๋์ ๋ถ์ฐํ๋ ์์ ์ ๋ฐ๋ก Redis Cluster๋ฅผ ํตํด ์ํํ ์ ์์ต๋๋ค.
Redis Cluster๋ ์ฌ๋ฌ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ถ์ฐํด์ฃผ๊ณ , ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ํต์ ์ ํ ์ ์๋ ๊ฒฝ์ฐ์๋ ์์ ์ ๊ณ์ ์งํํ ์ ์์ต๋๋ค.
๋ค์ ๋งํด, ๊ณ ์ฑ๋ฅ์ ํ์ฅ์ฑ์ ์ ๊ณตํ๋ฉด์ ์ ์ ํ ์์ค์ ๋ฐ์ดํฐ ์์ ์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
๊ทธ๋ผ Redis Cluster๋ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ๊ธฐ์ค์ผ๋ก ๋ถ์ฐํ๊ณ key๊ฐ์ ๊ด๋ฆฌํ ๊น์?
์ผ๋ฐ์ ์ธ ๋ถ์ฐ ์์คํ ์์๋ ๋ถ์ฐํ๋ ค๋ ๋ ธ๋์ ๊ฐ์๋งํผ ํด์ ํจ์์ ๋ชจ๋๋ฅผ ์คํํ๋ ๋จ์ ํด์ฑ์ด ์ฌ์ฉ๋ฉ๋๋ค.
ํ์ง๋ง ๋จ์ ํด์ฑ์ ๋ ธ๋์ ๊ฐ์๊ฐ ๋ณํ ๋ ๋ง๋ค ๋ณํ๋ ๋ ธ๋์ ๊ฐ์๋งํผ ํด์ ํจ์์ ๋ชจ๋๋ฅผ ์คํํ๋ ๊ณผ์ ์ ๋ค์ ์คํํด์ผ ํ๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋์ ๊ฐ์ฉ์ฑ์ ํ๋ณดํ๊ธฐ ์ํด, Redis Cluster๋ Hash slot์ด๋ผ๋ ๋ ผ๋ฆฌ ๋จ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Redis Cluster์๋ 16,384๊ฐ์ Hash slot์ด ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ Hash slot์์๋ key์ ๋ํ ๊ด๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๊ณ , ๋ ธ๋์ ๊ฐ์์ ๋ฐ๋ผ ๋๋์ด ํ ๋น๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ ธ๋๊ฐ 2๊ฐ์ธ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ ๋ ธ๋์ 0๋ถํฐ 8000๊น์ง์ Hash slot์ด ํ ๋น๋๊ณ , ๋ ๋ฒ์งธ ๋ ธ๋์ 8001๋ถํฐ 16384๊น์ง์ Hash slot์ด ํ ๋น๋ฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ ํตํด ํด๋ผ์ด์ธํธ๋ ํด๋ฌ์คํฐ์ ๋ ธ๋๋ฅผ ์ฝ๊ฒ ์ถ๊ฐํ๊ณ ์ ๊ฑฐํ ์ ์์ผ๋ฉฐ, ๋ ธ๋์ ๊ฐ์์ ๋ฐ๋ผ Hash slot์ด ์๋์ผ๋ก ๋ถ์ฐ๋๋ฏ๋ก, Hash slot์ ํ ๋ ธ๋์์ ๋ค๋ฅธ ๋ ธ๋๋ก ์ด๋ํ๋ ๋ฐ์ ์์ ์ ์ค์งํ ํ์๊ฐ ์์ต๋๋ค.
๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ํด๋น ๋ ธ๋์ Hash slot์ ์ฌ์ฉํ ์ ์๋ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ณ ์ Redis Cluster๊ฐ ์์ฑ๋ ๋ ๋ชจ๋ ๋ ธ๋๋ ๋ณต์ ๋ ธ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๊ธฐ๋ณธ ๋ ธ๋ ์ฆ, Master ๋ ธ๋์ ์ฅ์ ๊ฐ ๊ฐ์ง๋๋ ๊ฒฝ์ฐ, ๋ณต์ ๋ ธ๋์ธ Slave ๋ ธ๋๋ฅผ Master๋ก ์น๊ฒฉํ์ฌ ๊ณ์ํด์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋์ํฌ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด Redis Cluster๋ ์ด๋ป๊ฒ ๋ ธ๋์ ์คํจ๋ฅผ ๊ฐ์งํ๊ณ Slave ๋ ธ๋๋ฅผ Master๋ก ์น๊ฒฉ์ํฌ ์ ์์๊น์?
3๊ฐ์ Master ๋ ธ๋์ 3๊ฐ์ Slave ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
6๊ฐ์ ๋ ธ๋๋ ๋ชจ๋ TCP ํต์ ์ผ๋ก ์ฐ๊ฒฐ๋๋ฉฐ, ์ง์์ ์ผ๋ก ์๋ก ํ์ ๋ณด๋ด๊ณ ๋ฉ์์ง๋ฅผ ๊ตํํฉ๋๋ค.
์ด ๊ณผ์ ์์ ํน์ Master ๋ ธ๋๊ฐ ๊ณผ๋ฐ์์ Master ๋ ธ๋๋ค๊ณผ ์ผ์ ์๊ฐ ์ด์ ํต์ ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ, ์ฅ์ ์กฐ์น๊ฐ ํธ๋ฆฌ๊ฑฐ๋๊ณ ํน์ Master ๋ ธ๋์ ๋ณต์ ๋ณธ ์ฆ, Slave ๋ ธ๋๊ฐ Master๋ก ์น๊ฒฉ๋ฉ๋๋ค.
Redis Cluster๋ฅผ Mac ํ๊ฒฝ์์ ์ง์ ๊ตฌ์ฑํ๋ ๊ณผ์ ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ํฐ๋ฏธ๋์ ์ด๊ณ Redis๋ฅผ ์ค์นํด์ค ๋ค ๋ค์๊ณผ ๊ฐ์ด Redis ์ค์ ํ์ผ์ ์์ฑํฉ๋๋ค.
brew install redis
vim redis.conf
port 7000 # ํฌํธ ๋ฒํธ cluster-enabled yes # ํด๋ฌ์คํฐ ๋ชจ๋๋ก ์คํํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ cluster-config-file nodes.conf # ๋ ธ๋์ ํด๋ฌ์คํฐ ์ ์ง๋ฅผ ์ํ ์ค์ ์ ์ ์ฅํ๋ ํ์ผ. ์ฌ์ฉ์ ์์ X cluster-node-timeout 5000 # ํน์ ๋ ธ๋๊ฐ ์ ์์ด ์๋ ๊ฒ์ผ๋ก ํ๋จํ๋ ๊ธฐ์ค ์๊ฐ appendonly yes # rdb์ ์ ์ฅ๋์ง ์๊ณ aof์ ์ ์ฅ๋จ(์ ํ ์ฌํญ)
๊ฐ ๋
ธ๋(Redis ์ธ์คํด์ค)์ ํด๋นํ๋ ํด๋ ์์ฑ
์ ๋ 8๊ฐ์ ๋
ธ๋๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ ์์ ์ด๋ฏ๋ก ๊ฐ ๋
ธ๋์ ํด๋นํ๋ 8๊ฐ์ ํด๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค. ํด๋์ ์ด๋ฆ์ ๊ฐ ๋
ธ๋์ ํฌํธ ๋ฒํธ๋ก ์ค์ ํด๋ณด์์ต๋๋ค.
mkdir 7000 7001 7002 7003 7004 7005 7006 7007
์์ฑํ ๊ฐ ํด๋์ redis.conf ํ์ผ์ ๋ณต์ฌํ๊ณ ํฌํธ ๋ฒํธ๋ฅผ ๊ฐ ๋
ธ๋์ ์ผ์นํ๋๋ก ์์
๊ฐ ํด๋ ๋ณ๋ก ์๊น ์์ฑํ Redis ์ค์ ํ์ผ์ ๋ณต์ฌํด์ ๋ถ์ฌ๋ฃ๊ธฐํ๊ณ , ๊ฐ ํ์ผ ๋ณ๋ก ํฌํธ ๋ฒํธ๋ฅผ ํด๋ ์ด๋ฆ๊ณผ ์ผ์นํ๋๋ก ์์ ํด ์ค๋๋ค.
cp redis.conf 7000/redis.conf
cp redis.conf 7001/redis.conf
cp redis.conf 7002/redis.conf
cp redis.conf 7003/redis.conf
cp redis.conf 7004/redis.conf
cp redis.conf 7005/redis.conf
cp redis.conf 7006/redis.conf
cp redis.conf 7007/redis.conf
๊ฐ ํด๋ ๋ณ๋ก Redis ์ธ์คํด์ค ์๋ฒ๋ฅผ ์คํ์์ผ ์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
cd 7000
redis-server ./redis.conf
Redis ์ค์ ํ์ผ์ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์๋ฒ๊ฐ ์คํ๋ฉ๋๋ค.
ํฐ๋ฏธ๋์ ์๋ก ์ด๊ณ (command + t) ๊ฐ ํด๋๋ก ์ด๋ํด์ ์๋ฒ ์คํ
๊ฐ ํด๋ ๋ณ๋ก ํฐ๋ฏธ๋์ ์๋ก ์ด์ด ์๋ฒ๋ฅผ ๋ชจ๋ ์คํํด ์ค๋๋ค.
cd 7001
โฆ cd 7007
redis-server ./redis.conf
์๋ฒ๋ฅผ ๋ชจ๋ ์คํํ๊ณ ๋๋ฉด ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ์์ฑํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ๋ฉฐ ๊ฐ๊ฐ์ Redis ์ธ์คํด์ค ์๋ฒ์ ๋ณต์ ๋ณธ์ ์์ฑ
ํด๋ฌ์คํฐ๋ฅผ ์์ฑํ ๋ create ๋ช ๋ น์ด์ ๊ฐ ์๋ฒ๋ณ IP ์ฃผ์, ๊ทธ๋ฆฌ๊ณ ๋ง๋๋ ค๋ ๋ณต์ ๋ณธ์ ๊ฐ์๋ฅผ ์ค์ ํด ์ค๋๋ค.
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 127.0.0.1:7007 --cluster-replicas 1
ํด๋ฌ์คํฐ ์์ฑ์ ์ฑ๊ณตํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ๋ฉด์ด ์ถ๋ ฅ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ๋ง์คํฐ ๋ ธ๋์ ํ ๋น๋ Hash slot๊ณผ Master-Slave ๋ ธ๋์ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
4๊ฐ์ ๋ ธ๋ ๊ฐ๊ฐ์ Hash slot์ด 4096๊ฐ ์ฉ ํ ๋น
Master[0] -> Slots 0 - 4095
Master[1] -> Slots 4096 - 8191
Master[2] -> Slots 8192 - 12287
Master[3] -> Slots 12288 - 16383
Master ๋ ธ๋ ์ ๋ณด [๋ ธ๋ ์ ๋ณด, IP ์ฃผ์, ํ ๋น๋ Hash slot, ๋ง์คํฐ]
M: cb6f66d97da3b69198911e7e23c5b8b32168edc4 127.0.0.1:7002
slots:[8192-12287] (4096 slots) master
Slave ๋ ธ๋ ์ ๋ณด [๋ ธ๋ ์ ๋ณด, IP ์ฃผ์, ๋ณต์ ํ Master ๋ ธ๋์ ๋ ธ๋ ์ ๋ณด]
S: d4547c5a1d90598e3ae611b0684e7b38829ca823 127.0.0.1:7004
replicates cb6f66d97da3b69198911e7e23c5b8b32168edc4
๋ค์์ ํ ๋ช ๋ น์ด์ ํด๋ฌ์คํฐ ์ฌ๋กฏ ๋ช ๋ น์ด๋ฅผ ํตํด ์ด๋ค ํด๋ฌ์คํฐ ์ฌ๋กฏ์ด ์ด๋ค Redis ์ธ์คํด์ค์ ๋งคํ๋๋์ง์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
7000๋ฒ ํฌํธ๋ก ์ ์ํด์ PING ๋ช ๋ น์ด์ CLUSTER SLOTS ๋ช ๋ น์ด ์คํ
redis-cli -p 7000 -c
127.0.0.1:7000> PING
127.0.0.1:7000> CLUSTER SLOTS
์๋ฅผ ๋ค์ด, 1)์์ 0์ ์ด ์ฌ๋กฏ์ ์์ ๋ฒ์๋ฅผ ์๋ฏธํ๊ณ 4095๋ ์ข ๋ฃ ๋ฒ์๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด ํด๋ฌ์คํฐ ์ฌ๋กฏ์ ๋ง์คํฐ ๋ ธ๋์ ํฌํธ ๋ฒํธ๋ 7000๋ฒ์ด๋ฉฐ ์ฌ๋ ์ด๋ธ ๋ ธ๋์ ํฌํธ ๋ฒํธ๋ 7007๋ฒ ์์ ์ ์ ์์ต๋๋ค.
๋ ์์ธํ ์ ๋ณด๋ฅผ ์ํ CLUSTER INFO ๋ช
๋ น์ด ์คํ
ํด๋ฌ์คํฐ์ ๋ ์์ธํ ์ ๋ณด๋ CLUSTER INFO ๋ช
๋ น์ด๋ฅผ ํตํด ํ์ธํ ์ ์์ต๋๋ค.
127.0.0.1:7000> CLUSTER INFO
[Youtube] Clustering in Redis
[Youtube] How to Create a Cluster in Redis
[Tistory] Redis ํด๋ฌ์คํฐ
[Redis] Scale with Redis Cluster
์ข์ ๊ธ ๊ฐ์ฌํฉ๋๋ค~