์ ์ด๋ฆ์ Petr Zaitsev์ด๊ณ CEO์ด์ ์ฐฝ๋ฆฝ์์
๋๋ค.
- ์คํ ์์ค ์๋ฃจ์ ์์ ์๋น์คํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Database as a Service)๋ก ์ ํํ ๊ณผ์
- ํด๋ผ์ฐ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐฐํฌํ๋ ๋ฐ ์ด๋ค ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๊น?
- Kubernetes๊ฐ DBaaS๋ฅผ ๋์ฒดํ์ฌ ๊ณต๊ธ์ ์ฒด ์ข ์์ฑ์ ์ ๊ฑฐํ๊ณ ์๋น์คํ DBMS์ ๋จ์์ฑ์ ์ ์งํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ด ๊ธฐ์ฌ๋ Mail.ru Cloud Solutions & Tarantool์ @Databases Meetup ๋ณด๊ณ ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋์์ต๋๋ค. ์ฝ๊ณ ์ถ์ง ์๋ค๋ฉด ๋ค์์ ์์ฒญํ์ธ์.
์คํ ์์ค์์ ํด๋ผ์ฐ๋์ ์๋น์ค๋ก์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ ํํ ๋ฐฉ๋ฒ
์ ๋ 90๋ ๋ ํ๋ฐ๋ถํฐ ์คํ์์ค ์์ ์ ํด์์ต๋๋ค. XNUMX๋ ์ ๋ง ํด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ ์คํ์์ค๋ฅผ ํ์ฉํ๋ ๊ฒ์ ๊ทธ๋ฆฌ ์ฌ์ด ์ผ์ด ์๋์์ต๋๋ค. ์์ค ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํ๊ณ , ํจ์นํ๊ณ , ์ปดํ์ผํ ํ์๋ง ์ฌ์ฉํ๋ฉด ๋์์ต๋๋ค.
์คํ ์์ค๋ ์ผ๋ จ์ ๋จ์ํ๋ฅผ ๊ฑฐ์ณค์ต๋๋ค.
- ์ปดํ์ผํด์ผ ํ๋ Tar.gz ๋ฐ INSTALL ์์ค;
- .deb ๋ฐ .rpm๊ณผ ๊ฐ์ ์ข ์์ฑ์ด ์๋ ํจํค์ง(ํจํค์ง ์ธํธ๋ง ์ค์นํ๋ฉด ๋จ)
- ์๋์ผ๋ก ์ค์น๋๋ APT ๋ฐ YUM๊ณผ ๊ฐ์ ํจํค์ง ์ ์ฅ์
- Docker, Snap๊ณผ ๊ฐ์ ์๋ฃจ์ ์ ์ฌ์ฉํ๋ฉด ์ธ๋ถ ์ข ์์ฑ ์์ด ์ค์น๋ง์ผ๋ก ํจํค์ง๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก, ์คํ ์์ค ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์ฌ์์ง๊ณ ์ด๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋ํ ์ง์ ์ฅ๋ฒฝ๋ ๋ฎ์์ง๋๋ค.
๋์์, ๋ชจ๋๊ฐ ์ด์ ๋ธ๋ฆฌ ์ ๋ฌธ๊ฐ์๋ 20๋ ์ ์ ์ํฉ๊ณผ ๋ฌ๋ฆฌ ์ง๊ธ์ ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๋ ๋๊ตฌ๋ฅผ ์์ค์์ ๋น๋ํ ์ ์์ต๋๋ค.
์ฌ์ค ์ด๊ฒ์ ๋์์ง ์์ต๋๋ค. ์๋ํ๋ฉด:
- ์ฐ๋ฆฌ๋ ๋ ๋ณต์กํ์ง๋ง ๋ ์ฌ์ฉ์ ์นํ์ ์ธ ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ์ง๋ง ์คํ ์์ค ๊ตฌ์ฑ ์์๊ฐ ๋ง์ด ํฌํจ๋์ด ์์ด ์ฒ์๋ถํฐ ๊ตฌ์ถํ๊ธฐ๊ฐ ๋ถํธํฉ๋๋ค.
- ๋ ๋ง์ ์ฌ๋๋ค์ด ์คํ ์์ค ๋ฐ ๊ธฐํ ์ํํธ์จ์ด์ ๊ฐ๋ฐ์๊ฐ ๋ ์ ์๊ณ ๊ธฐ์ ์์๋ ๋ ๋ง์ ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํ๋ฉฐ ์ด์ ๋ํ ํ์์ฑ๋ ๋ ์ปค์ง๋๋ค.
๋จ์ ์ ๋จ์ํ์ ๋ค์ ๋จ๊ณ๊ฐ ํด๋ผ์ฐ๋ ์๋ฃจ์ ์ฌ์ฉ๊ณผ ๊ด๋ จ๋์ด ์์ผ๋ฉฐ ์ด๋ก ์ธํด ํน์ ๊ณต๊ธ์ ์ฒด ์ข ์, ์ฆ ํ๋์ ๊ณต๊ธ์ ์ฒด์ ๊ตฌ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๊ฐ๋จํ ์๋ฃจ์ ์ ์ฌ์ฉํ๊ณ ๊ณต๊ธ์๋ ์คํ ์์ค ๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ์ง๋ง ์ค์ ๋ก๋ ๋๊ท๋ชจ ํด๋ผ์ฐ๋ ์ค ํ๋์ ๊ณ ์ ๋์ด ์์ต๋๋ค. ์ฆ, ์คํ ์์ค(๋ฐ ์ด์ ํธํ๋๋ ์ํํธ์จ์ด)๋ฅผ ๋ฐฐํฌํ๋ ๊ฐ์ฅ ์ฝ๊ณ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ ๋ ์ API๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ฐ๋์ ์๋ ๊ฒ์ ๋๋ค.
ํด๋ผ์ฐ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ด ์์ต๋๋ค.
- ์ผ๋ฐ ๋ฐ์ดํฐ ์ผํฐ์์์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธํ๋ผ๋ฅผ ์กฐ๋ฆฝํฉ๋๋ค. ์ฆ, ํ์ค ๋น๋ฉ ๋ธ๋ก(์ปดํจํ , ์คํ ๋ฆฌ์ง ๋ฑ)์ ๊ฐ์ ธ์ ์ฌ๊ธฐ์ Linux์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์นํ๊ณ ๊ตฌ์ฑํฉ๋๋ค.
- ๊ณต๊ธ์๊ฐ ํด๋ผ์ฐ๋ ๋ด์์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ๊ณตํ๋ ์๋น์คํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ์ธ์.
DBaaS๋ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ ์ฌ์ฉํ๊ณ ์ผ์์ ์ธ ์์ ์ ์ต์ํํ ์ ์๊ธฐ ๋๋ฌธ์ ํ์ฌ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ๋ ์์ฅ์ ๋๋ค. ๊ณต๊ธ์๋ ๊ณ ๊ฐ์ฉ์ฑ๊ณผ ์์ฌ์ด ํ์ฅ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ํจ์น, ๋ฐฑ์ ๋ฐ ์ฑ๋ฅ ํ๋์ ๋ณด์ฅํฉ๋๋ค.
์คํ ์์ค ๊ธฐ๋ฐ์ ๋ ๊ฐ์ง ์ ํ์ Database as a Service์ Kubernetes ํํ์ ๋์
๊ฐ๋ฐฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๋ ๊ฐ์ง ์ ํ์ Database as a Service๊ฐ ์์ต๋๋ค.
- ์ฌ์ด ๋ฐฐํฌ ๋ฐ ๊ด๋ฆฌ๋ฅผ ์ํด ๊ด๋ฆฌ ๋ฐฑ์๋์ ํจํค์ง๋ ํ์ค ์คํ ์์ค ์ ํ์ ๋๋ค.
- ์คํ ์์ค์ ํธํ๋๋ ๋ค์ํ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๊ณ ๊ธ ์์ฉ ์๋ฃจ์ ์ ๋๋ค.
๋ ์ต์ ๋ชจ๋ ํด๋ผ์ฐ๋ ๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ๊ฐ๋ฅ์ฑ์ ์ค์ด๊ณ ๋ฐ์ดํฐ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋์ฑ์ ๊ฐ์์ํต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ค์ํ ์ ํ์ ํด๋ผ์ฐ๋๊ฐ ๋ณธ์ง์ ์ผ๋ก ๋์ผํ ํ์ค MySQL์ ์ง์ํ๋ค๋ ์ฌ์ค์๋ ๋ถ๊ตฌํ๊ณ ์ด์, ์ฑ๋ฅ, ๋ฐฑ์ ๋ฑ์์ ํด๋ผ์ฐ๋ ๊ฐ์๋ ์๋นํ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ํ ํด๋ผ์ฐ๋์์ ๋ค๋ฅธ ํด๋ผ์ฐ๋๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ์ด๋ ค์ธ ์ ์์ผ๋ฉฐ, ํนํ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์์ ์ง๋ฌธ์ด ์๊น๋๋ค. Database as a Service์ ํธ๋ฆฌํจ์ ์ป๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง๋ง ๋จ์ํ ์คํ ์์ค ์๋ฃจ์ ์ผ๋ก๋ ๊ฐ๋ฅํฉ๋๊น?
๋์ ์์์ ์ํ๊น๊ฒ๋ ์์ง ์์ฅ์ ๊ทธ๋ฌํ ์๋ฃจ์ ์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ์ข์ ์์์ ์ด๋ฌํ ์๋ฃจ์ ์ ๊ตฌํํ ์ ์๋ Kubernetes๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค.
Kubernetes๋ ๋จ์ผ ํธ์คํธ๊ฐ ์๋ ํด๋ฌ์คํฐ์ ์ฌ๋ฌ ์๋ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ณ ๊ด๋ฆฌํ ์ ์๋ ํด๋ผ์ฐ๋ ๋๋ ๋ฐ์ดํฐ ์ผํฐ์ฉ ์ด์ ์ฒด์ ์ ๋๋ค.
์ด์ Kubernetes๋ ์ด๋ฌํ ์ํํธ์จ์ด ๋ถ์ผ์ ์ ๋์ฃผ์์ ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์ํ์ง๋ง ์ด๊ฒ์ด ํ์ค์ด ๋์์ต๋๋ค. ๋์ฒด ์๋ฃจ์ ์ ์ค์ ์ ๋์๋ ๋ง์ ํ์ฌ๊ฐ ์ด์ ๋ Kubernetes๋ฅผ ์ง์ํ๋๋ก ์ ํ์ ์กฐ์ ํ๋ ๋ฐ ์ฃผ๋ ฅํ๊ณ ์์ต๋๋ค.
๋ํ Kubernetes๋ AWS, Google Cloud, Microsoft Azure,
Kubernetes๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ํ๋ ๋ฐฉ์
Kubernetes๋ ์๋ ๋ง์ดํฌ๋ก์๋น์ค๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ง๋ง ์๋ฌด๊ฒ๋ ์ ์ฅํ์ง ์๋ ์ํ ๋น์ ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ฉ์ผ๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์คํํธ๋ผ์ ๋ฐ๋ํธ์ ์์ต๋๋ค. ์ฆ, ์ํ ์ ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ Kubernetes๋ ์๋ ๊ทธ๋ฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ฒ์ด ์๋์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ต๊ทผ Kubernetes์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ๊ธฐํ ์ํ ์ ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ด ๋ฑ์ฅํ์ต๋๋ค.
- StatefulSet ๊ฐ๋ ์ Pod ์์ ์ค์ง ๋ฐ Graceful Shutdown(์์ธก ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ) ๊ตฌํ์ ๋ํ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ผ๋ จ์ ๊ธฐ๋ณธ ์์์ ๋๋ค.
- ์๊ตฌ ๋ณผ๋ฅจ์ Kubernetes ๊ด๋ฆฌ ๊ฐ์ฒด์ธ Pod์ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ ์ ์ฅ์์ ๋๋ค.
- ์ด์์ ํ๋ ์์ํฌ - ์ฆ, ์ฌ๋ฌ ๋ ธ๋์ ๋ถ์ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ๊ธฐํ ์ํ ์ ์ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ตฌ์ฑ ์์๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
์ด๋ฏธ ํผ๋ธ๋ฆญ ํด๋ผ์ฐ๋์๋ CockroachCloud, InfluxDB, PlanetScale๊ณผ ๊ฐ์ Kubernetes๊ฐ ๋ฐฑ์๋์ธ ๋๊ท๋ชจ Databases as a Service๊ฐ ์์ต๋๋ค. ์ฆ, Kubernetes์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด๋ก ์ ์ผ๋ก ๊ฐ๋ฅํ ๋ฟ๋ง ์๋๋ผ ์ค์ ๋ก ์๋ํ๋ ๊ฒ์ด๊ธฐ๋ ํฉ๋๋ค.
Percona์๋ Kubernetes๋ฅผ ์ํ ๋ ๊ฐ์ง ์คํ ์์ค ์๋ฃจ์ ์ด ์์ต๋๋ค.
- MongoDB์ฉ Percona Server์ Kubernetes ์ฐ์ฐ์์ ๋๋ค.
- XtraDB CLUSTER์ฉ Kubernetes Operator๋ MySQL๊ณผ ํธํ๋๋ฉฐ ๊ณ ๊ฐ์ฉ์ฑ๊ณผ ์ผ๊ด์ฑ์ ์ ๊ณตํ๋ ์๋น์ค์ ๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒฝ์ฐ ๊ณ ๊ฐ์ฉ์ฑ์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ ๋จ์ผ ๋ ธ๋๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
Kubernetes ์ฌ์ฉ์๋ ๋ ๊ทธ๋ฃน์ผ๋ก ๋๋ ์ ์์ต๋๋ค. ์ด๋ค ์ฌ๋๋ค์ Kubernetes Operator๋ฅผ ์ง์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ค์ ์ฃผ๋ก ๊ธฐ์ ์๋ ๋ฐฉ์์ ์ ์ดํดํ๊ณ ์๋ ๊ณ ๊ธ ์ฌ์ฉ์์ ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ ์ด๋ฅผ ๋ฐฑ์๋์์ ์คํํฉ๋๋ค. ์ด๋ฌํ ์ฌ์ฉ์๋ ์๋น์ค๋ก์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Database as a Service)์ ๊ฐ์ ๊ฒ์ ๊ด์ฌ์ด ์์ง๋ง Kubernetes์ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ํ๊ตฌํ๊ณ ์ถ์ง ์์ต๋๋ค. ๋ ๋ฒ์งธ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ์ํด ๋ ๋ค๋ฅธ ์คํ ์์ค ์๋ฃจ์ ์ธ Percona DBaaS CLI ๋๊ตฌ๊ฐ ์์ต๋๋ค. ๊ธฐ์ ์ ๋ํ ๊น์ ์ดํด ์์ด Kubernetes ๊ธฐ๋ฐ์ ์คํ์์ค DBaaS๋ฅผ ๊ตฌํ๋ ค๋ ์ฌ๋๋ค์ ์ํ ์คํ์ ์ธ ์๋ฃจ์ ์ ๋๋ค.
Google Kubernetes Engine์์ Percona์ DBaaS๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ
์ ์๊ฐ์๋ Google Kubernetes Engine์ Kubernetes ๊ธฐ์ ์ ๊ฐ์ฅ ๊ธฐ๋ฅ์ ์ผ๋ก ๊ตฌํํ ๊ฒ ์ค ํ๋์ ๋๋ค. ์ธ๊ณ ์ฌ๋ฌ ์ง์ญ์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ํ๋ซํผ์ ์๋์ผ๋ก ๊ด๋ฆฌํ๋ ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์๋ ๊ฐ๋จํ๊ณ ํธ๋ฆฌํ ๋ช ๋ น์ค ๋๊ตฌ(SDK)๊ฐ ์์ต๋๋ค.
DBaaS๊ฐ ์๋ํ๋ ค๋ฉด ๋ค์ ๊ตฌ์ฑ ์์๊ฐ ํ์ํฉ๋๋ค.
- Kubectl.
- ๊ตฌ๊ธ ํด๋ผ์ฐ๋ SDK.
- Percona DBaaS CLI.
kubectl ์ค์น
์ด์ ์ฒด์ ์ ๋ง๋ ํจํค์ง๋ฅผ ์ค์นํ๊ณ Ubuntu์ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์์ธํ ๋ด์ฉ์
sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
๊ตฌ๊ธ ํด๋ผ์ฐ๋ SDK ์ค์น
๊ฐ์ ๋ฐฉ์์ผ๋ก ์ํํธ์จ์ด ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค. ์์ธํ ๋ด์ฉ์
# Add the Cloud SDK distribution URI as a package source
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg]
http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
# Import the Google Cloud Platform public key
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
# Update the package list and install the Cloud SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk
Percona DBaaS CLI ์ค์น
Percona ์ ์ฅ์์์ ์ค์นํฉ๋๋ค. Percona DBaaS CLI ๋๊ตฌ๋ ์์ง ์คํ์ ์ธ ์ ํ์ด๋ฏ๋ก Percona ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์ด๋ฏธ ์ค์น๋์ด ์๋ ๊ฒฝ์ฐ์๋ ๋ณ๋๋ก ํ์ฑํํด์ผ ํ๋ ์คํ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์์ต๋๋ค.
๋
์ค์น ์๊ณ ๋ฆฌ์ฆ:
- percona-release ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ Percona ์ ์ฅ์๋ฅผ ์ค์ ํ์ธ์. ๋จผ์ Percona์์ ๊ณต์ percona ๋ฆด๋ฆฌ์ค ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ์ฌ ์ค์นํด์ผ ํฉ๋๋ค.
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb sudo dpkg -i percona-release_latest.generic_all.deb
- ๋ค์๊ณผ ๊ฐ์ด ์คํ ๋๊ตฌ ์ ์ฅ์ ๊ตฌ์ฑ ์์๋ฅผ ํ์ฑํํฉ๋๋ค.
sudo percona-release enable tools experimental
- percona-dbaas-cli ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
sudo apt-get update sudo apt-get install percona-dbaas-cli
๊ตฌ์ฑ์์ ์๋ ์ค์
์ค์ ์ ๋ํด ์์ธํ ์์๋ณด๊ธฐ
๋จผ์ Google ๊ณ์ ์ ๋ก๊ทธ์ธํด์ผ ํฉ๋๋ค. ๋ํ Google Cloud์์๋ ํ ๋ช ์ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ์ ์ธ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฏ๋ก ์ด ํ๋ก์ ํธ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ๋ก์ ํธ๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค.
gcloud auth login
gcloud config set project hidden-brace-236921
๋ค์์ผ๋ก ํด๋ฌ์คํฐ๋ฅผ ์์ฑํฉ๋๋ค. ๋ฐ๋ชจ๋ฅผ ์ํด ์ ๋ ๋จ XNUMX๊ฐ์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ๋ง๋ค์์ต๋๋ค. ์ด๋ ๊ณ ๊ฐ์ฉ์ฑ์ ์ํด ํ์ํ ์ต์ ๋ ธ๋์ ๋๋ค.
gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3
๋ค์ kubectl ๋ช ๋ น์ ํ์ฌ ์ฌ์ฉ์์๊ฒ ์ํ๋ ๊ถํ์ ์ ๊ณตํฉ๋๋ค.
kubectl create clusterrolebinding cluster-admin-binding-$USER
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)
๊ทธ๋ฐ ๋ค์ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ๊ณ ํ์ฑํํฉ๋๋ค. ๋ค์์คํ์ด์ค๋ ๋๋ต์ ์ผ๋ก ๋งํ๋ฉด ํ๋ก์ ํธ๋ ํ๊ฒฝ๊ณผ ๋น์ทํ์ง๋ง ์ด๋ฏธ Kubernetes ํด๋ฌ์คํฐ ๋ด์ ์์ต๋๋ค. Google Cloud ํ๋ก์ ํธ์๋ ๋ ๋ฆฝ์ ์ ๋๋ค.
kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace
ํด๋ฌ์คํฐ ์์
์ด๋ฌํ ๋ช ๊ฐ์ง ๋จ๊ณ๋ฅผ ๊ฑฐ์น ํ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋จํ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ XNUMX๋ ธ๋ ํด๋ฌ์คํฐ๋ฅผ ์์ํ ์ ์์ต๋๋ค.
# percona-dbaas mysql create-db example
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: example
Resource Endpoint: example-proxysql.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: Nt9YZquajW7nfVXTTrP
Status: ready
ํด๋ฌ์คํฐ์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
๊ธฐ๋ณธ์ ์ผ๋ก Kubernetes ๋ด๋ถ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฆ, "Create" ๋ช ๋ น์ ์คํํ ์ด ์๋ฒ์์๋ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํด๋ผ์ด์ธํธ ํ ์คํธ์ ์ฌ์ฉํ ์ ์๊ฒ ํ๋ ค๋ฉด ํฌํธ ๋งคํ์ ํตํด ํฌํธ๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค.
kubectl port-forward svc/example-proxysql 3306:3306 $
๊ทธ๋ฐ ๋ค์ MySQL ํด๋ผ์ด์ธํธ๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP
๊ณ ๊ธ ํด๋ฌ์คํฐ ๊ด๋ฆฌ ๋ช ๋ น
๊ณต๊ฐ IP์ ๋ฐ์ดํฐ๋ฒ ์ด์ค
ํด๋ฌ์คํฐ ๊ฐ์ฉ์ฑ์ ์ํ ๋ณด๋ค ์๊ตฌ์ ์ธ ์๋ฃจ์ ์ ์ํ๋ ๊ฒฝ์ฐ ์ธ๋ถ IP ์ฃผ์๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด๋์์๋ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์ด๋ ๋ ์์ ํ์ง๋ง ์ข ์ข ๋ ํธ๋ฆฌํฉ๋๋ค. ์ธ๋ถ IP์ ๊ฒฝ์ฐ ๋ค์ ๋ช ๋ น์ ์ฌ์ฉํฉ๋๋ค.
# percona-dbaas mysql create-db exposed
--options="proxysql.serviceType=LoadBalancer"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: exposed
Resource Endpoint: 104.154.133.197
Port: 3306
User: root
Pass: k0QVxTr8EVfgyCLYse
Status: ready
To access database please run the following command:
mysql -h 104.154.133.197 -P 3306 -uroot -pk0QVxTr8EVfgyCLYse
๋น๋ฐ๋ฒํธ๋ฅผ ๋ช ์์ ์ผ๋ก ์ค์ ํ์ธ์.
์์คํ ์ด ๋ฌด์์๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์์ฑํ๋ ๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ช ์์ ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
# percona-dbaas mysql create-db withpw --password=mypassword
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: withpw
Resource Endpoint: withpw-proxysql.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: mypassword
Status: ready
์ฌ๋์ด ์ฝ์ ์ ์๋ ํ์์ผ๋ก ์คํฌ๋ฆฝํธ ์ถ๋ ฅ์ ํ์ํ๊ณ ์์ง๋ง JSON ํ์๋ ์ง์๋ฉ๋๋ค.
๊ณ ๊ฐ์ฉ์ฑ ๋๊ธฐ
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ๋ฉด ๊ณ ๊ฐ์ฉ์ฑ์ ๋นํ์ฑํํ์ฌ ๋จ์ผ ๋ ธ๋๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
# percona-dbaas mysql create-db singlenode
--options="proxysql.enabled=false, allowUnsafeConfigurations=true,pxc.size=1"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider: k8s
Engine: pxc
Resource Name: singlenode
Resource Endpoint: singlenode-pxc.my-namespace.pxc.svc.local
Port: 3306
User: root
Pass: 22VqFD96mvRnmPMGg
Status: ready
์ด๋ MySQL์ ๊ฐ๋ฅํ ํ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ์์ ๋ฐ ์คํํ๊ณ ํ ์คํธํ ๋ค์ ์ข ๋ฃํ๊ฑฐ๋ ๊ฐ๋ฐ์ ์ฌ์ฉํ๊ธฐ ์ํ ํ ์คํธ ์์ ์ ์ํ ์๋ฃจ์ ์ ๋๋ค.
Percona DBaaS CLI ๋๊ตฌ๋ Kubernetes์์ DBaaS์ ์ ์ฌํ ์๋ฃจ์ ์ ๊ตฌํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋์์ ์ฐ๋ฆฌ๋ ๊ธฐ๋ฅ๊ณผ ์ ์ฉ์ฑ์ ๋์ด๊ธฐ ์ํด ๊ณ์ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
์ด ๋ณด๊ณ ์๋ ์์ ์ฒ์ ๋ฐํ๋์์ต๋๋ค.
์ฃผ์ ์ ๋ํด ์ฝ์ ๋ด์ฉ:
์ต์ IIoT ํ๋ซํผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค. ๋ค์ ์ ํํ ํ์๊ฐ ์๋๋ก ํ๋ก์ ํธ์ ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ.
์ถ์ฒ : habr.com