ํค์ด ํ๋ธ๋ฅด!
์ค๋์ ๋ค์ํ ๊ตฌ์ฑ์ผ๋ก Nextcloud ์คํ ๋ฆฌ์ง์์ ๋น ๋ฐ์ดํฐ ๋ฐฑ์ ์ ์๋ํํ ๊ฒฝํ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์ถ์ต๋๋ค. ์ ๋ Molniya AK์์ ์๋น์ค ์คํ ์ด์ ์ผ๋ก ๊ทผ๋ฌดํ๋ฉฐ IT ์์คํ ์ ๊ตฌ์ฑ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๊ณ ์์ผ๋ฉฐ Nextcloud๋ ๋ฐ์ดํฐ ์ ์ฅ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ถ์ฐ ๊ตฌ์กฐ์ ์ค๋ณต์ฑ์ ํฌํจํฉ๋๋ค.
์ค์น ๊ธฐ๋ฅ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค๋ ๊ฒ์ ๋๋ค. Nextcloud์์ ์ ๊ณตํ๋ ๋ฒ์ ๊ด๋ฆฌ, ์ค๋ณต์ฑ, ์ฃผ๊ด์ ์ธ ์ด์ ๋ฑ ๋ง์ ์ค๋ณต์ด ์์ฑ๋ฉ๋๋ค.
์ ์ฌ ์๋
Nextcloud๋ฅผ ๊ด๋ฆฌํ ๋ ๋ฐ์ดํฐ๊ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์ ์ํธํํด์ผ ํ๋ ํจ๊ณผ์ ์ธ ๋ฐฑ์ ์ ๊ตฌ์ฑํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๊ด๋ฆฌ์ ๋ํ ์ ์ฐํ๊ณ ์๋ํ๋ ์ ๊ทผ ๋ฐฉ์์ด ํ์ํ Nextcloud์๋ ๋ณ๋์ ์์คํ ์ ๋ฐฑ์ ์ ์ ์ฅํ๊ฑฐ๋ ๊ณ ๊ฐ์ ์ฅ์์ ๋ฐฑ์ ์ ์ ์ฅํ ์ ์๋ ์ต์ ์ ์ ๊ณตํฉ๋๋ค.
๋ง์ ํด๋ผ์ด์ธํธ๊ฐ ์์ผ๋ฉฐ ๋ชจ๋ ๊ตฌ์ฑ์ด ๋ค๋ฅด๊ณ ๋ชจ๋ ์์ฒด ์ฌ์ดํธ์ ํน์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ ์ ์ฒด ์ฌ์ดํธ๊ฐ ๊ทํ์๊ฒ ์ํด ์๊ณ ๋ฐฑ์ ์ด ํฌ๋ผ์ด์ผ๋ก ๋ง๋ค์ด์ง๋ ๊ฒฝ์ฐ ํ์ค ๊ธฐ์ ์ด๋ฏ๋ก ์ ๋ง์ง ์์ต๋๋ค.
๋จผ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ค์์ด ํ์ํฉ๋๋ค:
- ํ๋ ๋๋ ์ฌ๋ฌ ๋ ธ๋ ์ธก๋ฉด์์ ํ์ฅ์ฑ. ๋๊ท๋ชจ ์ค์น์ ๊ฒฝ์ฐ minio๋ฅผ ์คํ ๋ฆฌ์ง๋ก ์ฌ์ฉํฉ๋๋ค.
- ๋ฐฑ์ ์ํ ์ ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํด ์์๋ณด์ธ์.
- ๊ทํ๋ ๊ทํ์ ๊ณ ๊ฐ ๋ฐ/๋๋ ๋น์ฌ์ ๋ฐฑ์ ์ ๋ณด๊ดํด์ผ ํฉ๋๋ค.
- ๋น ๋ฅด๊ณ ์ฝ๊ฒ ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ์ธ์.
- ํด๋ผ์ด์ธํธ์ ์ค์น๋ ์๋ก ๋งค์ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ํต์ผ์ฑ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
- ๋ณต๊ตฌ ์๋๋ ์ ์ฒด ๋ณต๊ตฌ(์ฌํด), ์ค์๋ก ํ๋์ ํด๋๊ฐ ์ง์์ง ๋ ๊ฐ์ง ์๋๋ฆฌ์ค์์ ์ต์ํ๋์ด์ผ ํฉ๋๋ค.
- ์ค๋ณต ์ ๊ฑฐ ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค.
๋ฐฑ์ ๊ด๋ฆฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด GitLab์ ์ค์นํ์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ํํด๋ณ๋ก ํ์ธํ์ธ์.
๋ฌผ๋ก , ์ฐ๋ฆฌ๊ฐ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ต์ด์ ์ฌ๋์ ์๋์ง๋ง, ์ฐ๋ฆฌ์ ์ค์ฉ์ ์ด๊ณ ํ๋ค๊ฒ ์ป์ ๊ฒฝํ์ด ํฅ๋ฏธ๋ก์ธ ์ ์๋ค๊ณ ์๊ฐํ๊ณ ์ด๋ฅผ ๊ณต์ ํ ์ค๋น๊ฐ ๋์ด ์์ต๋๋ค.
์ฐ๋ฆฌ ํ์ฌ๋ ์คํ์์ค ์ ์ฑ
์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ์คํ์์ค ์๋ฃจ์
์ ์ฐพ๊ณ ์์์ต๋๋ค. ์ฐจ๋ก๋ก ์ฐ๋ฆฌ๋ ๊ฐ๋ฐ ๋ด์ฉ์ ๊ณต์ ํ๊ณ ๊ฒ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด GitHub์๋ ๋ค์์ด ์์ต๋๋ค.
๋ฐฑ์ ๋๊ตฌ
์ฐ๋ฆฌ๋ ๋ฐฑ์ ์์ฑ ๋๊ตฌ๋ฅผ ์ ํํ์ฌ ์๋ฃจ์ ๋ฐฉ๋ฒ์ ์ฐพ๊ธฐ ์์ํ์ต๋๋ค.
์ผ๋ฐ tar + gzip์ ์ ๋๋ก ์๋ํ์ง ์์ต๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ค๋ณต๋ฉ๋๋ค. ์ฆ๋ถ์๋ ์ค์ ๋ณ๊ฒฝ ์ฌํญ์ด ๊ฑฐ์ ํฌํจ๋์ง ์์ผ๋ฉฐ ๋จ์ผ ํ์ผ ๋ด์ ๋ง์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋ ๋ค๋ฅธ ๋ฌธ์ ๋ ๋ถ์ฐ ๋ฐ์ดํฐ ์ ์ฅ์ ์ค๋ณต์ฑ์
๋๋ค. ์ฐ๋ฆฌ๋ minio๋ฅผ ์ฌ์ฉํ๋๋ฐ ๊ทธ ๋ฐ์ดํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ณต๋ฉ๋๋ค. ๋๋ minio ์์ฒด๋ฅผ ํตํด ๋ฐฑ์
์ ๋ง๋ค์ด์ผ ํ์ต๋๋ค. ์ด๋ฅผ ๋ก๋ํ๊ณ ํ์ผ ์์คํ
์ฌ์ด์ ๋ชจ๋ ์คํ์ด์๋ฅผ ์ฌ์ฉํด์ผ ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์ค์ํ ๊ฒ์ ์ผ๋ถ ๋ฒํท๊ณผ ๋ฉํ ์ ๋ณด๋ฅผ ์์ด๋ฒ๋ฆด ์ํ์ด ์๋ค๋ ๊ฒ์
๋๋ค. ์๋๋ฉด ์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ฌ์ฉํ์ธ์.
๋ณต์ ๊ธฐ๋ฅ์ด ์๋ ๋ฐฑ์
๋๊ตฌ๋ ์คํ ์์ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค(Habrรฉ์๋
๋ฐฑ์ ๊ด๋ฆฌ
Borg์ Restic์ ํ๋ฅญํ์ง๋ง ๋ ์ ํ ๋ชจ๋ ์ค์ ์ง์ค์ ์ ์ด ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค. ๊ด๋ฆฌ ๋ฐ ์ ์ด๋ฅผ ์ํด ์ฐ๋ฆฌ๋ ์๋ํ๋ฅผ ํฌํจํ์ฌ ์์ ์ ์์ํ ์ ์๋ ์ด๋ฏธ ๊ตฌํํ ๋๊ตฌ๋ฅผ ์ ํํ์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ ์๋ ค์ง CI/CD์ธ GitLab์ ๋๋ค.
์์ด๋์ด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Nextcloud ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ ๋ ธ๋์ gitlab-runner๊ฐ ์ค์น๋ฉ๋๋ค. ์คํ๊ธฐ๋ ๋ฐฑ์ ํ๋ก์ธ์ค๋ฅผ ๋ชจ๋ํฐ๋งํ๋ ์ผ์ ์ ๋ฐ๋ผ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ณ Borg ๋๋ Restic์ ์์ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ฌด์์ ์ป์๋์? ์คํ ํผ๋๋ฐฑ, ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ํธ๋ฆฌํ ์ ์ด, ์ค๋ฅ ๋ฐ์ ์ ์ธ๋ถ ์ ๋ณด.
์ฌ๊ธฐ์
์์ง Gitlab API์์ CI/CD ์๊ฐ ์ด๊ณผ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ง๋ง ํฌ๊ธฐ๊ฐ ์์ต๋๋ค. ๋๋ ค์ผ ํ๋ค๊ณ ํ๋๊ตฐ์ 1d
.
๋คํ์ค๋ฝ๊ฒ๋ GitLab์ ์ปค๋ฐ๋ฟ๋ง ์๋๋ผ ์ผ์ ์ ๋ฐ๋ผ์๋ง ์์ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ฐ๋ฆฌ์๊ฒ ํ์ํ ๊ฒ์ ๋๋ค.
์ด์ ๋ํผ ์คํฌ๋ฆฝํธ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
์ด ์คํฌ๋ฆฝํธ์ ๋ํด ๋ค์ ์กฐ๊ฑด์ ์ค์ ํ์ต๋๋ค.
- ๋์ผํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ฌ๋์ ์ฝ์์์ ์ง์ ์คํํด์ผ ํฉ๋๋ค.
- ์ค๋ฅ ์ฒ๋ฆฌ๊ธฐ๊ฐ ์์ด์ผ ํฉ๋๋ค.
- ๋ฐํ ์ฝ๋.
- ๋ก๊ทธ์์ ๋ฌธ์์ด์ ๊ฒ์ํ์ธ์. ์๋ฅผ ๋ค์ด, ์ฐ๋ฆฌ์๊ฒ ์ค๋ฅ๋ ํ๋ก๊ทธ๋จ์ด ์น๋ช ์ ์ด๋ผ๊ณ ๊ฐ์ฃผํ์ง ์๋ ๋ฉ์์ง์ผ ์ ์์ต๋๋ค.
- ์ฒ๋ฆฌ ์๊ฐ์ด ์ด๊ณผ๋์์ต๋๋ค. ๋ฆฌ๋ํ์์ ํฉ๋ฆฌ์ ์ด์ด์ผ ํฉ๋๋ค.
- ๋งค์ฐ ์์ธํ ๊ธฐ๋ก์ด ํ์ํฉ๋๋ค. ๋จ, ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋ง ํด๋น๋ฉ๋๋ค.
- ์์ํ๊ธฐ ์ ์ ์ฌ๋ฌ ๊ฐ์ง ํ ์คํธ๋ ์ํ๋ฉ๋๋ค.
- ์ง์ ๊ณผ์ ์์ ์ ์ฉํ๋ค๊ณ ํ๋จํ ํธ์๋ฅผ ์ํ ์์ ๋ณด๋์ค:
- ์์๊ณผ ๋์ ๋ก์ปฌ ์์คํ ์ syslog์ ๊ธฐ๋ก๋ฉ๋๋ค. ์ด๋ ์์คํ ์ค๋ฅ์ ๋ฐฑ์ ์์ ์ ์ฐ๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ค๋ฅ ๋ก๊ทธ์ ์ผ๋ถ๊ฐ stdout์ผ๋ก ์ถ๋ ฅ๋๊ณ , ์ ์ฒด ๋ก๊ทธ๋ ๋ณ๋์ ํ์ผ์ ๊ธฐ๋ก๋ฉ๋๋ค. CI๋ฅผ ๋ณด๊ณ ์ฌ์ํ ์ค๋ฅ๋ผ๋ฉด ๋ฐ๋ก ํ๊ฐํด ๋ณด๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
- ๋๋ฒ๊น ๋ชจ๋.
์ ์ฒด ๋ก๊ทธ๋ GitLab์ ์ํฐํฉํธ๋ก ์ ์ฅ๋๋ฉฐ, ์ค๋ฅ๊ฐ ์์ผ๋ฉด ๋ก๊ทธ๊ฐ ์ญ์ ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ bash๋ก ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํฉ๋๋ค.
์คํ ์์ค์ ๊ดํ ๋ชจ๋ ์ ์๊ณผ ์๊ฒฌ์ ๊ธฐ๊บผ์ด ๊ณ ๋ คํ๊ฒ ์ต๋๋ค. ํ์ํฉ๋๋ค.
์ด๊ฑฐ ์ด๋ป๊ฒ ์๋ ์์ผ์
Bash ์คํ๊ธฐ๊ฐ ์๋ ์คํ๊ธฐ๊ฐ ๋ฐฑ์ ๋ ธ๋์์ ์์๋ฉ๋๋ค. ์ค์ผ์ค๋ฌ์ ๋ฐ๋ฅด๋ฉด ์์ CI/CD๊ฐ ํน์ ์๋ฌด์์ ์คํ๋ฉ๋๋ค. Runner๋ ์ด๋ฌํ ์์ ์ ์ํด ๋ฒ์ฉ ๋ํผ ์คํฌ๋ฆฝํธ๋ฅผ ์์ํ๊ณ ๋ฐฑ์ ์ ์ฅ์, ๋ง์ดํธ ์ง์ ๋ฐ ์ํ๋ ๋ชจ๋ ํญ๋ชฉ์ ์ ํจ์ฑ์ ํ์ธํ ๋ค์ ์ด์ ํญ๋ชฉ์ ๋ฐฑ์ ํ๊ณ ์ ๋ฆฌํฉ๋๋ค. ์๋ฃ๋ ๋ฐฑ์ ์์ฒด๋ S3๋ก ์ ์ก๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ด ์ฒด๊ณ์ ๋ฐ๋ผ ์์ ํฉ๋๋ค. ์ด๋ ์ธ๋ถ AWS ๊ณต๊ธ์์ด๊ฑฐ๋ ์ด์ ์์ํ๋ ๋ฌ์์ ๊ณต๊ธ์์ ๋๋ค(๋ ๋น ๋ฅด๊ณ ๋ฐ์ดํฐ๊ฐ ๋ฌ์์ ์ฐ๋ฐฉ์ ๋ ๋์ง ์์ต๋๋ค). ๋๋ ์ด๋ฌํ ๋ชฉ์ ์ ์ํด ํด๋ผ์ด์ธํธ์ ์ฌ์ดํธ์ ๋ณ๋์ ๋ฏธ๋์ค ํด๋ฌ์คํฐ๋ฅผ ์ค์นํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๊ฐ ํ๋ก๋ฅผ ๋ ๋๋ ๊ฒ์ ์ํ์ง ์์ ๋ ๋ณด์์์ ์ด์ ๋ก ์ด ์์ ์ ์ํํฉ๋๋ค.
SSH๋ฅผ ํตํด ๋ฐฑ์ ์ ๋ณด๋ด๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์์์ต๋๋ค. ์ด๋ ๋ณด์์ ์ถ๊ฐํ์ง ์์ผ๋ฉฐ S3 ๊ณต๊ธ์์ ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ๋จ์ผ SSH ์์คํ ๋ณด๋ค ํจ์ฌ ๋์ต๋๋ค.
ํด์ปค๊ฐ S3์ ๋ฐ์ดํฐ๋ฅผ ์ง์ธ ์ ์์ผ๋ฏ๋ก ๋ก์ปฌ ์์คํ
์ ํด์ปค๋ก๋ถํฐ ๋ณดํธํ๋ ค๋ฉด ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํ์ฑํํด์ผ ํฉ๋๋ค.
๋ฐฑ์
์ ํญ์ ๋ฐฑ์
์ ์ํธํํฉ๋๋ค.
Borg์๋ ์ํธํ๋์ง ์์ ๋ชจ๋๊ฐ ์์ต๋๋ค none
, ๊ทธ๋ฌ๋ ์ผ๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ถ์ฅํ์ง ์์ต๋๋ค. ์ด ๋ชจ๋์์๋ ์ํธํ๊ฐ ์์ ๋ฟ๋ง ์๋๋ผ ๊ธฐ๋ก๋๋ ํญ๋ชฉ์ ์ฒดํฌ์ฌ๋ ๊ณ์ฐ๋์ง ์์ต๋๋ค. ์ฆ, ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ ์ผ๋ก๋ง ๋ฌด๊ฒฐ์ฑ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ณ๋์ ์ค์ผ์ค๋ฌ๊ฐ ๋ฐฑ์ ์์ ์ธ๋ฑ์ค์ ์ฝํ ์ธ ์ ๋ฌด๊ฒฐ์ฑ์ ํ์ธํฉ๋๋ค. ์ ๊ฒ์ด ๋๋ฆฌ๊ณ ๊ธธ์ด์ ํ ๋ฌ์ ํ ๋ฒ์ฉ ๋ฐ๋ก ์คํํด๋๋ฆฌ๊ณ ์์ต๋๋ค. ๋ฉฐ์น ์ด ๊ฑธ๋ฆด ์ ์์ต๋๋ค.
๋ฌ์์์ด๋ก ์ฝ์ด๋ณด๊ธฐ
์ฃผ์ ๊ธฐ๋ฅ
prepare
ํ๋ จtestcheck
์ค๋น ์ํ ํ์ธmaincommand
ํต์ฌ ํforcepostscript
๊ฒฐ๊ตญ ๋๋ ์ค๋ฅ๋ก ์ธํด ์คํ๋๋ ๊ธฐ๋ฅ์ ๋๋ค. ํํฐ์ ์ ๋ง์ดํธ ํด์ ํ๋ ๋ฐ ์ฌ์ฉํฉ๋๋ค.
์๋น์ค ๊ธฐ๋ฅ
cleanup
์ค๋ฅ๋ฅผ ๊ธฐ๋กํ๊ฑฐ๋ ๋ก๊ทธ ํ์ผ์ ์ญ์ ํฉ๋๋ค.checklog
์ค๋ฅ๊ฐ ์๋ ์ค์ด ๋ฐ์ํ๋์ง ๋ก๊ทธ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค.ret
์ข ๋ฃ ํธ๋ค๋ฌ.checktimeout
์๊ฐ ์ด๊ณผ๋ฅผ ํ์ธํ์ธ์.
ํ๊ฒฝ
VERBOSE=1
์ค๋ฅ๋ ์ฆ์ ํ๋ฉด์ ํ์๋ฉ๋๋ค(stdout).SAVELOGSONSUCCES=1
์ฑ๊ณต ์ ๋ก๊ทธ๋ฅผ ์ ์ฅํฉ๋๋ค.INIT_REPO_IF_NOT_EXIST=1
์ ์ฅ์๊ฐ ์์ผ๋ฉด ๋ง๋ญ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ๋์ด ์์ต๋๋ค.TIMEOUT
์ฃผ์ ์์ ์ ์ต๋ ์๊ฐ. ๋ง์ง๋ง์ 'm', 'h', 'd'๋ก ์ค์ ํ ์ ์์ต๋๋ค.
์ค๋๋ ์ฌ๋ณธ์ ์ ์ฅ ๋ชจ๋์ ๋๋ค. ๊ธฐ๋ณธ:
KEEP_DAILY=7
KEEP_WEEKLY=4
KEEP_MONTHLY=6
์คํฌ๋ฆฝํธ ๋ด๋ถ์ ๋ณ์
ERROR_STRING
โ ์ค๋ฅ์ ๋ํ ์ฒดํฌ์ธ ๋ก๊ทธ ๋ฌธ์์ด์ ๋๋ค.EXTRACT_ERROR_STRING
โ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ฌธ์์ด ํ์์ ๋ํ ํํ์์ ๋๋ค.KILL_TIMEOUT_SIGNAL
โ ์๊ฐ์ด ์ด๊ณผ๋๋ฉด ์ข ๋ฃํ๋ผ๋ ์ ํธ์ ๋๋ค.TAIL
โ ํ๋ฉด์ ์ค๋ฅ๊ฐ ์๋ ๋ฌธ์์ด ์.COLORMSG
โ ๋ฉ์์ง ์์(๊ธฐ๋ณธ๊ฐ ๋ ธ๋์).
wordpress๋ผ๊ณ ๋ถ๋ฆฌ๋ ํด๋น ์คํฌ๋ฆฝํธ์๋ ์กฐ๊ฑด๋ถ ์ด๋ฆ์ด ์์ผ๋ฉฐ, ๊ทธ ๋น๊ฒฐ์ mysql ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฐฑ์ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ฆ, ๋จ์ผ ๋ ธ๋ Nexcloud ์ค์น์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐฑ์ ํ ์๋ ์์ต๋๋ค. ํธ๋ฆฌํจ์ ๋ชจ๋ ๊ฒ์ด ํ ๊ณณ์ ์์ ๋ฟ๋ง ์๋๋ผ ์๊ฐ ์ฐจ์ด๊ฐ ์ต์ํ๋๋ฏ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ด์ฉ์ด ํ์ผ์ ๋ด์ฉ๊ณผ ๊ฐ๊น๋ค๋ ๊ฒ์ ๋๋ค.
๋ ์คํฑ vs ๋ณด๊ทธ
Borg์ Restic์ ๋น๊ต๋ ์์ต๋๋ค.
์ด๋ฏธ ์ธ๊ธํ ์ฌํญ(์ค๋ณต ์ ๊ฑฐ, ๋น ๋ฅธ ๋ณต๊ตฌ ๋ฑ) ์ธ์ ์ ํ ๊ธฐ์ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฏธ์์ฑ ์์ ์ ๋ํ ์ ํญ. kill -9๋ฅผ ํ์ธํ์ญ์์ค.
- ๋์คํฌ ํฌ๊ธฐ.
- ๋ฆฌ์์ค(CPU, ๋ฉ๋ชจ๋ฆฌ) ์๊ตฌ ์ฌํญ์ ๋๋ค.
- ์ ์ฅ๋ Blob์ ํฌ๊ธฐ์ ๋๋ค.
- S3์ ํ๋ ฅํฉ๋๋ค.
- ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ.
ํ
์คํธ๋ฅผ ์ํด ์ค์ ๋ฐ์ดํฐ์ ์ด ํฌ๊ธฐ๊ฐ 1,6TB์ธ ํด๋ผ์ด์ธํธ ํ๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
์กฐ๊ฑด.
Borg๋ S3๋ก ์ง์ ์์
ํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๋ฏ๋ก ๋ค์์ ํตํด ๋์คํฌ๋ฅผ ํจ์ฆ๋ก ๋ง์ดํธํ์ต๋๋ค.
Goofys๋ ๋งค์ฐ ๋น ๋ฅด๊ณ ์ ์๋ํ๋ฉฐ,
๋คํธ์ํฌ์ ์ํฅ์ ์ค์ด๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ๋ก์ปฌ ๊ณต๊ธ์์ธ Yandex Cloud๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
๋น๊ต ํ ์คํธ ๊ฒฐ๊ณผ.
- ์ถ๊ฐ ์ฌ์์์ผ๋ก Kill -9๊ฐ ๋ชจ๋ ์ฑ๊ณตํ์ต๋๋ค.
- ๋์คํฌ ํฌ๊ธฐ. Borg๋ ์์ถํ ์ ์์ผ๋ฏ๋ก ๊ฒฐ๊ณผ๋ ์์๋๋ก์ ๋๋ค.
๋ฐฑ์
ํผ
ํฌ๊ธฐ
๋ณด๊ทธ
562Gb
๋ ์ค์คํฑ
628Gb
- CPU๋ณ
Borg ์์ฒด๋ ๊ธฐ๋ณธ ์์ถ์ ์ฌ์ฉํ์ฌ ๊ฑฐ์ ์๋นํ์ง ์์ง๋ง Goofys ํ๋ก์ธ์ค์ ํจ๊ป ํ๊ฐ๋์ด์ผ ํฉ๋๋ค. ์ ์ฒด์ ์ผ๋ก ์ด๋ค์ ๋์ผํ๋ฉฐ ๋์ผํ ํ ์คํธ ๊ฐ์ ๋จธ์ ์์ ์ฝ 1,2๊ฐ์ ์ฝ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. - ๋ฉ๋ชจ๋ฆฌ. Restic์ ์ฝ 0,5GB, Borg๋ ์ฝ 200MB์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์์คํ ํ์ผ ์บ์์ ๋นํด ๋ชจ๋ ์ค์ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ๋ฉ์ด๋ฆฌ ํฌ๊ธฐ์ ์ฐจ์ด๊ฐ ๋์ ๋์์ต๋๋ค.
๋ฐฑ์
ํผ
ํฌ๊ธฐ
๋ณด๊ทธ
์ฝ 500MB
๋ ์ค์คํฑ
์ฝ 5MB
- Restic์ S3 ์ฌ์ฉ ๊ฒฝํ์ ํ๋ฅญํ์ต๋๋ค. goofys๋ฅผ ํตํด Borg๋ก ์์ ํ๋ ๊ฒ์ ์ด๋ค ์ง๋ฌธ๋ ์ ๊ธฐํ์ง ์์ง๋ง, ์บ์๋ฅผ ์์ ํ ์ฌ์ค์ ํ๋ ค๋ฉด ๋ฐฑ์ ์ด ์๋ฃ๋ ํ umount๋ฅผ ์ํํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค๊ณ ์ธ๊ธ๋์์ต๋๋ค. S3์ ํน์ง์ ๋ ํํ๋ ์ฒญํฌ๊ฐ ๋ฒํท์ผ๋ก ์ ์ก๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋ถ์์ ํ๊ฒ ์ฑ์์ง ๋ฐ์ดํฐ๊ฐ ํฐ ์์์ ์ด๋ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
- ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ๋ ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ ์๋ํ์ง๋ง ์๋์๋ ์๋นํ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๋ ์คํฑ 3,5 ์๊ฐ.
100GB SSD ํ์ผ ์บ์๋ฅผ ๊ฐ์ถ Borg โ 5 ์๊ฐ.๋ฐ์ดํฐ๊ฐ ๋ก์ปฌ ๋์คํฌ์ ์๋ ๊ฒฝ์ฐ ์๋๋ ๊ฑฐ์ ๋์ผํฉ๋๋ค.
Borg๋ ์บ์ ์์ด S3์์ ์ง์ ์ฝ์ต๋๋ค. 33 ์๊ฐ. ์์ฒญ๋๊ฒ ๊ธธ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก Borg๋ ์์ถํ ์ ์๊ณ ๋ ํฐ blob์ ๊ฐ์ง ์ ์์ผ๋ฏ๋ก S3์ ์คํ ๋ฆฌ์ง ๋ฐ GET/PUT ์์ ์ด ๋ ์ ๋ ดํด์ง๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋ ๋ณต์กํ๊ณ ๋๋ฆฐ ๊ฒ์ฆ์ ๋๊ฐ๋ฅผ ์น๋ฅด๊ฒ ๋ฉ๋๋ค. ๋ณต๊ตฌ ์๋๋ ์๋ฌด๋ฐ ์ฐจ์ด๋ฅผ ๋๋ผ์ง ๋ชปํ์ต๋๋ค. Restic์ ํ์ ๋ฐฑ์ (์ฒซ ๋ฒ์งธ ๋ฐฑ์ ์ดํ)์ด ์กฐ๊ธ ๋ ์ค๋ ๊ฑธ๋ฆฌ์ง๋ง ํฌ๊ฒ ๋ค๋ฅด์ง๋ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ ํ์ ์ฌ์ง๊ฐ ์๋ ๊ฒ์ ์ปค๋ฎค๋ํฐ์ ๊ท๋ชจ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๋ณด๊ทธ๋ฅผ ์ ํํ์ต๋๋ค.
์์ถ์ ๋ํ ๋ช ๋ง๋
Borg์ ๋ฌด๊ธฐ๊ณ ์๋ zstd๋ผ๋ ๋ฐ์ด๋ ์๋ก์ด ์์ถ ์๊ณ ๋ฆฌ์ฆ์ด ์์ต๋๋ค. ์์ถ ํ์ง์ gzip๋ณด๋ค ๋์์ง ์์ง๋ง ํจ์ฌ ๋น ๋ฆ ๋๋ค. ์๋๋ ๊ธฐ๋ณธ lz4์ ๋น์ทํฉ๋๋ค.
์๋ฅผ ๋ค์ด, MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋คํ๋ ๋์ผํ ์๋์์ lz4๋ณด๋ค ๋ ๋ฐฐ ๋ ์ ์์ถ๋ฉ๋๋ค. ํ์ง๋ง ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฒฝํํด ๋ณธ ๊ฒฐ๊ณผ Nextcloud ๋ ธ๋์ ์์ถ๋ฅ ์๋ ๊ฑฐ์ ์ฐจ์ด๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
Borg์๋ ๋ค์ ๋ณด๋์ค ์์ถ ๋ชจ๋๊ฐ ์์ต๋๋ค. ํ์ผ์ ์ํธ๋กํผ๊ฐ ๋์ผ๋ฉด ์์ถ์ด ์ ํ ์ ์ฉ๋์ง ์์ ์๋๊ฐ ๋นจ๋ผ์ง๋๋ค. ์์ฑ ์ ์ต์
์ผ๋ก ํ์ฑํ
-C auto,zstd
zstd ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ
๋ฐ๋ผ์ ์ด ์ต์
์ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ ์์ถ๊ณผ ๋น๊ตํ์ฌ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
๊ฐ๊ฐ 560Gb ๋ฐ 562Gb. ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ฉด ์์ถํ์ง ์์ ๊ฒฐ๊ณผ๋ 628Gb์
๋๋ค. 2GB ์ฐจ์ด์ ๊ฒฐ๊ณผ๋ ๋ค์ ๋๋์ง๋ง ๊ฒฐ๊ตญ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ์ ํํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. auto,zstd
.
๋ฐฑ์ ํ์ธ ๋ฐฉ๋ฒ
์ค์ผ์ค๋ฌ์ ๋ฐ๋ฅด๋ฉด ๊ฐ์ ๋จธ์ ์ ๊ณต๊ธ์ ๋๋ ํด๋ผ์ด์ธํธ์์ ์ง์ ์์๋๋ฏ๋ก ๋คํธ์ํฌ ๋ถํ๊ฐ ํฌ๊ฒ ์ค์ด๋ญ๋๋ค. ์ ์ด๋ ์ง์ ํค์ฐ๊ณ ๊ตํต์ ์ด์ ํ๋ ๊ฒ๋ณด๋ค ์ ๋ ดํฉ๋๋ค.
goofys --cache "--free:5%:/mnt/cache" -o allow_other --endpoint https://storage.yandexcloud.net --file-mode=0666 --dir-mode=0777 xxxxxxx.com /mnt/goofys
export BORG_PASSCOMMAND="cat /home/borg/.borg-passphrase"
borg list /mnt/goofys/borg1/
borg check --debug -p --verify-data /mnt/goofys/borg1/
๋์ผํ ๊ตฌ์ฑํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ด๋ฌ์ค ๋ฐฑ์ ์ผ๋ก ํ์ผ์ ๊ฒ์ฌํฉ๋๋ค(์ฌํ). ๊ฒฐ๊ตญ ์ฌ์ฉ์๋ Nextcloud์ ๋ค์ํ ๊ฒ์ ์ ๋ก๋ํ์ง๋ง ๋ชจ๋ ์ฌ๋์ด ๋ฐ์ด๋ฌ์ค ๋ฐฑ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋๋๋ค. ํ์ค ์ ์ ๊ฒ์ ์ค์ํ๋ ๊ฒ์ ๋๋ฌด ๋ง์ ์๊ฐ์ด ์์๋๊ณ ์ ๋ฌด์ ์ง์ฅ์ ์ค๋๋ค.
ํ์ฅ์ฑ์ ์๋ก ๋ค๋ฅธ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก ๋ค๋ฅธ ๋
ธ๋์์ ์คํ๊ธฐ๋ฅผ ์คํํจ์ผ๋ก์จ ๋ฌ์ฑ๋ฉ๋๋ค.
์ฐ๋ฆฌ์ ๋ชจ๋ํฐ๋ง์ ํ๋์ ์ฐฝ์์ GitLab API๋ฅผ ํตํด ๋ฐฑ์
์ํ๋ฅผ ์์งํ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ๋ฐ๊ฒฌํ๊ณ ์ฝ๊ฒ ํ์งํํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ฐฑ์ ์ ๋ง๋ค๊ณ ์๊ณ , ๋ฐฑ์ ์ด ์ ํจํ๋ฉฐ, ๋ฐฑ์ ๊ณผ ๊ด๋ จํ์ฌ ๋ฐ์ํ๋ ๋ฌธ์ ๋ ์๊ฐ์ด ๊ฑฐ์ ๊ฑธ๋ฆฌ์ง ์์ผ๋ฉฐ ๋ด๋น ๊ด๋ฆฌ์ ์์ค์์ ํด๊ฒฐ๋๋ค๋ ๊ฒ์ ํ์คํ ์๊ณ ์์ต๋๋ค. ๋ฐฑ์ ์ tar.gz ๋๋ Bacula์ ๋นํด ๊ณต๊ฐ์ ๊ฑฐ์ ์ฐจ์งํ์ง ์์ต๋๋ค.
์ถ์ฒ : habr.com