์ฐ๋ฆฌ๋ ์ ๊ธฐ์ ์ผ๋ก Apache Cassandra ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ฅผ Kubernetes ๊ธฐ๋ฐ ์ธํ๋ผ ๋ด์์ ์ด์ํด์ผ ํ๋ ํ์์ฑ์ ์ง๋ฉดํฉ๋๋ค. ์ด ์๋ฃ์์๋ Cassandra๋ฅผ K8s๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๋ฐ ํ์ํ ๋จ๊ณ, ๊ธฐ์ค ๋ฐ ๊ธฐ์กด ์๋ฃจ์
(์ด์์ ๊ฐ์ ํฌํจ)์ ๋ํ ๋น์ ์ ๊ณต์ ํฉ๋๋ค.
โ์ฌ์ฑ์ ํต์นํ ์ ์๋ ์ฌ๋์ ๊ตญ๊ฐ๋ ํต์นํ ์ ์๋คโ
์นด์ฐ๋๋ผ๋ ๋๊ตฌ์ ๋๊น? ๋จ์ผ ์ฅ์ ์ง์ ์์ด ๊ณ ๊ฐ์ฉ์ฑ์ ๋ณด์ฅํ๋ฉด์ ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋๋ก ์ค๊ณ๋ ๋ถ์ฐ ์คํ ๋ฆฌ์ง ์์คํ ์ ๋๋ค. ์ด ํ๋ก์ ํธ๋ ๊ธด ์๊ฐ๊ฐ ๊ฑฐ์ ํ์ํ์ง ์์ผ๋ฏ๋ก ํน์ ๊ธฐ์ฌ์ ๋งฅ๋ฝ์์ ๊ด๋ จ๋ Cassandra์ ์ฃผ์ ๊ธฐ๋ฅ๋ง ์ ๊ณตํ๊ฒ ์ต๋๋ค.
- ์นด์ฐ๋๋ผ๋ ์๋ฐ๋ก ์์ฑ๋์์ต๋๋ค.
- Cassandra ํ ํด๋ก์ง๋ ์ฌ๋ฌ ์์ค์ ํฌํจํฉ๋๋ค.
- ๋ ธ๋ - ๋ฐฐํฌ๋ Cassandra ์ธ์คํด์ค XNUMX๊ฐ.
- Rack์ ๋์ผํ ๋ฐ์ดํฐ ์ผํฐ์ ์์นํ ๋ช ๊ฐ์ง ํน์ฑ์ผ๋ก ํตํฉ๋ Cassandra ์ธ์คํด์ค ๊ทธ๋ฃน์ ๋๋ค.
- ๋ฐ์ดํฐ ์ผํฐ - ํ๋์ ๋ฐ์ดํฐ ์ผํฐ์ ์์นํ ๋ชจ๋ Cassandra ์ธ์คํด์ค ๊ทธ๋ฃน์ ๋ชจ์์ ๋๋ค.
- ํด๋ฌ์คํฐ๋ ๋ชจ๋ ๋ฐ์ดํฐ ์ผํฐ์ ์งํฉ์ ๋๋ค.
- Cassandra๋ IP ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ ธ๋๋ฅผ ์๋ณํฉ๋๋ค.
- ์ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ ์์ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด Cassandra๋ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ RAM์ ์ ์ฅํฉ๋๋ค.
์ด์ ์ค์ ๋ก Kubernetes๋ก์ ์ ํ์ด ๊ฐ๋ฅํด์ก์ต๋๋ค.
ํ์น ์ฒดํฌ๋ฆฌ์คํธ
Cassandra๋ฅผ Kubernetes๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฒ์ ๋ํด ๋งํ๋ฉด์, ์ด์ ์ ํตํด ๊ด๋ฆฌ๊ฐ ๋์ฑ ํธ๋ฆฌํด์ง ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋ฌด์์ด ํ์ํ๋ฉฐ ๋ฌด์์ด ๋์์ด ๋ ๊น์?
1. ๋ฐ์ดํฐ ์ ์ฅ
์ด๋ฏธ ๋ฐํ ๋ฐ์ ๊ฐ์ด Cassanda๋ ๋ฐ์ดํฐ์ ์ผ๋ถ๋ฅผ RAM์ ์ ์ฅํฉ๋๋ค. ๋ฉคํ ์ด๋ธ. ๊ทธ๋ฌ๋ ๋์คํฌ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ ๋ ๋ค๋ฅธ ๋ถ๋ถ์ด ์์ต๋๋ค. SSํ ์ด๋ธ. ์ด ๋ฐ์ดํฐ์ ์ํฐํฐ๊ฐ ์ถ๊ฐ๋์์ต๋๋ค. ์ปค๋ฐ ๋ก๊ทธ โ ๋์คํฌ์๋ ์ ์ฅ๋๋ ๋ชจ๋ ํธ๋์ญ์ ์ ๊ธฐ๋ก์ ๋๋ค.
Cassandra์์ ํธ๋์ญ์
๋ค์ด์ด๊ทธ๋จ ์์ฑ
Kubernetes์์๋ PertantVolume์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค. ๊ฒ์ฆ๋ ๋ฉ์ปค๋์ฆ ๋๋ถ์ Kubernetes์์ ๋ฐ์ดํฐ ์์ ์ด ๋งค๋ ๋ ์ฌ์์ง๊ณ ์์ต๋๋ค.
๊ฐ Cassandra ํฌ๋์ ์์ฒด PertantVolume์ ํ ๋นํฉ๋๋ค.
Cassandra ์์ฒด๋ ๋ฐ์ดํฐ ๋ณต์ ๋ฅผ ์๋ฏธํ๋ฉฐ ์ด๋ฅผ ์ํ ๋ด์ฅ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ค๋ ์ ์ ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ง์ ์์ ๋
ธ๋์์ Cassandra ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํด Ceph ๋๋ GlusterFS์ ๊ฐ์ ๋ถ์ฐ ์์คํ
์ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ค์์ ์ฌ์ฉํ์ฌ ํธ์คํธ ๋์คํฌ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ๋
ผ๋ฆฌ์ ์
๋๋ค. hostPath
.
๋ ๋ค๋ฅธ ์ง๋ฌธ์ ๊ฐ ๊ธฐ๋ฅ ๋ถ๊ธฐ์ ๋ํด ๊ฐ๋ฐ์๋ฅผ ์ํ ๋ณ๋์ ํ๊ฒฝ์ ๋ง๋ค๊ณ ์ถ์์ง ์ฌ๋ถ์ ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ํ๋์ Cassandra ๋ ธ๋๋ฅผ ์์ฑํ๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ ์ฅ์์ ์ ์ฅํ๋ ๊ฒ์ ๋๋ค. ์ธ๊ธ๋ Ceph ๋ฐ GlusterFS๊ฐ ์ ํ ์ฌํญ์ด ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ๊ฐ๋ฐ์๋ Kuberntes ํด๋ฌ์คํฐ ๋ ธ๋ ์ค ํ๋๊ฐ ์์ค๋๋๋ผ๋ ํ ์คํธ ๋ฐ์ดํฐ๊ฐ ์์ค๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํ ์ ์์ต๋๋ค.
2. ๋ชจ๋ํฐ๋ง
Kubernetes์์ ๋ชจ๋ํฐ๋ง์ ๊ตฌํํ๊ธฐ ์ํ ์ฌ์ค์ ๊ฒฝ์์ ์ฌ์ง๊ฐ ์๋ ์ ํ์ Prometheus์
๋๋ค. (์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๋ํด ์์ธํ ์ด์ผ๊ธฐํ์ต๋๋ค.
Cassandra์ฉ Grafana์ ๊ทธ๋ํ ๋ชจ์ ์
์์ถ์
์ฒด๋ ๋จ ๋ ๊ณณ๋ฟ์
๋๋ค.
์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ์ฒซ ๋ฒ์งธ ๊ฒ์ ์ ํํ์ต๋๋ค.
- JMX ๋ด๋ณด๋ด๊ธฐ๋ ์ฑ์ฅํ๊ณ ๋ฐ์ ํ๋ ๋ฐ๋ฉด Cassandra ๋ด๋ณด๋ด๊ธฐ๋ ์ถฉ๋ถํ ์ปค๋ฎค๋ํฐ ์ง์์ ๋ฐ์ง ๋ชปํ์ต๋๋ค. Cassandra ๋ด๋ณด๋ด๊ธฐ๋ ์ฌ์ ํ ๋๋ถ๋ถ์ Cassandra ๋ฒ์ ์ ์ง์ํ์ง ์์ต๋๋ค.
- ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ฌ javaagent๋ก ์คํํ ์ ์์ต๋๋ค.
-javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180
. - ๊ทธ๋ฅผ ์ํ ๊ฒ์ด ํ๋ ์๋ค
์ ์ ํ ๋์๋ณด๋ , ์ด๋ Cassandra ๋ด๋ณด๋ด๊ธฐ์ ํธํ๋์ง ์์ต๋๋ค.
3. Kubernetes ํ๋ฆฌ๋ฏธํฐ๋ธ ์ ํ
์์ Cassandra ํด๋ฌ์คํฐ ๊ตฌ์กฐ์ ๋ฐ๋ผ ๊ฑฐ๊ธฐ์ ์ค๋ช ๋ ๋ชจ๋ ๋ด์ฉ์ Kubernetes ์ฉ์ด๋ก ๋ฒ์ญํด ๋ณด๊ฒ ์ต๋๋ค.
- ์นด์ฐ๋๋ผ ๋ ธ๋ โ ํฌ๋
- ์นด์ฐ๋๋ผ ๋ โ StatefulSet
- Cassandra Datacenter โ StatefulSets์ ํ
- ์นด์ฐ๋๋ผ ํด๋ฌ์คํฐ โ ???
์ ์ฒด Cassandra ํด๋ฌ์คํฐ๋ฅผ ํ ๋ฒ์ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ผ๋ถ ์ถ๊ฐ ์ํฐํฐ๊ฐ ๋๋ฝ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ํ์ง๋ง ์กด์ฌํ์ง ์๋ ๊ฒ์ด ์๋ค๋ฉด ๋ง๋ค ์ ์์ต๋๋ค! Kubernetes์๋ ์ด๋ฌํ ๋ชฉ์ ์ ์ํด ์์ฒด ๋ฆฌ์์ค๋ฅผ ์ ์ํ๋ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค.
๋ก๊ทธ ๋ฐ ๊ฒฝ๊ณ ์ ๋ํ ์ถ๊ฐ ๋ฆฌ์์ค ์ ์ธ
ํ์ง๋ง Custom Resource ์์ฒด๋ ์๋ฌด ์๋ฏธ๋ ์์ต๋๋ค. ์ ์ด๊ธฐ. ๋์์ ๊ตฌํด์ผ ํ ์๋ ์์ต๋๋ค
4. ํฌ๋ ์๋ณ
์ ๋จ๋ฝ์์ ์ฐ๋ฆฌ๋ ํ๋์ Cassandra ๋ ธ๋๊ฐ Kubernetes์ ํ๋์ ํฌ๋์ ๋์ผํ๋ค๋ ๋ฐ ๋์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ํฌ๋์ IP ์ฃผ์๋ ๋งค๋ฒ ๋ค๋ฆ ๋๋ค. ๊ทธ๋ฆฌ๊ณ Cassandra์ ๋ ธ๋ ์๋ณ์ IP ์ฃผ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. Pod๊ฐ ์ ๊ฑฐ๋ ๋๋ง๋ค Cassandra ํด๋ฌ์คํฐ๋ ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค.
ํ์ถ๊ตฌ๋ ํ๋๊ฐ ์๋๋ผ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํธ์คํธ ์๋ณ์(Cassandra ์ธ์คํด์ค๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ UUID) ๋๋ IP ์ฃผ์๋ณ๋ก ๊ธฐ๋ก์ ๋ณด๊ดํ๊ณ ์ด๋ฅผ ์ผ๋ถ ๊ตฌ์กฐ/ํ
์ด๋ธ์ ๋ชจ๋ ์ ์ฅํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์๋ ๋ ๊ฐ์ง ์ฃผ์ ๋จ์ ์ด ์์ต๋๋ค.
- ๋ ๋ ธ๋๊ฐ ๋์์ ๋จ์ด์ง๋ฉด ๊ฒฝ์ ์กฐ๊ฑด์ด ๋ฐ์ํ ์ํ์ด ์์ต๋๋ค. ์์น ํ Cassandra ๋ ธ๋๋ ๋์์ ํ ์ด๋ธ์์ IP ์ฃผ์๋ฅผ ์์ฒญํ๊ณ ๋์ผํ ๋ฆฌ์์ค๋ฅผ ๋๊ณ ๊ฒฝ์ํฉ๋๋ค.
- Cassandra ๋ ธ๋์ ๋ฐ์ดํฐ๊ฐ ์์ค๋๋ฉด ๋ ์ด์ ์ด๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
- ๋ ๋ฒ์งธ ์๋ฃจ์
์ ์์ ํดํน์ฒ๋ผ ๋ณด์ด์ง๋ง ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๊ฐ Cassandra ๋
ธ๋์ ๋ํด ClusterIP๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ๊ตฌํ์ ๋ฌธ์ ์ :
- Cassandra ํด๋ฌ์คํฐ์ ๋ ธ๋๊ฐ ๋ง์ผ๋ฉด ์๋น์ค๋ ๋ง์ด ์์ฑํด์ผ ํฉ๋๋ค.
- ClusterIP ๊ธฐ๋ฅ์ iptables๋ฅผ ํตํด ๊ตฌํ๋ฉ๋๋ค. Cassandra ํด๋ฌ์คํฐ์ ๋ง์(1000... ๋๋ 100?) ๋
ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๋ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค. ํ์ง๋ง
IPVS ๊ธฐ๋ฐ ๋ฐธ๋ฐ์ฑ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
- ์ธ ๋ฒ์งธ ์๋ฃจ์
์ ์ค์ ์ ํ์ฑํํ์ฌ ์ ์ฉ ํฌ๋ ๋คํธ์ํฌ ๋์ Cassandra ๋
ธ๋์ฉ ๋
ธ๋ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
hostNetwork: true
. ์ด ๋ฐฉ๋ฒ์๋ ๋ค์๊ณผ ๊ฐ์ ํน์ ์ ํ ์ฌํญ์ด ์ ์ฉ๋ฉ๋๋ค.- ์ฅ์น๋ฅผ ๊ต์ฒดํฉ๋๋ค. ์ ๋ ธ๋๋ ์ด์ ๋ ธ๋์ ๋์ผํ IP ์ฃผ์๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค(AWS, GCP์ ๊ฐ์ ํด๋ผ์ฐ๋์์๋ ์ด๋ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค).
- ํด๋ฌ์คํฐ ๋ ธ๋ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋คํธ์ํฌ ๋ฆฌ์์ค๋ฅผ ๋๊ณ ๊ฒฝ์ํ๊ธฐ ์์ํฉ๋๋ค. ๋ฐ๋ผ์ ํ๋์ ํด๋ฌ์คํฐ ๋ ธ๋์ Cassandra๊ฐ ํฌํจ๋ ํฌ๋๋ฅผ ๋ ๊ฐ ์ด์ ๋ฐฐ์นํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
5. ๋ฐฑ์
์ฐ๋ฆฌ๋ ์ผ์ ์ ๋ฐ๋ผ ๋จ์ผ Cassandra ๋
ธ๋ ๋ฐ์ดํฐ์ ์ ์ฒด ๋ฒ์ ์ ์ ์ฅํ๋ ค๊ณ ํฉ๋๋ค. Kubernetes๋ ๋ค์์ ์ฌ์ฉํ์ฌ ํธ๋ฆฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
Cassandra๋ ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค๋ ์ ์ ์๊ธฐ์์ผ ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ ์ฒด ๋ฐฑ์ ์ ํ๋ ค๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๊ฐ ํ์ํฉ๋๋ค(๋ฉคํ ์ด๋ธ) ๋์คํฌ๋ก ์ด๋(SSTable). ์ด ์์ ์์ Cassandra ๋ ธ๋๋ ์ฐ๊ฒฐ ์๋ฝ์ ์ค์งํ๊ณ ํด๋ฌ์คํฐ์์ ์์ ํ ์ข ๋ฃ๋ฉ๋๋ค.
๊ทธ ํ์๋ ๋ฐฑ์ ์ด ์ ๊ฑฐ๋ฉ๋๋ค(์ค๋ ์ฌ์ง) ๊ตฌ์ฑํ๊ฐ ์ ์ฅ๋ฉ๋๋ค(ํค ์คํ์ด์ค). ๊ทธ๋ฐ ๋ค์ ๋ฐฑ์ ๋ง์ผ๋ก๋ ์๋ฌด๊ฒ๋ ์ ๊ณตํ์ง ์๋๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. Cassandra ๋ ธ๋๊ฐ ๋ด๋นํ๋ ๋ฐ์ดํฐ ์๋ณ์๋ฅผ ์ ์ฅํด์ผ ํฉ๋๋ค. ์ด๋ ํน์ ํ ํฐ์ ๋๋ค.
Cassandra ๋
ธ๋๊ฐ ๋ด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๊ธฐ ์ํ ํ ํฐ ๋ฐฐํฌ
Kubernetes์์ Google๋ก๋ถํฐ Cassandra ๋ฐฑ์
์ ๊ฐ์ ธ์ค๋ ์์ ์คํฌ๋ฆฝํธ๋ ๋ค์์์ ์ฐพ์ ์ ์์ต๋๋ค.
set -eu
if [[ -z "$1" ]]; then
info "Please provide a keyspace"
exit 1
fi
KEYSPACE="$1"
result=$(nodetool snapshot "${KEYSPACE}")
if [[ $? -ne 0 ]]; then
echo "Error while making snapshot"
exit 1
fi
timestamp=$(echo "$result" | awk '/Snapshot directory: / { print $3 }')
mkdir -p /tmp/backup
for path in $(find "/var/lib/cassandra/data/${KEYSPACE}" -name $timestamp); do
table=$(echo "${path}" | awk -F "[/-]" '{print $7}')
mkdir /tmp/backup/$table
mv $path /tmp/backup/$table
done
tar -zcf /tmp/backup.tar.gz -C /tmp/backup .
nodetool clearsnapshot "${KEYSPACE}"
ํ๋์ Cassandra ๋ ธ๋์์ ๋ฐฑ์ ์ ์ํํ๊ธฐ ์ํ bash ์คํฌ๋ฆฝํธ์ ์
Kubernetes์ Cassandra๋ฅผ ์ํ ์ค๋น๋ ์๋ฃจ์
ํ์ฌ Kubernetes์ Cassandra๋ฅผ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฒ์ ๋ฌด์์ด๋ฉฐ, ์ด๋ค ์ค ์ฃผ์ด์ง ์๊ตฌ ์ฌํญ์ ๊ฐ์ฅ ์ ํฉํ ๊ฒ์ ๋ฌด์์ ๋๊น?
1. StatefulSet ๋๋ Helm ์ฐจํธ ๊ธฐ๋ฐ ์๋ฃจ์
๊ธฐ๋ณธ StatefulSets ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ Cassandra ํด๋ฌ์คํฐ๋ฅผ ์คํํ๋ ๊ฒ์ ์ข์ ์ต์ ์ ๋๋ค. Helm ์ฐจํธ์ Go ํ ํ๋ฆฟ์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์์๊ฒ Cassandra ๋ฐฐํฌ๋ฅผ ์ํ ์ ์ฐํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ธ๋ ์ค๋ฅ์ ๊ฐ์ ์์์น ๋ชปํ ์ผ์ด ๋ฐ์ํ๊ธฐ ์ ๊น์ง๋ ์ ์๋ํฉ๋๋ค. ํ์ค Kubernetes ๋๊ตฌ๋ ์์ ์ค๋ช ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ณ ๋ คํ ์ ์์ต๋๋ค. ๋ํ ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ธ๋ ๊ต์ฒด, ๋ฐฑ์ , ๋ณต๊ตฌ, ๋ชจ๋ํฐ๋ง ๋ฑ ๋ ๋ณต์กํ ์ฉ๋๋ก ํ์ฅํ ์ ์๋ ๋ฒ์๊ฐ ๋งค์ฐ ์ ํ์ ์ ๋๋ค.
๋ํ์ :
๋ ์ฐจํธ ๋ชจ๋ ๋๊ฐ์ด ํ๋ฅญํ์ง๋ง ์์์ ์ค๋ช ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
2. Kubernetes Operator ๊ธฐ๋ฐ ์๋ฃจ์
์ด๋ฌํ ์ต์ ์ ํด๋ฌ์คํฐ ๊ด๋ฆฌ๋ฅผ ์ํ ์ถฉ๋ถํ ๊ธฐํ๋ฅผ ์ ๊ณตํ๋ฏ๋ก ๋์ฑ ํฅ๋ฏธ๋กญ์ต๋๋ค. ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก Cassandra ์ฐ์ฐ์๋ฅผ ์ค๊ณํ๋ ๊ฒฝ์ฐ Sidecar <-> Controller <-> CRD์ ๊ฐ์ ์ข์ ํจํด์ด ์์ต๋๋ค.
์ ์ค๊ณ๋ Cassandra ์ฐ์ฐ์์ ๋
ธ๋ ๊ด๋ฆฌ ์ฒด๊ณ
๊ธฐ์กด ์ฐ์ฐ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. instaclustr์ Cassandra ์ฐ์ฐ์
-
GitHub์ - ์ค๋น ์ํ: ์ํ
- ๋ผ์ด์ ์ค: ์ํ์น 2.0
- ๊ตฌํ ์ธ์ด: Java
์ด๋ ์ค์ ๋ก ๊ด๋ฆฌํ Cassandra ๋ฐฐํฌ๋ฅผ ์ ๊ณตํ๋ ํ์ฌ์ ๋งค์ฐ ์ ๋งํ๊ณ ์ ๊ทน์ ์ผ๋ก ๊ฐ๋ฐ ์ค์ธ ํ๋ก์ ํธ์ ๋๋ค. ์์์ ์ค๋ช ํ ๋๋ก HTTP๋ฅผ ํตํด ๋ช ๋ น์ ๋ฐ์๋ค์ด๋ ์ฌ์ด๋์นด ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. Java๋ก ์์ฑ๋์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ๋ํ ์ด์์๋ ํ๋์ ๋ฐ์ดํฐ ์ผํฐ์ ๋ํด ์๋ก ๋ค๋ฅธ ๋์ ์ง์ํ์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด์์์๊ฒ๋ ๋ชจ๋ํฐ๋ง ์ง์, CRD๋ฅผ ์ฌ์ฉํ ์์ ์์ค ํด๋ฌ์คํฐ ๊ด๋ฆฌ, ๋ฐฑ์ ์์ฑ์ ์ํ ๋ฌธ์ํ ๋ฑ์ ์ด์ ์ด ์์ต๋๋ค.
2. Jetstack์ ๋ค๋น๊ฒ์ดํฐ
-
GitHub์ - ์ค๋น ์ํ: ์ํ
- ๋ผ์ด์ ์ค: ์ํ์น 2.0
- ๊ตฌํ: Golang
DB-as-a-Service๋ฅผ ๋ฐฐํฌํ๋๋ก ์ค๊ณ๋ ๋ช ๋ น๋ฌธ์ ๋๋ค. ํ์ฌ Elasticsearch์ Cassandra๋ผ๋ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ํฉ๋๋ค. RBAC๋ฅผ ํตํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ธ์ค ์ ์ด์ ๊ฐ์ ํฅ๋ฏธ๋ก์ด ์๋ฃจ์ ์ด ์์ต๋๋ค(์ด๋ฅผ ์ํด ์์ฒด ๋ณ๋์ Navigator-apiserver๊ฐ ์์ต๋๋ค). ์์ธํ ์ดํด๋ณผ ๊ฐ์น๊ฐ ์๋ ํฅ๋ฏธ๋ก์ด ํ๋ก์ ํธ์ด์ง๋ง ๋ง์ง๋ง ์ปค๋ฐ์ด XNUMX๋ ๋ฐ ์ ์ ์ด๋ฃจ์ด์ก๊ธฐ ๋๋ฌธ์ ์ ์ฌ๋ ฅ์ด ํ์คํ ๊ฐ์ํ์ต๋๋ค.
3. vgkowski์ Cassandra ์ฐ์ฐ์
-
GitHub์ - ์ค๋น ์ํ: ์ํ
- ๋ผ์ด์ ์ค: ์ํ์น 2.0
- ๊ตฌํ: Golang
์ ์ฅ์์ ๋ํ ๋ง์ง๋ง ์ปค๋ฐ์ด 1.9๋ ์ด์ ์ ์ด์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ค์ ์ด๋ฅผ "์ฌ๊ฐํ๊ฒ" ๊ณ ๋ คํ์ง ์์์ต๋๋ค. Operator ๊ฐ๋ฐ์ด ์ค๋จ๋์์ต๋๋ค. ์ง์๋๋ ๊ฒ์ผ๋ก ๋ณด๊ณ ๋ Kubernetes์ ์ต์ ๋ฒ์ ์ XNUMX์ ๋๋ค.
4. Rook์ Cassandra ์ฐ์ฐ์
-
GitHub์ - ์ค๋น ์ํ: ์ํ
- ๋ผ์ด์ ์ค: ์ํ์น 2.0
- ๊ตฌํ: Golang
์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋งํผ ๊ฐ๋ฐ์ด ๋น ๋ฅด๊ฒ ์งํ๋์ง ์๋ ์ด์์์
๋๋ค. ํด๋ฌ์คํฐ ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ์ฌํ๊ฒ ๊ณ ๋ ค๋ CRD ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ๊ณ ์์ผ๋ฉฐ ClusterIP(๋์ผํ "ํดํน")๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋
ธ๋๋ฅผ ์๋ณํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง ์ง๊ธ์ ๊ทธ๊ฒ ์ ๋ถ์
๋๋ค. ํ์ฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ํฐ๋ง์ด๋ ๋ฐฑ์
์ด ์์ต๋๋ค(๊ทธ๋ฐ๋ฐ ์ฐ๋ฆฌ๋ ๋ชจ๋ํฐ๋ง์ ์ํด
์ฃผ์: ์ฐ๋ฆฌ๋ ํ๋ก์ ํธ ์ค ํ๋์์ ์ด ์ฐ์ฐ์๋ฅผ ์ฝ๊ฐ ์์ ํ์ฌ ์ฌ์ฉํ์ต๋๋ค. ์ ์ฒด ์ด์ ๊ธฐ๊ฐ(~4๊ฐ์ ์ด์) ๋์ ์ด์์์ ์์ ์ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋์ง ์์์ต๋๋ค.
5. ์ค๋ ์ง์ CassKop
-
GitHub์ - ์ค๋น ์ํ: ์ํ
- ๋ผ์ด์ ์ค: ์ํ์น 2.0
- ๊ตฌํ: Golang
๋ชฉ๋ก์ ์๋ ๊ฐ์ฅ ์ด๋ฆฐ ์ด์์: ์ฒซ ๋ฒ์งธ ์ปค๋ฐ์ 23๋
2019์ XNUMX์ผ์ ์ด๋ฃจ์ด์ก์ต๋๋ค. ์ด๋ฏธ ๋ชฉ๋ก์ ์๋ ์๋ง์ ๊ธฐ๋ฅ์ด ๋ฌด๊ธฐ๊ณ ์ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์์ธํ ๋ด์ฉ์ ํ๋ก์ ํธ ์ ์ฅ์์์ ํ์ธํ ์ ์์ต๋๋ค. ์ฐ์ฐ์๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ฐ์ฐ์ SDK๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์์ต๋๋ค. ์ฆ์ ๋ชจ๋ํฐ๋ง์ ์ง์ํฉ๋๋ค. ๋ค๋ฅธ ์ฐ์ฐ์์์ ์ฃผ์ ์ฐจ์ด์ ์ ์ฌ์ฉ์
๋๋ค.
์กฐ์ฌ ๊ฒฐ๊ณผ
Cassandra๋ฅผ Kubernetes๋ก ํฌํ ํ๊ธฐ ์ํ ์ ๊ทผ ๋ฐฉ์๊ณผ ๊ฐ๋ฅํ ์ต์ ์ ์๋ ๊ทธ ์์ฒด๋ก ๋งํด์ค๋๋ค. ์ฃผ์ ๋ ์์๊ฐ ๋ง์ต๋๋ค.
์ด ๋จ๊ณ์์๋ ์ํ์ ๊ฐ์ํ๊ณ ์์ ์์ ์ ์๋ํ ์ ์์ต๋๋ค. ๊ฐ๋ฐ์ ์ค ๋๊ตฌ๋ ํ๋ก๋์ ํ๊ฒฝ์์ ์๋ฃจ์ ์ 100% ์๋์ ๋ณด์ฅํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฏธ ๋ง์ ์ ํ์ด ๊ฐ๋ฐ ๋ฒค์น์์ ์ฌ์ฉํด ๋ณผ ๊ฐ๋ฅ์ฑ์ด ์์ด ๋ณด์ ๋๋ค.
์์ผ๋ก๋ ๋ฐฐ์ ํ ์ด ์ฌ์๊ฐ ๋์์ด ๋ ๊ฒ ๊ฐ์์!
PS
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
MongoDB๋ฅผ Kubernetes๋ก ์ํํ๊ฒ ๋ง์ด๊ทธ๋ ์ด์ "; - ยซ
RabbitMQ๋ฅผ Kubernetes๋ก ์ํํ๊ฒ ๋ง์ด๊ทธ๋ ์ด์ "; - ยซ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ Kubernetes(๊ฐ์ ๋ฐ ๋์์ ๋ณด๊ณ ์) "; - ยซ
K8s ํ๊ณผ ์๋ น: ๋๊ท๋ชจ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํธ์คํธ๋ฉ ์๋ ํฅ์ ".
์ถ์ฒ : habr.com