redis의 replication구성과 sentinel까지 3대의 EC2에서 docker환경으로 구현해보겠다.
redis가 실행시 EC2(ubuntu)의 기본유저(1000, ubuntu)로 실행되도록 Dockerfile을 생성하여 빌드
FROM redis:6.2.6
RUN groupmod -g 1000 redis
RUN usermod -u 1000 -g 1000 redis
USER 1000
CMD [ "redis-server", "/data/redis.conf" ]
docker build -t seaking7/redis:1.0 .
Redis replication 구동
3개의 EC2 노드에서 각각 docker로 구동 및 replication 설정
docker run --name redis-replica -v /home/ubuntu/redis-replica:/data -p 3000:3000 -d seaking7/redis:1.0 redis-server /data/redis.conf
replication 명령어
slaveof <masterip> <masterport>
slaveof no one
config set slave-read-only no : slave에서 쓰기도 허용
sentinel 설정
별도의 경로 /redis-sentinel 에 redis-sentinel.conf 설정
port 26379
logfile "/data/sentinel_8000.log"
sentinel monitor mymaster 100.51.0.162 3000 2
sentinel down-after-milliseconds mymaster 5000
sentinel docker 실행
docker run --name redis-sentinel -v /home/ubuntu/redis-sentinel:/data -p 26379:26379 -d bitnami/redis-sentinel:6.2.6 redis-sentinel /data/redis-sentinel.conf
spring boot 에서 접속(application.properties 설정)
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=100.51.6.77:26379,100.51.5.35:26379,100.51.0.162:26379
master다운시 HA 확인
기존에 master(100.51.0.162 3000) 다운시 투표를 통해 다음 master(100.51.5.35 3000)로 전환되었다.
어플리케이션도 변경된 master로 재접속하여 정상 insert를 해주고 있다.
: Reconnecting, last destination was /100.51.0.162:3000
: Cannot reconnect to [100.51.0.162:3000]: Connection refused: /100.51.0.162:3000
: Reconnecting, last destination was 100.51.0.162:3000
: Reconnected to 100.51.5.35:3000
: >>>>>>> [save] FrequencyAds=FrequencyAds(id=125113, adsNumber=173123, adsViewTime=2022-04-25T15:41:33.513739)
: >>>>>>> [save] FrequencyAds=FrequencyAds(id=165373, adsNumber=180442, adsViewTime=2022-04-25T15:41:33.861325)
: >>>>>>> [save] FrequencyAds=FrequencyAds(id=198809, adsNumber=120054, adsViewTime=2022-04-25T15:41:34.116591)
반응형