Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dev db 백업 주기 자동화 설정 #322

Closed
niamu01 opened this issue Sep 1, 2023 · 15 comments
Closed

dev db 백업 주기 자동화 설정 #322

niamu01 opened this issue Sep 1, 2023 · 15 comments
Assignees
Labels
enhancement New feature or request
Milestone

Comments

@niamu01
Copy link
Contributor

niamu01 commented Sep 1, 2023

dev 인스턴스에 2GB 이상 여유를 두기 어려워 8GB 에서 10GB 로 확장하였습니다.

방식:
prod 용 db 인스턴스

  1. mongodump --port=11900
  2. scp -r -i <.pem 경로> ./dump ubuntu@<dev private ip>:dump
  3. rm -rf dump

dev 인스턴스

  1. mongorestore --uri="mongodb://<username>:<password>@<dev pricate ip>:<db port>/<db name>" ./dump/42stat/
  2. rm -rf dump
    +) 이렇게 해도 중복 _id 는 업데이트 되지 않긴 하지만 prod 처럼 마지막 업데이트 시점이 기록되면 좋을 것 같네요...

todo: 인스턴스가 강제 종료 될 경우
-> db 를 나눠서 restore, Elastic IP 등록

@niamu01 niamu01 added this to 42Stat Aug 27, 2023
@niamu01 niamu01 converted this from a draft issue Sep 1, 2023
@niamu01 niamu01 moved this from 📋 Backlog to 🏗 In progress in 42Stat Sep 1, 2023
@yoopark yoopark moved this from 🏗 In progress to 🔖 Ready in 42Stat Sep 1, 2023
@niamu01 niamu01 moved this from 🔖 Ready to 🏗 In progress in 42Stat Sep 1, 2023
@niamu01 niamu01 self-assigned this Sep 1, 2023
@niamu01 niamu01 moved this from 🏗 In progress to 🔖 Ready in 42Stat Sep 17, 2023
@jpham005 jpham005 added the enhancement New feature or request label Sep 26, 2023
@jpham005
Copy link
Member

이거 나중에 진행할때 primary secondary 구조로 할 수 있을지 알아보세요

@jpham005 jpham005 added this to the v1.0.0 milestone Oct 1, 2023
@niamu01 niamu01 changed the title 백업 주기 자동화 설정 dev db 백업 주기 자동화 설정 Oct 13, 2023
@niamu01
Copy link
Contributor Author

niamu01 commented Oct 18, 2023

  • 24GB로 맞추기
  • Cron 작업

@niamu01 niamu01 moved this from 🔖 Ready to 🏗 In progress in 42Stat Oct 19, 2023
@niamu01
Copy link
Contributor Author

niamu01 commented Oct 19, 2023

prod-db:
매주 수요일 오전 4시에 cron 으로 실행됩니다.

백업용 폴더 생성
collection 리스트 받아오기
collection 들을 5초 텀으로 dump 하여 bson 파일 생성
scp 로 백업 폴더 전체 전달
백업 폴더 삭제

dev:
매주 수요일 오전 5시에 cron 으로 실행됩니다.

백업된 db 폴더가 있는 있는 경우,
docker down
bson 파일들을 collection 단위로 10초 텀으로 복원
docker up
백업된 db 폴더 삭제

코드

prod-db

#!/bin/bash

BACKUP_DIR="$(date +'%Y%m%d')"
mkdir -p $BACKUP_DIR

port="11900"
ip="172.31.8.65"
database="42stat"

collections=$(mongosh "mongodb://localhost:$port/$database" --eval "db.getCollectionNames()" --quiet | tr -d "[],'")

collections_array=($collections)

count=${#collections_array[@]}

for ((i=0; i<$count; i++)); do
    mongodump --port $port --db $database --collection ${collections_array[i]} --out $BACKUP_DIR
done

scp -r -i ./42stat.pem ./$BACKUP_DIR ubuntu@$ip:~/

rm -rf ./$BACKUP_DIR

dev

#!/bin/bash

username="statdevuser"
password="DevPassw0rd6373"
ip="172.31.8.65"
port="27017"
db_name="42stat"

MONGO_URI="mongodb://$username:$password@$ip:$port/$db_name"
BACKUP_DIR="$HOME/$(date +'%Y%m%d')/$db_name"

if [ ! -d "$BACKUP_DIR" ]; then
    echo "$BACKUP_DIR does not exist. Exiting script."
    exit 1
fi

cd $HOME/42Stat-Backend
docker-compose -f docker-compose.dev.yml down

cd $HOME

BSON_FILES=($(ls -1 "$BACKUP_DIR"/*.bson))

for FILE in "${BSON_FILES[@]}"; do
  echo "Restoring $FILE..."
 sudo mongorestore --uri="$MONGO_URI" --drop "$FILE"
  echo "Restored $FILE!"
done

cd $HOME/42Stat-Backend
docker-compose -f docker-compose.dev.yml up -d

cd $HOME
rm -rf $BACKUP_DIR

@niamu01 niamu01 closed this as completed Oct 20, 2023
@github-project-automation github-project-automation bot moved this from 🏗 In progress to ✅ Done in 42Stat Oct 20, 2023
@jpham005
Copy link
Member

@niamu01

  1. getSiblingDB 를 사용한 이유가 뭔가요?
  2. sleep 을 넣어주는 이유가 뭔가요?

@jpham005
Copy link
Member

pdf 업로드 할 때 충돌하지 않나요?
production db 그대로 가져가면 project 에 production url 이 들어갈 것으로 보입니다.

@jpham005 jpham005 reopened this Oct 21, 2023
@yoopark yoopark moved this from ✅ Done to 🔖 Ready in 42Stat Oct 21, 2023
@jpham005 jpham005 moved this from 🔖 Ready to 🏗 In progress in 42Stat Oct 21, 2023
@niamu01
Copy link
Contributor Author

niamu01 commented Oct 21, 2023

  • getSiblingDB 은 입력받은 이름의 데이터베이스 오브젝트를 반환한다해서 사용하였습니다.
  • sleep 은 어짜피 한 줄이 다 실행되어야 넘어가기 때문에 빼도 문제 없습니다.

pdf 충돌은 이전에 한 번 겪었던 일인데 깜박했네요... 어떻게 해결할지 고민해보겠습니다... 🤔

@jpham005
Copy link
Member

근데 dev db 의 collection 을 받아와야 하는 이유를 잘 모르겠고,
sleep 은 빼는게 낫겠네요.
pdf 충돌은 그냥 dev 에서도 prod cdn 쓰는거 상관없지않나 하는 생각입니다.

@jpham005
Copy link
Member

더 정확히 말하자면 백엔드가 dev s3 와 상호작용하는 일이 없는게 맞지 않나 라는 생각입니다.

@niamu01
Copy link
Contributor Author

niamu01 commented Oct 22, 2023

하긴 dev s3 에 pdf 올리던 게 예전에 dev 에서 먼저 테스트하느냐고 올라간 거긴 하죠
s3 주소 자체를 db 에서 꺼내서 주는 방식으로 결정됐으니 이젠 prod cdn 을 같이 사용하는 게 더 편리할 것 같습니다.

dev db 의 collection 을 받아오고 있나요?

@jpham005
Copy link
Member

getSibling 함수가 그런 역할을 하는게 아니였나요?

@niamu01
Copy link
Contributor Author

niamu01 commented Oct 22, 2023

getSiblingDB 은 prod db 에서 collection 별로 dump 하기 위해서 사용합니다
dev 에서는 안사용해용

@jpham005
Copy link
Member

collections=$(mongosh --port $port --quiet --eval "db.getSiblingDB('$database').getCollectionNames()" | tr -d "[],'")
prod db script 중에 이런 부분이 있던데요, getCollectionNames() 을 바로 호출해도 되지 않나요?
Dev db collection 불러온다고 생각했던 것은 제 착각인듯 하네요.

@niamu01
Copy link
Contributor Author

niamu01 commented Oct 22, 2023

db.getCollectionNames() 를 하면 db 를 특정하지 못해 빈 배열이 나오고,
--eval "use 42stat; db.getCollectionNames()" 은 42stat 데이터베이스로 바뀌었다는 문구만 뜨고 collection 배열은 출력이 안되더라구요 🤔

@jpham005
Copy link
Member

collections=$(mongosh --quiet --eval "db.getCollectionNames()" mongodb://localhost:$port/42stat | tr -d "[],'")
getSiblingDB 는 인스턴스의 여러개의 db에 동시에 접근해야 하는 경우 사용하는 것 같습니다.

@niamu01
Copy link
Contributor Author

niamu01 commented Oct 22, 2023

그냥 use @@ 대체용이라 생각했는데 그렇군요
url에서 db 적어주고 바로 getCollectionNames() 사용하는걸로 변경하겠습니다.

+) 수요일에 돌아가는것 확인 후 이슈 닫겠습니다

@niamu01 niamu01 closed this as completed Oct 25, 2023
@github-project-automation github-project-automation bot moved this from 🏗 In progress to ✅ Done in 42Stat Oct 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Status: Done
Development

No branches or pull requests

2 participants