728x90
반응형
Docker로 redis master-slave를 올리면서 sentinel을 적용해봤다.
version: '3.8'
services:
redis1:
image: bitnami/redis
environment:
- REDIS_REPLICATION_MODE=master # 복제보드 master/slave
- REDIS_MASTER_HOST=redis1 # host의 이름이나 IP
- REDIS_MASTER_SET=master # master이름
- REDIS_MASTER_PASSWORD=1234qwer # master 인증을 위한 비밀번호
- REDIS_PASSWORD=1234qwer # redis 비밀번호
- REDIS_TIMEOUT=0 # 클라이언트가 접속을 끊는 시간 (0은 끊지 않음)
- REDIS_AOF_ENABLED=no # 데이터를 파일에 쓸지 여부를 결정
- REDIS_REPLICA_IP=172.19.198.56 # 복제 IP 기본은 컨테이너 IP이고 host ip쓰면 host ip반환
- REDIS_REPLICA_PORT=6379 # published port
- TZ=UTC
ports:
- target: 6379
published: 6379
protocol: tcp
mode: host
volumes:
- /mnt/d/sentinel-redis2:/bitnami
logging:
driver: "syslog"
deploy:
placement:
constraints: [node.labels.redis1 == true]
redis2:
image: bitnami/redis
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis1
- REDIS_MASTER_SET=master
- REDIS_MASTER_PASSWORD=1234qwer
- REDIS_PASSWORD=1234qwer
- REDIS_TIMEOUT=0
- REDIS_AOF_ENABLED=no
- REDIS_REPLICA_IP=172.19.198.56
- REDIS_REPLICA_PORT=6378
- TZ=UTC
ports:
- target: 6379
published: 6378
protocol: tcp
mode: host
volumes:
- /mnt/d/sentinel-redis1:/bitnami
logging:
driver: "syslog"
deploy:
placement:
constraints: [ node.labels.redis2 == true ]
redis3:
image: bitnami/redis
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis1
- REDIS_MASTER_SET=master
- REDIS_MASTER_PASSWORD=1234qwer
- REDIS_PASSWORD=1234qwer
- REDIS_TIMEOUT=0
- REDIS_AOF_ENABLED=no
- REDIS_REPLICA_IP=172.19.198.56
- REDIS_REPLICA_PORT=6377
- TZ=UTC
ports:
- target: 6379
published: 6377
protocol: tcp
mode: host
volumes:
- /mnt/d/sentinel-redis3:/bitnami
logging:
driver: "syslog"
deploy:
placement:
constraints: [ node.labels.redis3 == true ]
sentinel:
image: bitnami/redis-sentinel
environment:
- REDIS_MASTER_HOST=redis1 # master의 hostname
- REDIS_MASTER_SET=master
- REDIS_MASTER_PASSWORD=1234qwer
- REDIS_SENTINEL_QUORUM=2 # 마스터 다운에 대한 동의를 해야하는 sentinel 수
- REDIS_SENTINEL_PASSWORD=1234qwer
- REDIS_SENTINEL_DOWN_AFTER_MILLISECONDS=3000 # sentinel이 마스터노드 장애여부 판단하는 시간
- REDIS_SENTINEL_ANNOUNCE_IP=172.19.198.56
- TZ=UTC
depends_on:
- redis1
- redis2
- redis3
ports:
- '26379:26379'
logging:
driver: "syslog"
deploy:
replicas: 3
placement:
constraints: [node.labels.sentinel == true]
redis 세대를 올렸을 때 컨테이너의 IP는 각각 172.28.5.71, 172.28.5.61, 172.28.5.74이다.
REDIS_REPLICA_IP에 host ip (wsl의 ip)를 설정하면 어플리케이션에서 마스터로 커넥션을 시도할 때 sentinel에서 wsl ip를 전달한다.
로그를 보면 wsl ip랑 포트로 바인딩된 걸 확인할 수 있다.
마스터를 확인할 때 docker container에 접속해서 확인할 수 있다.
$redis-cli -p 6379
auth {비밀번호}
info replication
마스터일 경우 role에 master를 확인할 수 있다.
마스터 redis를 내려보겠다.
redis2번으로 연결된 걸 확인할 수 있다.
redis2번을 내려보겠다.
연결할 수 없다고 뜬다.
그 사이 새로 올라온 redis1번 서버와 접속한다.
728x90
반응형
'Docker' 카테고리의 다른 글
Docker container <-> 호스트 간에 파일/폴더 복사 (0) | 2023.06.28 |
---|---|
Docker 실행중인 컨테이너 host 파일에 값 추가 하는 방법 (0) | 2023.03.02 |
dial tcp: lookup ****: Temporary failure in name resolution (0) | 2023.02.16 |
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock (0) | 2023.02.14 |
docker에 Rancher 설치 (0) | 2023.02.11 |