1. 실패
처음엔 원래 세팅을 AWS linux2 arn으로 세팅하려고 했으나
arn으로 세팅시 docker, docker-compose는 정상적으로 설치되나
추가 image를 받아올 때 arn이미지 쪽에서 문제가 발생함
그래서 AWS linux2 64로 했습니다
linux2 arn의 이점은 aws에서 t4g를 사용할수 있습니다
t4g랑 t3a의 가격을 비교해보면
t4g.medium | 0.0416 USD | 2 | 4 GiB | EBS 전용 | 최대 5기가비트 |
t3.medium | 0.052 USD | 2 | 4 GiB | EBS 전용 | 최대 5기가비트 |
t3a.medium | 0.0468 USD | 2 | 4 GiB | EBS 전용 | 최대 5기가비트 |
약 15프로 가량 저렴하며 가능하면 t4g를 사용하는게 좋다고 판단 했으나
아직 지원하지 않는곳이 많으므로 확인이 필요했습니다
도커 설치
yum install docker
systemctl start docker
systemctl enable docker
docker-compose 설치
curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose.yml 작성
version: '2'
networks:
app-tier:
driver: bridge
services:
redis:
image: 'bitnami/redis:latest'
environment:
- REDIS_REPLICATION_MODE=master
- ALLOW_EMPTY_PASSWORD=yes
volumes:
- ./data/redis:/bitnami/redis
networks:
- app-tier
ports:
- 6379:6379
redis-slave-1:
image: 'bitnami/redis:latest'
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis
- ALLOW_EMPTY_PASSWORD=yes
volumes:
- ./data/rediss1:/bitnami/redis
ports:
- 6479:6379
depends_on:
- redis
networks:
- app-tier
redis-slave-2:
image: 'bitnami/redis:latest'
environment:
- REDIS_REPLICATION_MODE=slave
- REDIS_MASTER_HOST=redis
- ALLOW_EMPTY_PASSWORD=yes
volumes:
- ./data/rediss2:/bitnami/redis
ports:
- 6579:6379
depends_on:
- redis
networks:
- app-tier
redis-sentinel:
image: 'bitnami/redis-sentinel:latest'
environment:
- REDIS_SENTINEL_DOWN_AFTER_MILLISECONDS=3000
- REDIS_MASTER_HOST=redis
- REDIS_MASTER_PORT_NUMBER=6379
- REDIS_MASTER_SET=mymaster
- REDIS_SENTINEL_QUORUM=2
depends_on:
- redis
- redis-slave-1
- redis-slave-2
ports:
- 26379:26379
networks:
- app-tier
redis-sentinel-2:
image: 'bitnami/redis-sentinel:latest'
environment:
- REDIS_SENTINEL_DOWN_AFTER_MILLISECONDS=3000
- REDIS_MASTER_HOST=redis
- REDIS_MASTER_PORT_NUMBER=6379
- REDIS_MASTER_SET=mymaster
- REDIS_SENTINEL_QUORUM=2
depends_on:
- redis
- redis-slave-1
- redis-slave-2
ports:
- 26380:26379
networks:
- app-tier
redis-sentinel-3:
image: 'bitnami/redis-sentinel:latest'
environment:
- REDIS_SENTINEL_DOWN_AFTER_MILLISECONDS=3000
- REDIS_MASTER_HOST=redis
- REDIS_MASTER_PORT_NUMBER=6379
- REDIS_MASTER_SET=mymaster
- REDIS_SENTINEL_QUORUM=2
depends_on:
- redis
- redis-slave-1
- redis-slave-2
ports:
- 26381:26379
networks:
- app-tier
저장소로 사용할 공간 생성
mkdir /data/redis/data
chmod 777 /data/redis/data
compose 실행
docker-compose up -d
새로운 폴더가 생성되며 해당 폴더에 권한 오류가 발생함
docker-compose down
새로운 폴더에 권한 부여
chmod -R 777 /data/redis/data
재시작
docker-compose up -d
redis 접속
docker run -it --network docker_app-tier --rm redis redis-cli -h {ip} -p 6479
sentinel 접속
docker run -it --network docker_app-tier --rm redis redis-cli -h {ip} -p 26379
{ip}부분을 설정하신 ip로 수정하신 후 접속하시면 됩니다
docker_app_tier는 위에서 설정한 네트워크입니다
정상 동작 확인
redis 접속 후 info
slaves = 2
sentinels = 3 확인
172.19.0.2가 master인걸 확인
sentinul 명령어
SENTINEL get-master-addr-by-name mymaster
1) "172.19.0.2"
2) "6379"
docker run -it --network docker_app-tier --rm redis redis-cli -h {ip} -p 6379 DEBUG sleep 30
docker 해당 ip 6379 port에 sleep을 줘 강제로 master를 바꿈
SENTINEL get-master-addr-by-name mymaster
1) "172.19.0.3"
2) "6379"
docker logs -f redis_redis_1
1:S 31 May 2021 05:21:09.010 * MASTER <-> REPLICA sync: receiving 197 bytes from master to disk
1:S 31 May 2021 05:21:09.010 * MASTER <-> REPLICA sync: Flushing old data
1:S 31 May 2021 05:21:09.010 * MASTER <-> REPLICA sync: Loading DB in memory
1:S 31 May 2021 05:21:09.012 * Loading RDB produced by version 6.2.3
1:S 31 May 2021 05:21:09.012 * RDB age 1 seconds
1:S 31 May 2021 05:21:09.012 * RDB memory usage when created 1.71 Mb
1:S 31 May 2021 05:21:09.012 * MASTER <-> REPLICA sync: Finished with success
docker container 자동 실행 등록
crontab -e
@reboot docker-compose -f /data/redis/docker-compose.yml up -d
haproxy 설정
내부에 있는 포트를 관리하여 특정 포트를 이용해 항상 master를 유지해줌
yum install haproxy
vi /etc/haproxy/haproxy.cfg
haproxy.cfg
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
defaults REDIS
mode tcp
timeout connect 4s
timeout server 15s
timeout client 15s
# timeout tunnel 365d
frontend front_redis_master1
bind *:5000 name redis #5000번 포트에 대한 bind 정보입니다.
default_backend back_redis_master1 #5000번 포트로 신호가 들어오면 backend를 실행
backend back_redis_master1
option tcp-check
tcp-check connect
tcp-check send PING\r\n
tcp-check expect string +PONG
tcp-check send info\ replication\r\n
tcp-check expect string role:master
tcp-check send QUIT\r\n
tcp-check expect string +OK
server redis_6379 {ip}:6379 check inter 1s
server redis_6479 {ip}:6479 check inter 1s
server redis_6579 {ip}:6579 check inter 1s
frontend front_redis_slave1
bind *:5001 name redis #5001번 포트에 대한 bind 정보입니다.
default_backend back_redis_slave1
backend back_redis_slave1
option tcp-check
tcp-check connect
tcp-check send PING\r\n
tcp-check expect string +PONG
tcp-check send info\ replication\r\n
tcp-check expect string role:slave
tcp-check send QUIT\r\n
tcp-check expect string +OK
server redis_6379 {ip}:6379 check inter 1s
server redis_6479 {ip}:6479 check inter 1s
server redis_6579 {ip}:6579 check inter 1s
#Listen on all IP's on port 9000 //9000 포트로 접근 시, Web Console에 진입할 수 있습니다.
listen stats
bind 0.0.0.0:9000
mode http
balance
timeout client 5000
timeout connect 4000
timeout server 30000
#This is the virtual URL to access the stats page
stats uri /haproxy_stats //URL주소는 ip:9000/haproxy_stats입니다.
#Authentication realm. This can be set to anything. Escape space characters with a backslash.
stats realm HAProxy\ Statistics
#The user/pass you want to use. Change this password!
stats auth admin:1234 #Web Console에 접근하는 계정/암호 설정
#This allows you to take down and bring up back end servers.
#This will produce an error on older versions of HAProxy.
stats admin if TRUE
재시작
service haproxy restart
{ip}:9000/haproxy_stats
접속하여 모니터링 가능
'JAVA > 서버작업' 카테고리의 다른 글
aws-linux arm64 git-lfs 설치하기 (0) | 2021.06.28 |
---|---|
Mysql DTO,entity,VO 자동 생성하기 (0) | 2021.06.15 |
카카오,네이버 API Response 작성 (0) | 2021.06.13 |
AWS Linux2 + Jenkins + Github 서버구성 및 배포 (0) | 2021.05.25 |
AWS Linux 2(Arm) Spring Boot(JAVA11) + Maven 서버 올리기 (0) | 2021.05.25 |
댓글