Cassandra๋ฅผ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜: ๊ธฐ๋Šฅ ๋ฐ ์†”๋ฃจ์…˜

Cassandra๋ฅผ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜: ๊ธฐ๋Šฅ ๋ฐ ์†”๋ฃจ์…˜

์šฐ๋ฆฌ๋Š” ์ •๊ธฐ์ ์œผ๋กœ 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๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜: ๊ธฐ๋Šฅ ๋ฐ ์†”๋ฃจ์…˜
Cassandra์—์„œ ํŠธ๋žœ์žญ์…˜ ๋‹ค์ด์–ด๊ทธ๋žจ ์ž‘์„ฑ

Kubernetes์—์„œ๋Š” PertantVolume์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒ€์ฆ๋œ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋•๋ถ„์— Kubernetes์—์„œ ๋ฐ์ดํ„ฐ ์ž‘์—…์ด ๋งค๋…„ ๋” ์‰ฌ์›Œ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Cassandra๋ฅผ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜: ๊ธฐ๋Šฅ ๋ฐ ์†”๋ฃจ์…˜
๊ฐ Cassandra ํฌ๋“œ์— ์ž์ฒด PertantVolume์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

Cassandra ์ž์ฒด๋Š” ๋ฐ์ดํ„ฐ ๋ณต์ œ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์ด๋ฅผ ์œ„ํ•œ ๋‚ด์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋งŽ์€ ์ˆ˜์˜ ๋…ธ๋“œ์—์„œ Cassandra ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ์œ„ํ•ด Ceph ๋˜๋Š” GlusterFS์™€ ๊ฐ™์€ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ŠคํŠธ ๋””์Šคํฌ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ ์˜๊ตฌ ๋””์Šคํฌ ๋˜๋Š” ์žฅ์ฐฉ hostPath.

๋˜ ๋‹ค๋ฅธ ์งˆ๋ฌธ์€ ๊ฐ ๊ธฐ๋Šฅ ๋ถ„๊ธฐ์— ๋Œ€ํ•ด ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์€์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ํ•˜๋‚˜์˜ Cassandra ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ ์ €์žฅ์†Œ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ธ๊ธ‰๋œ Ceph ๋ฐ GlusterFS๊ฐ€ ์„ ํƒ ์‚ฌํ•ญ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฐœ๋ฐœ์ž๋Š” Kuberntes ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์†์‹ค๋˜๋”๋ผ๋„ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ๋ชจ๋‹ˆํ„ฐ๋ง

Kubernetes์—์„œ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์‹ค์ƒ ๊ฒฝ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์—†๋Š” ์„ ํƒ์€ Prometheus์ž…๋‹ˆ๋‹ค. (์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ณด๊ณ ์„œ). Cassandra๋Š” Prometheus์šฉ ์ธก์ •ํ•ญ๋ชฉ ๋‚ด๋ณด๋‚ด๊ธฐ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‚˜์š”? ๊ทธ๋ฆฌ๊ณ  Grafana์šฉ ๋Œ€์‹œ๋ณด๋“œ ์ผ์น˜์—์„œ ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Cassandra๋ฅผ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜: ๊ธฐ๋Šฅ ๋ฐ ์†”๋ฃจ์…˜
Cassandra์šฉ Grafana์˜ ๊ทธ๋ž˜ํ”„ ๋ชจ์–‘ ์˜ˆ

์ˆ˜์ถœ์—…์ฒด๋Š” ๋‹จ ๋‘ ๊ณณ๋ฟ์ž…๋‹ˆ๋‹ค. jmx_exporter ะธ cassandra_exporter.

์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์ฒซ ๋ฒˆ์งธ ๊ฒƒ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. JMX ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” ์„ฑ์žฅํ•˜๊ณ  ๋ฐœ์ „ํ•˜๋Š” ๋ฐ˜๋ฉด Cassandra ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” ์ถฉ๋ถ„ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›์„ ๋ฐ›์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. Cassandra ๋‚ด๋ณด๋‚ด๊ธฐ๋Š” ์—ฌ์ „ํžˆ ๋Œ€๋ถ€๋ถ„์˜ Cassandra ๋ฒ„์ „์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ javaagent๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. -javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180.
  3. ๊ทธ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ด ํ•˜๋‚˜ ์žˆ๋‹ค ์ ์ ˆํ•œ ๋Œ€์‹œ๋ณด๋“œ, ์ด๋Š” Cassandra ๋‚ด๋ณด๋‚ด๊ธฐ์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

3. Kubernetes ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ ์„ ํƒ

์œ„์˜ Cassandra ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๊ฑฐ๊ธฐ์— ์„ค๋ช…๋œ ๋ชจ๋“  ๋‚ด์šฉ์„ Kubernetes ์šฉ์–ด๋กœ ๋ฒˆ์—ญํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ์นด์‚ฐ๋“œ๋ผ ๋…ธ๋“œ โ†’ ํฌ๋“œ
  • ์นด์‚ฐ๋“œ๋ผ ๋ž™ โ†’ StatefulSet
  • Cassandra Datacenter โ†’ StatefulSets์˜ ํ’€
  • ์นด์‚ฐ๋“œ๋ผ ํด๋Ÿฌ์Šคํ„ฐ โ†’ ???

์ „์ฒด Cassandra ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์ถ”๊ฐ€ ์—”ํ„ฐํ‹ฐ๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! Kubernetes์—๋Š” ์ด๋Ÿฌํ•œ ๋ชฉ์ ์„ ์œ„ํ•ด ์ž์ฒด ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ๋ฆฌ์†Œ์Šค ์ •์˜.

Cassandra๋ฅผ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜: ๊ธฐ๋Šฅ ๋ฐ ์†”๋ฃจ์…˜
๋กœ๊ทธ ๋ฐ ๊ฒฝ๊ณ ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค ์„ ์–ธ

ํ•˜์ง€๋งŒ Custom Resource ์ž์ฒด๋Š” ์•„๋ฌด ์˜๋ฏธ๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ œ์–ด๊ธฐ. ๋„์›€์„ ๊ตฌํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์šด์˜์ž...

4. ํฌ๋“œ ์‹๋ณ„

์œ„ ๋‹จ๋ฝ์—์„œ ์šฐ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ Cassandra ๋…ธ๋“œ๊ฐ€ Kubernetes์˜ ํ•˜๋‚˜์˜ ํฌ๋“œ์™€ ๋™์ผํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํฌ๋“œ์˜ IP ์ฃผ์†Œ๋Š” ๋งค๋ฒˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Cassandra์˜ ๋…ธ๋“œ ์‹๋ณ„์€ IP ์ฃผ์†Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. Pod๊ฐ€ ์ œ๊ฑฐ๋  ๋•Œ๋งˆ๋‹ค Cassandra ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

ํƒˆ์ถœ๊ตฌ๋Š” ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ํ˜ธ์ŠคํŠธ ์‹๋ณ„์ž(Cassandra ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” UUID) ๋˜๋Š” IP ์ฃผ์†Œ๋ณ„๋กœ ๊ธฐ๋ก์„ ๋ณด๊ด€ํ•˜๊ณ  ์ด๋ฅผ ์ผ๋ถ€ ๊ตฌ์กฐ/ํ…Œ์ด๋ธ”์— ๋ชจ๋‘ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋‘ ๋…ธ๋“œ๊ฐ€ ๋™์‹œ์— ๋–จ์–ด์ง€๋ฉด ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด ๋ฐœ์ƒํ•  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์Šน ํ›„ Cassandra ๋…ธ๋“œ๋Š” ๋™์‹œ์— ํ…Œ์ด๋ธ”์—์„œ IP ์ฃผ์†Œ๋ฅผ ์š”์ฒญํ•˜๊ณ  ๋™์ผํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋†“๊ณ  ๊ฒฝ์Ÿํ•ฉ๋‹ˆ๋‹ค.
    • Cassandra ๋…ธ๋“œ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜๋ฉด ๋” ์ด์ƒ ์ด๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  2. ๋‘ ๋ฒˆ์งธ ์†”๋ฃจ์…˜์€ ์ž‘์€ ํ•ดํ‚น์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฐ Cassandra ๋…ธ๋“œ์— ๋Œ€ํ•ด ClusterIP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌํ˜„์˜ ๋ฌธ์ œ์ :
    • Cassandra ํด๋Ÿฌ์Šคํ„ฐ์— ๋…ธ๋“œ๊ฐ€ ๋งŽ์œผ๋ฉด ์„œ๋น„์Šค๋„ ๋งŽ์ด ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ClusterIP ๊ธฐ๋Šฅ์€ iptables๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. Cassandra ํด๋Ÿฌ์Šคํ„ฐ์— ๋งŽ์€(1000... ๋˜๋Š” 100?) ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋Š” ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ IPVS ๊ธฐ๋ฐ˜ ๋ฐธ๋Ÿฐ์‹ฑ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์„ธ ๋ฒˆ์งธ ์†”๋ฃจ์…˜์€ ์„ค์ •์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์ „์šฉ ํฌ๋“œ ๋„คํŠธ์›Œํฌ ๋Œ€์‹  Cassandra ๋…ธ๋“œ์šฉ ๋…ธ๋“œ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. hostNetwork: true. ์ด ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ • ์ œํ•œ ์‚ฌํ•ญ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
    • ์žฅ์น˜๋ฅผ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋…ธ๋“œ๋Š” ์ด์ „ ๋…ธ๋“œ์™€ ๋™์ผํ•œ IP ์ฃผ์†Œ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค(AWS, GCP์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ์—์„œ๋Š” ์ด๋Š” ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค).
    • ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ๋ฆฌ์†Œ์Šค๋ฅผ ๋†“๊ณ  ๊ฒฝ์Ÿํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ์— Cassandra๊ฐ€ ํฌํ•จ๋œ ํฌ๋“œ๋ฅผ ๋‘ ๊ฐœ ์ด์ƒ ๋ฐฐ์น˜ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

5. ๋ฐฑ์—…

์šฐ๋ฆฌ๋Š” ์ผ์ •์— ๋”ฐ๋ผ ๋‹จ์ผ Cassandra ๋…ธ๋“œ ๋ฐ์ดํ„ฐ์˜ ์ „์ฒด ๋ฒ„์ „์„ ์ €์žฅํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Kubernetes๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํฌ๋ก ์žก, ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ Cassandra ์ž์‹ ์ด ์šฐ๋ฆฌ ๋ฐ”ํ€ด์— ๋ง์„ ๊ฑธ์—ˆ์Šต๋‹ˆ๋‹ค.

Cassandra๋Š” ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•œ๋‹ค๋Š” ์ ์„ ์ƒ๊ธฐ์‹œ์ผœ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๋ฐฑ์—…์„ ํ•˜๋ ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(๋ฉคํ…Œ์ด๋ธ”) ๋””์Šคํฌ๋กœ ์ด๋™(SSTable). ์ด ์‹œ์ ์—์„œ Cassandra ๋…ธ๋“œ๋Š” ์—ฐ๊ฒฐ ์ˆ˜๋ฝ์„ ์ค‘์ง€ํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์™„์ „ํžˆ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ํ›„์—๋Š” ๋ฐฑ์—…์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค(์Šค๋ƒ… ์‚ฌ์ง„) ๊ตฌ์„ฑํ‘œ๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค(ํ‚ค ์ŠคํŽ˜์ด์Šค). ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐฑ์—…๋งŒ์œผ๋กœ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. Cassandra ๋…ธ๋“œ๊ฐ€ ๋‹ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ ์‹๋ณ„์ž๋ฅผ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŠน์ˆ˜ ํ† ํฐ์ž…๋‹ˆ๋‹ค.

Cassandra๋ฅผ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜: ๊ธฐ๋Šฅ ๋ฐ ์†”๋ฃจ์…˜
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๋ฅผ Kubernetes๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜: ๊ธฐ๋Šฅ ๋ฐ ์†”๋ฃจ์…˜
์ž˜ ์„ค๊ณ„๋œ 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(๋™์ผํ•œ "ํ•ดํ‚น")๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง์ด๋‚˜ ๋ฐฑ์—…์ด ์—†์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฐ๋ฐ ์šฐ๋ฆฌ๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด ์Šค์Šค๋กœ ๊ฐ€์ ธ๊ฐ”์–ด). ํฅ๋ฏธ๋กœ์šด ์ ์€ ์ด ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ScyllaDB๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฃผ์˜: ์šฐ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์—์„œ ์ด ์—ฐ์‚ฐ์ž๋ฅผ ์•ฝ๊ฐ„ ์ˆ˜์ •ํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์šด์˜ ๊ธฐ๊ฐ„(~4๊ฐœ์›” ์šด์˜) ๋™์•ˆ ์šด์˜์ž์˜ ์ž‘์—…์— ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

5. ์˜ค๋ Œ์ง€์˜ CassKop

  • GitHub์˜
  • ์ค€๋น„ ์ƒํƒœ: ์•ŒํŒŒ
  • ๋ผ์ด์„ ์Šค: ์•„ํŒŒ์น˜ 2.0
  • ๊ตฌํ˜„: Golang

๋ชฉ๋ก์— ์žˆ๋Š” ๊ฐ€์žฅ ์–ด๋ฆฐ ์šด์˜์ž: ์ฒซ ๋ฒˆ์งธ ์ปค๋ฐ‹์€ 23๋…„ 2019์›” XNUMX์ผ์— ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ๋ชฉ๋ก์— ์žˆ๋Š” ์ˆ˜๋งŽ์€ ๊ธฐ๋Šฅ์ด ๋ฌด๊ธฐ๊ณ ์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž๋Š” ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ์‚ฐ์ž SDK๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰์‹œ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž์™€์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ์‚ฌ์šฉ์ž…๋‹ˆ๋‹ค. CassKop ํ”Œ๋Ÿฌ๊ทธ์ธ, Python์œผ๋กœ ๊ตฌํ˜„๋˜๊ณ  Cassandra ๋…ธ๋“œ ๊ฐ„์˜ ํ†ต์‹ ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์กฐ์‚ฌ ๊ฒฐ๊ณผ

Cassandra๋ฅผ Kubernetes๋กœ ํฌํŒ…ํ•˜๊ธฐ ์œ„ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์˜ ์ˆ˜๋Š” ๊ทธ ์ž์ฒด๋กœ ๋งํ•ด์ค๋‹ˆ๋‹ค. ์ฃผ์ œ๋Š” ์ˆ˜์š”๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์ด ๋‹จ๊ณ„์—์„œ๋Š” ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•˜๊ณ  ์œ„์˜ ์ž‘์—…์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ์ค‘ ๋ˆ„๊ตฌ๋„ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์†”๋ฃจ์…˜์˜ 100% ์ž‘๋™์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฏธ ๋งŽ์€ ์ œํ’ˆ์ด ๊ฐœ๋ฐœ ๋ฒค์น˜์—์„œ ์‚ฌ์šฉํ•ด ๋ณผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด ๋ณด์ž…๋‹ˆ๋‹ค.

์•ž์œผ๋กœ๋Š” ๋ฐฐ์— ํƒ„ ์ด ์—ฌ์ž๊ฐ€ ๋„์›€์ด ๋  ๊ฒƒ ๊ฐ™์•„์š”!

PS

๋ธ”๋กœ๊ทธ์—์„œ๋„ ์ฝ์–ด๋ณด์„ธ์š”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€