Redis Sentinel는 Redis에서 장애가 생길 경우를 대비하여, Redis를 복제(?)해두는 기법이라고 생각하면 된다.
이러한 구조로 이루어지며, replica들은 master redis를 복제하다가, master에 장애가 생기게 되면 본인이 master가 되어 장애에 대비할 수 있도록 한다. (그 중 하나가 master로 승격한다)
https://hub.docker.com/_/redis
redis - Official Image | Docker Hub
Quick reference Supported tags and respective Dockerfile links 8.0-M02-alpine, 8.0-M02-alpine3.208.0-M02, 8.0-M02-bookworm7.4.1, 7.4, 7, latest, 7.4.1-bookworm, 7.4-bookworm, 7-bookworm, bookworm7.4.1-alpine, 7.4-alpine, 7-alpine, alpine, 7.4.1-al
hub.docker.com
Redis의 공식 이미지 페이지에 redis.conf로 설정하는 방법이 나와있다.
한 번 따라해보도록 하겠다.
redis.conf라는 파일을 만들고 master redis에 대한 정보를 작성하였다.
replicaof redis 6379
docker-compose.yml로 도커를 실행할텐데, 같은 디렉토리에 만들어서 넣어주면 된다.
그렇게 docker-compose.yml은 다음과 같이 작성하였다.
version: '3.8'
services:
redis:
container_name: redis
image: redis:7.4-alpine
ports:
- '12042:6379'
networks:
- monitoring
replica1:
container_name: replica1
image: redis:7.4-alpine
ports:
- '12043:6379'
networks:
- monitoring
volumes:
- ./redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
replica2:
container_name: replica2
image: redis:7.4-alpine
ports:
- '12044:6379'
networks:
- monitoring
volumes:
- ./redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
monitoring:
우선 모든 redis 컨테이너들을 같은 네트워크로 연결해주고, 포트는 각각 다르게 나올 수 있도록 설정해준다.
그리고 volumes를 사용해 redis.conf를 우리가 작성한 redis.conf로 바꿔준다.
마지막으로 해당 redis conf를 사용할 수 있도록 redis-server /usr/local/etc/redus/redis.conf를 명령어를 사용하여 설정을 적용해준다.
이렇게 하면 적용이 완료되었다.
우선 master redis를 연결하여 redis-cli에서 다음 명령어를 입력해보자.
info replication
그러면 아래와 같이 slave가 2개 연결되었다고 나온다.
값은 동기화가 되는지 확인해보자
SET key1 100
SET key2 200
master에 key1, key2를 설정해주고 slave에서 keys로 확인해보자.
이렇게 replica1의 커널에서도 값이 생성된 것을 볼 수 있다.
(여기서 replica된 redis에는 값을 입력할 수 없다.)
앞으로는 장애가 생겼을 때, 데이터의 손실을 막기 위해서 replica 하나 정도는 설정해두도록 해야겠다.
'토이 프로젝트' 카테고리의 다른 글
Reactive Kafka를 사용해 Email notification 서버에서 메일 보내기 (0) | 2024.11.28 |
---|---|
WebFlux에서 RedissonReactive를 사용한 동시성 이슈 해결 (0) | 2024.11.17 |
Redis의 pub-sub을 사용한 SSE notification 서버 만들기 (1) | 2024.11.09 |
Redis를 사용하여 DB Cache 구현하기 (1) | 2024.11.07 |
Ubuntu에 Jenkins 설치하기 (0) | 2024.11.06 |