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

유피넬 백업시스템 만들기 #40

Open
1 of 8 tasks
simnalamburt opened this issue Sep 19, 2018 — with Slack · 13 comments
Open
1 of 8 tasks

유피넬 백업시스템 만들기 #40

simnalamburt opened this issue Sep 19, 2018 — with Slack · 13 comments

Comments

Copy link
Member

simnalamburt commented Sep 19, 2018

정말 다양한 데이터들이 있는데, 이 모든것들이 하드가 뻑나면 날아갑니다.

그냥 어떻게든 자동화해서 AWS S3나 AWS Glacier 같은곳에 올려버립니다. 저렴합니다.

백업 할 대상

  • git.upnl.org
  • upnl.org
  • pokemon.upnl.org
  • helix.upnl.org
  • 위 서비스들의 시크릿
  • 쿠버네티스 상태 자체

할 일

@simnalamburt
Copy link
Member Author

simnalamburt commented Nov 16, 2018

일단 백업 자동화를 위한 스크립트는 완성하였다. https://git.upnl.org/upnl-homepage/upnl-homepage/tree/master/contrib

디비 백업

#!/bin/bash
set -euo pipefail; IFS=$'\n\t'

PGPASSWORD='비번' pg_dump \
  --username=upnl \
  --host=localhost \
  --format=custom \
  upnl > "/home/simnalamburt/upnl.org/backups/pg_dump-$(date -Im).dump"

업로드파일 백업

#!/bin/bash
set -euo pipefail; IFS=$'\n\t'

SCRIPT_PATH="$(mktemp)"
cat <<'EOF' >"$SCRIPT_PATH"
#!/bin/bash
set -euo pipefail; IFS=$'\n\t'

CURRENT_CHECKPOINT="$1"
CURRENT_SIZE="$(( (CURRENT_CHECKPOINT - 1)*10240 ))"
CURRENT_SIZE_MIB="$(echo "scale=2; ${CURRENT_SIZE} / 1048576" | bc -l)"

TOTAL_SIZE="$2"
TOTAL_SIZE_MIB="$(echo "scale=2; ${TOTAL_SIZE} / 1048576" | bc -l)"

PERCENTAGE="$(echo "scale=2; ${CURRENT_SIZE} / ${TOTAL_SIZE} * 100" | bc -l)"

echo "${CURRENT_SIZE_MIB}MiB / ${TOTAL_SIZE_MIB}MiB (${PERCENTAGE}%)"
EOF
chmod +x "$SCRIPT_PATH"

TOTAL_SIZE="$(du -b /home/simnalamburt/upnl.org/src/homepage/upload/ | cut -f1)"

tar \
  --create \
  --force-local \
  --file="/home/simnalamburt/upnl.org/backups/upload-$(date -Im).tar" \
  --record-size=10240 \
  --checkpoint=10000 \
  --checkpoint-action="exec=$SCRIPT_PATH \$TAR_CHECKPOINT $TOTAL_SIZE" \
  --directory=/home/simnalamburt/upnl.org/src/homepage \
  upload

rm "$SCRIPT_PATH"

@simnalamburt
Copy link
Member Author

백업을 주기적으로 돌리려면 도커 안에서 크론잡을 돌려야하는데, 이것은 https://github.com/femiwiki/rankingbot/blob/master/Dockerfile 참고

@simnalamburt
Copy link
Member Author

@pbzweihander 기존에 /home/simnalamburt/upnl.org/backups에 있던 백업들은 /srv/upnl.org/backups로 옮겼습니다.

@pbzweihander
Copy link
Member

주기적으로 디비와 업로드 폴더를 백업하는 서비스를 도커로 만들어 올렸습니다.

백업 주기는 일단 디비는 3일, 업로드는 5일마다 하도록 했습니다. 5일 뒤에 둘 다 잘 돌았으면 다시 백업 주기를 조정하는게 좋을거 같아요.

@simnalamburt
Copy link
Member Author

simnalamburt commented Dec 21, 2018 via email

@simnalamburt
Copy link
Member Author

일단 /srv/upnl.org/backup에 하셨군요. 쯔방님 저희 백업용 cron 도커 이미지는 오픈소스해도 될거같은데 (관리 편의를 위해서) 어떻게 생각하세요?

@pbzweihander
Copy link
Member

백업하는 이미지를 굳이 다른 리포를 팔 필요 없을 거 같아서 일단 홈페이지 리포 안에 넣어놨어요. 오픈소스화 하면 나중에 참고하기 편하긴 하겠지만 홈페이지 배포할때 두 리포를 각각 받아서 띄우기엔 불편할거 같아요.

@simnalamburt
Copy link
Member Author

@pbzweihander 그렇지 않아요. 백업용 cron 도커 이미지를 오픈소스한다면 hub.docker.com 에 업로드할 수 있기때문에, 홈페이지 배포할때에 docker pull을 두번이 아니라 한번만 쳐도 돼요

@pbzweihander
Copy link
Member

그렇네요! docker hub automated build도 붙일 수 있겠군요. 제가 리포를 파서 올려놓겠습니다.

백업 자체는 매우 잘 이루어지는 것을 확인했습니다.

이슈는 닫아야할까요 아니면 제미니 밖으로 백업하는 수단이 완성될 때 까지 열어놓을까요?

@simnalamburt
Copy link
Member Author

제미니 밖으로 백업하는 수단이 완성될 때 까지 열어주세요

@simnalamburt
Copy link
Member Author

simnalamburt commented Jan 29, 2020

이거 안해서 https://upnl.org 의 2019-12-14 ~ 2020-01-29 데이터가 날아갔다

@simnalamburt
Copy link
Member Author

제미니 머신 안에 있던 백업들 모두 S3에 올렸습니다

@simnalamburt
Copy link
Member Author

upnl/kubernetes#12 에서 작업이 진행중입니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants