Sentinel

์•ž๊ธ€์—์„œ ์ˆ˜๋™์œผ๋กœ failover๋ฅผ ํ•œ๊ฒƒ์„ sentinel์„ ์ด์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ failover๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์— sentinel์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‹คํ–‰ํ•ด๋ณด์ž.

cd redis/replica-multi-node-sentinel
docker-compose up
alt text

1 - main 3 - secondary 3 - sentinel

alt text

replication์ด ์ž˜ ๋˜๋Š”๊ฒƒ์„ ์•Œ์ˆ˜ ์žˆ๋‹ค.

์ด์ œ role์„ ํ™•์ธํ•ด๋ณด์ž.

role
alt text

์ด์ œ main์„ ์ฃฝ์—ฌ๋ณด์ž.

docker-compose stop redis-main
alt text
alt text

์ž๋™์œผ๋กœ redis-secondary-1์ด master๋กœ failover๊ฐ€ ๋œ๊ฒƒ์„ ์•Œ์ˆ˜ ์žˆ๋‹ค.

์ด์ œ ๋‹ค์‹œ main์„ ์‚ด๋ ค๋ณด์ž.

alt text

slave๋กœ ์—ญํ• ์ด ๋ฐ”๋€Œ์–ด ์žˆ๋Š”๊ฑธ ์•Œ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๋ก 

auto failover๊ฐ€ ์ž˜ ๋™์ž‘ํ•œ๋‹ค.

์ถ”๊ฐ€ ๋…ธ๋“œ ์‹คํŒจ

์œ„์— ์„ค๋ช…ํ•œ๋Œ€๋กœ replication์ด 3์ด๋ฉด 1๊ฐœ์˜ ๋…ธ๋“œ๋Š” ์ฃฝ์–ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค ๊ทธ๋Ÿฌ๋‚˜ 2๊ฐœ๊ฐ€ ์ฃฝ์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

5๊ฐœ๋ฉด 2๊ฐœ๊ฐ€ ์ฃฝ์–ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ผ๋‹จ 1๊ฐœ๋ฅผ ๋” ์ถ”๊ฐ€ํ•ด๋ณด์ž.

redis-secondary-4:
  image: 'bitnami/redis:7.2'
  container_name: redis-secondary-4
  depends_on:
    - redis-main
  ports:
    - 6383:6379
  environment:
    - REDIS_REPLICATION_MODE=slave
    - REDIS_MASTER_HOST=redis-main
    - ALLOW_EMPTY_PASSWORD=yes

์˜ฌ๋ ค๋ณด์ž.

docker-compose up -d
alt text
alt text
get mykey
> myvalue

์—ฌ๊ธฐ์—์„œ 2๊ฐœ ๋…ธ๋“œ๋ฅผ ์ฃฝ์—ฌ๋ณด์ž.

docker-compose stop redis-secondary-1
docker-compose stop redis-secondary-2
alt text

2๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋ง๊ฐ€์ก‹๋Š”๋ฐ๋„ ๋ฌธ์ œ์—†์ด ์‹คํ–‰๋œ๋‹ค.

ํ•˜๋‚˜๋ฅผ ๋” ๋ง๊ฐ€๋œจ๋ ค๋ณด์ž.

docker-compose stop redis-secondary-3

์—ฌ์ „ํžˆ ๋™์ž‘ํ•œ๋‹ค. ์Œ ๋ญ์ง€?

ํ•˜๋‚˜๋ฅผ ๋” ๋ง๊ฐ€๋œจ๋ ค๋ณด์ž.

docker-compose stop redis-secondary-4

๊ทธ๋ž˜๋„ ๋œ๋‹ค..

๋…ธ๋“œ๊ฐ€ ํ•œ๊ฐœ๋ผ๋„ ์žˆ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. ์ด์ƒํ•˜๋„ค..

๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋‹ค ์˜ฌ๋ฆฌ์ž.

docker-compose up -d

์ด์ œ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ๋‹ค ๋™์ž‘ํ•œ๋‹ค.

redis replica๋Š” 1๊ฐœ๋งŒ ์žˆ์–ด๋„ ๋™์ž‘์„ ํ•œ๋‹ค.

sentinel ์ฟผ๋Ÿผ

sentinel์„ ์ฃฝ์—ฌ๋ณด์ž. ๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

docker-compose stop redis-sentinel-1

์ด์ œ main์„ ์ฃฝ์—ฌ๋ณด์ž.

docker-compose stop redis-secondary-4

master๊ฐ€ ๋‹ค๋ฅธ๊ณณ์œผ๋กœ ์ด์ „์ด ์ž˜๋จ.

๋‹ค์‹œ sentinel์„ ํ•˜๋‚˜๋” ์ฃฝ์—ฌ๋ณด์ž. ์ด๋ก ์ ์œผ๋กœ๋ผ๋ฉด 3๊ฐœ์˜ sentinel์ด๋ฏ€๋กœ 1๊ฐœ์˜ ์—๋Ÿฌ๋งŒ ํ—ˆ์šฉํ•จ. 2๊ฐœ๊ฐ€ ๋˜๋ฉด main์ด ๋‹ค๋ฅธ๊ณณ์œผ๋กœ ์•ˆ๋„˜์–ด๊ฐ€์•ผํ•จ.

docker-compose stop redis-sentinel-1
docker-compose stop redis-main

ํ•˜๋‚˜ ๋” ์ฃฝ์—ฟ๊ณ  main์ด ๋‹ค๋ฅธ๊ณณ์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

๊ทธ๋ ‡๋‹ค ์•ˆ๋„˜์–ด๊ฐ„๋‹ค.

sentinel์ด ์ตœ์†Œ 2๊ฐœ๋Š” ์ž‡์–ด์•ผ failover๋ฅผ ์‹œํ‚ฌ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๋ก 2

sentinel์€ ๊ฐ€๊ธ‰์ ์ด๋ฉด 5๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2๊ฐœ์˜ ์—๋Ÿฌ๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ํ•˜์ž.

์ถ”๊ฐ€์ž‘์—…

์ด์ œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋‹ค ์˜ฌ๋ฆฌ๋ฉด ์–ด๋ฏ๊ฒŒ ๋ ๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ๋Š” ๋ณต๊ตฌ๊ฐ€ ๋ ๊ฒƒ์ธ๊ฐ€?

docker-compose up -d

๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์—‡๋˜ redis-main์€ ๋ณต๊ตฌ๊ฐ€ ๋˜์—ˆ๋‹ค ๊ทธ๋Ÿฌ๋‚˜ secondary-4๋Š” ๋ณต๊ตฌ๊ฐ€ ์•ˆ๋จ.

alt text

์™„์ „ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋ณด์ž.

docker-compose stop redis-secondary-4
docker-compose rm redis-secondary-4
docker-compose up -d
alt text

main์— ์ž˜ ์—ฐ๊ฒฐ๋œ๊ฑธ ์•Œ์ˆ˜์žˆ๋‹ค.

๊ฒฐ๋ก 3

sentinel์„ ๋‹ค ์˜ฌ๋ฆฌ๊ณ  ๋‹ค์‹œ ์˜ฌ๋ฆฌ๋ฉด ๋งˆ์ง€๋ง‰ master๊ฐ€ ๋ณต๊ตฌ๊ฐ€ ๋˜๋ฉด์„œ ๋ชจ๋“ ๊ฒƒ์ด ์ •์ƒ์œผ๋กœ๋Œ์•„์˜จ๋‹ค.

๊ธฐ์กด์— ๋งˆ์Šคํ„ฐ์—ญํ• ์„ ํ–ˆ๋˜ ๋…ธ๋“œ๋Š” ์—๋Ÿฌ ๋…ธ๋“œ๋กœ ๋‚จ๋Š”๋‹ค.

์ด๊ฑธ ์™„์ „ํžˆ ์ง€์šฐ๊ณ  ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋กœ ์˜ฌ๋ ค์ฃผ๋ฉด ๋‹ค์‹œ ํด๋Ÿฌ์Šคํ„ฐ์— ์ ‘์†์ด ๋œ๋‹ค.

๊ฒฐ๋ก 4

์ƒˆ๋กœ์šด ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ ์„ ์ถœ๊นŒ์ง€ ์•ฝ 2์ดˆ ์ด๋‚ด์— ์ฒ˜๋ฆฌ๋˜์—ˆ์œผ๋ฉฐ, ๊ทธ ๋™์•ˆ client์—์„œ๋Š” ๋งˆ์Šคํ„ฐ๋…ธ๋“œ ์ ‘๊ทผ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ.

Last updated

Was this helpful?