๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ๋ฐฐํฌ

์ด ์ฃผ์ œ์—์„œ๋Š” GKE์˜ Apigee Hybrid, ์˜จํ”„๋ ˜, Microsoftยฎ Azure Kubernetes Service(AKS), Amazon Elastic Kubernetes Service(EKS), RedHat OpenShift์— ๋ฐฐํฌ๋œ Anthos GKE์˜ ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ๋ฐฐํฌ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์š”๊ฑด๊ณผ ์ ˆ์ฐจ์—์„œ ํ”Œ๋žซํผ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ํ† ํด๋กœ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ™œ์„ฑ-ํ™œ์„ฑ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—ฌ๋Ÿฌ ์ง€๋ฆฌ์  ์œ„์น˜์— ๋ฐฐํฌ๋˜๊ณ  ๋ฐฐํฌ์— ๋Œ€ํ•œ ์ง€์—ฐ ์‹œ๊ฐ„์ด ์งง์€ API ์‘๋‹ต์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ. ํด๋ผ์ด์–ธํŠธ์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์—ฌ๋Ÿฌ ์ง€๋ฆฌ์  ์œ„์น˜์— ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋ฏธ๊ตญ ์„œ๋ถ€ ํ•ด์•ˆ, ๋ฏธ๊ตญ ๋™๋ถ€ ํ•ด์•ˆ, ์œ ๋Ÿฝ, APAC์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ™œ์„ฑ-์ˆ˜๋™: ๊ธฐ๋ณธ ๋ฆฌ์ „๊ณผ ์žฅ์•  ์กฐ์น˜ ๋˜๋Š” ์žฌํ•ด ๋ณต๊ตฌ ๋ฆฌ์ „์ด ์žˆ๋Š” ๊ฒฝ์šฐ.

๋‹ค์Œ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐฐํฌ์˜ ๋ฆฌ์ „์€ Cassandra๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.

Apigee Hybrid ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ๋ฐฐํฌ ์•„ํ‚คํ…์ฒ˜

๊ธฐ๋ณธ ์š”๊ฑด

์—ฌ๋Ÿฌ ์ง€์—ญ์— ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ๊ธฐ๋ณธ ์š”๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

GKE

  • ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ(์˜ˆ: ๋‹ค์–‘ํ•œ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด, ๋‹ค๋ฅธ VPC ๋„คํŠธ์›Œํฌ, ํด๋ผ์šฐ๋“œ ๋ฐ ์˜จํ”„๋ ˜) ๊ฐ„์— ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ Apigee ๋ฐฐํฌ๋ฅผ ์„ค์น˜ํ•  ๋•Œ๋Š” Cassandra๊ฐ€ ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋Ÿฌํ•œ ๊ฐœ๋ณ„ ๋„คํŠธ์›Œํฌ ๊ฐ„์— ๋‚ด๋ถ€ ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” VPN ๋˜๋Š” ํด๋ผ์šฐ๋“œ๋ณ„ ์—ฐ๊ฒฐ ์†”๋ฃจ์…˜์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์„œ๋น„์Šค ๊ณ„์ •์„ ์ธ์ฆํ•˜๋Š” ๊ฒฝ์šฐ ํ™•์žฅํ•˜๋ ค๋Š” ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ์— ๋Œ€ํ•ด ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. GKE์—์„œ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ ์‚ฌ์šฉ ์„ค์ • ๋˜๋Š” AKS ๋ฐ EKS์—์„œ ์›Œํฌ๋กœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ ์ œํœด ์‚ฌ์šฉ ์„ค์ •์„ ์ฐธ์กฐํ•˜์„ธ์š”.
  • ์—ฌ๋Ÿฌ ๊ฐ€์ง€ CIDR ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฆฌ์ „์— Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— cert-manager๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ์ „ ๊ฐ„ ํ†ต์‹ ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  Cassandra ํฌ๋“œ์—์„œ ์ž์ฒด ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. hostNetwork๊ฐ€ false๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ Cassandra ํฌ๋“œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. hostNetwork๊ฐ€ true๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ Cassandra ํฌ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Kubernetes ๋…ธ๋“œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • Cassandra ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ:
    • ํฌ๋“œ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ฐฉํ™”๋ฒฝ, VPN, VPC ํ”ผ์–ด๋ง, vNet ํ”ผ์–ด๋ง์„ ๋น„๋กฏํ•œ ๋ฆฌ์ „ ๊ฐ„ ์—ฐ๊ฒฐ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ GKE ์„ค์น˜์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.
    • ํฌ๋“œ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„ ์—ฐ๊ฒฐ์ด ์—†์œผ๋ฉด('์„ฌ(island) ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ'๋กœ ์‹คํ–‰๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ) Apigee Hybrid ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์„ค์น˜์—์„œ ๋ชจ๋“  ๋ฆฌ์ „์— ๋Œ€ํ•œ ์žฌ์ •์˜ ํŒŒ์ผ์— cassandra.hostNetwork: true๋ฅผ ์„ค์ •ํ•˜์—ฌ Kubernetes hostNetwork ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜์„ธ์š”.

      hostNetwork์˜ ํ•„์š”์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜์˜ ์„ฌ(island) ๋ชจ๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ hostNetwork๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    • ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ๊ตฌ์„ฑ์„ ์ƒˆ ๋ฆฌ์ „์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ ์ „ ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ hostNetwork๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • hostNetwork๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์—ˆ์œผ๋ฉด ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์˜ ์ •๋ฐฉํ–ฅ DNS ์กฐํšŒ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Apigee Cassandra๋Š” ์ •๋ฐฉํ–ฅ DNS ์กฐํšŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ์ค‘์— ํ˜ธ์ŠคํŠธ IP๋ฅผ ํš๋“ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ชจ๋“  ๋ฆฌ์ „์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— TCP ํฌํŠธ 7001์„ ์—ด์–ด ๋ฆฌ์ „ ๋ฐ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๊ฐ„์˜ ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ†ต์‹ ํ•˜๋„๋ก ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Cassandra ํฌํŠธ ๋ฒˆํ˜ธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํฌํŠธ ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Kubernetes ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

GKE On-Prem

  • ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ(์˜ˆ: ๋‹ค์–‘ํ•œ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด, ๋‹ค๋ฅธ VPC ๋„คํŠธ์›Œํฌ, ํด๋ผ์šฐ๋“œ ๋ฐ ์˜จํ”„๋ ˜) ๊ฐ„์— ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ Apigee ๋ฐฐํฌ๋ฅผ ์„ค์น˜ํ•  ๋•Œ๋Š” Cassandra๊ฐ€ ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋Ÿฌํ•œ ๊ฐœ๋ณ„ ๋„คํŠธ์›Œํฌ ๊ฐ„์— ๋‚ด๋ถ€ ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” VPN ๋˜๋Š” ํด๋ผ์šฐ๋“œ๋ณ„ ์—ฐ๊ฒฐ ์†”๋ฃจ์…˜์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—ฌ๋Ÿฌ ๊ฐ€์ง€ CIDR ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฆฌ์ „์— Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— cert-manager๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ์ „ ๊ฐ„ ํ†ต์‹ ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  Cassandra ํฌ๋“œ์—์„œ ์ž์ฒด ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. hostNetwork๊ฐ€ false๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ Cassandra ํฌ๋“œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. hostNetwork๊ฐ€ true๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ Cassandra ํฌ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Kubernetes ๋…ธ๋“œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • Cassandra ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ:
    • ํฌ๋“œ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„ ์—ฐ๊ฒฐ์ด ์—†์œผ๋ฉด(GKE On-Prem ์„ค์น˜์˜ ๊ธฐ๋ณธ ์‚ฌ๋ก€์ธ '์„ฌ(island) ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ'๋กœ ์‹คํ–‰๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ) Apigee Hybrid ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์„ค์น˜์—์„œ ๋ชจ๋“  ๋ฆฌ์ „์— ๋Œ€ํ•œ ์žฌ์ •์˜ ํŒŒ์ผ์— cassandra.hostNetwork: true๋ฅผ ์„ค์ •ํ•˜์—ฌ Kubernetes hostNetwork ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜์„ธ์š”.

      hostNetwork์˜ ํ•„์š”์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜์˜ ์„ฌ(island) ๋ชจ๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ hostNetwork๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    • ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ๊ตฌ์„ฑ์„ ์ƒˆ ๋ฆฌ์ „์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ ์ „ ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ hostNetwork๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • hostNetwork๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์—ˆ์œผ๋ฉด ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์˜ ์ •๋ฐฉํ–ฅ DNS ์กฐํšŒ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Apigee Cassandra๋Š” ์ •๋ฐฉํ–ฅ DNS ์กฐํšŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ์ค‘์— ํ˜ธ์ŠคํŠธ IP๋ฅผ ํš๋“ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ชจ๋“  ๋ฆฌ์ „์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— Cassandra ํฌํŠธ๋ฅผ ์—ด์–ด ๋ฆฌ์ „๊ณผ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์‚ฌ์ด์˜ ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ†ต์‹ ํ•˜๋„๋ก ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Cassandra ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ํฌํŠธ ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Kubernetes ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

AKS

  • ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ(์˜ˆ: ๋‹ค์–‘ํ•œ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด, ๋‹ค๋ฅธ VPC ๋„คํŠธ์›Œํฌ, ํด๋ผ์šฐ๋“œ ๋ฐ ์˜จํ”„๋ ˜) ๊ฐ„์— ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ Apigee ๋ฐฐํฌ๋ฅผ ์„ค์น˜ํ•  ๋•Œ๋Š” Cassandra๊ฐ€ ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋Ÿฌํ•œ ๊ฐœ๋ณ„ ๋„คํŠธ์›Œํฌ ๊ฐ„์— ๋‚ด๋ถ€ ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” VPN ๋˜๋Š” ํด๋ผ์šฐ๋“œ๋ณ„ ์—ฐ๊ฒฐ ์†”๋ฃจ์…˜์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ • ๋‹จ๊ณ„๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— Google Cloud ๋ฐ ์กฐ์ง ๊ตฌ์„ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์š”๊ฑด์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.
  • ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— cert-manager๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  Cassandra ํฌ๋“œ์—์„œ ์ž์ฒด ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. hostNetwork๊ฐ€ false๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ Cassandra ํฌ๋“œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. hostNetwork๊ฐ€ true๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ Cassandra ํฌ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Kubernetes ๋…ธ๋“œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • Cassandra ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ:
    • ํฌ๋“œ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„ ์—ฐ๊ฒฐ์ด ์—†์œผ๋ฉด(AKS ์„ค์น˜์˜ ๊ธฐ๋ณธ ์‚ฌ๋ก€์ธ '์„ฌ(island) ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ'๋กœ ์‹คํ–‰๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ) Apigee Hybrid ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์„ค์น˜์—์„œ ๋ชจ๋“  ๋ฆฌ์ „์— ๋Œ€ํ•œ ์žฌ์ •์˜ ํŒŒ์ผ์— cassandra.hostNetwork: true๋ฅผ ์„ค์ •ํ•˜์—ฌ Kubernetes hostNetwork ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜์„ธ์š”.

      hostNetwork์˜ ํ•„์š”์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜์˜ ์„ฌ(island) ๋ชจ๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ hostNetwork๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    • ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ๊ตฌ์„ฑ์„ ์ƒˆ ๋ฆฌ์ „์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ ์ „ ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ hostNetwork๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • hostNetwork๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์—ˆ์œผ๋ฉด ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์˜ ์ •๋ฐฉํ–ฅ DNS ์กฐํšŒ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Apigee Cassandra๋Š” ์ •๋ฐฉํ–ฅ DNS ์กฐํšŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ์ค‘์— ํ˜ธ์ŠคํŠธ IP๋ฅผ ํš๋“ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ชจ๋“  ๋ฆฌ์ „์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— Cassandra ํฌํŠธ๋ฅผ ์—ด์–ด ๋ฆฌ์ „๊ณผ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์‚ฌ์ด์˜ ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ†ต์‹ ํ•˜๋„๋ก ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Cassandra ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ํฌํŠธ ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Kubernetes ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

EKS

  • ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ(์˜ˆ: ๋‹ค์–‘ํ•œ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด, ๋‹ค๋ฅธ VPC ๋„คํŠธ์›Œํฌ, ํด๋ผ์šฐ๋“œ ๋ฐ ์˜จํ”„๋ ˜) ๊ฐ„์— ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ Apigee ๋ฐฐํฌ๋ฅผ ์„ค์น˜ํ•  ๋•Œ๋Š” Cassandra๊ฐ€ ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋Ÿฌํ•œ ๊ฐœ๋ณ„ ๋„คํŠธ์›Œํฌ ๊ฐ„์— ๋‚ด๋ถ€ ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” VPN ๋˜๋Š” ํด๋ผ์šฐ๋“œ๋ณ„ ์—ฐ๊ฒฐ ์†”๋ฃจ์…˜์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ • ๋‹จ๊ณ„๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— Google Cloud ๋ฐ ์กฐ์ง ๊ตฌ์„ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์š”๊ฑด์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.
  • ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— cert-manager๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  Cassandra ํฌ๋“œ์—์„œ ์ž์ฒด ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. hostNetwork๊ฐ€ false๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ Cassandra ํฌ๋“œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. hostNetwork๊ฐ€ true๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ Cassandra ํฌ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Kubernetes ๋…ธ๋“œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • Cassandra ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ:
    • ํฌ๋“œ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„ ์—ฐ๊ฒฐ์ด ์—†์œผ๋ฉด('์„ฌ(Island) ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ'๋กœ ์‹คํ–‰๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ) Apigee Hybrid ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์„ค์น˜์—์„œ ๋ชจ๋“  ๋ฆฌ์ „์— ๋Œ€ํ•œ ์žฌ์ •์˜ ํŒŒ์ผ์— cassandra.hostNetwork: true๋ฅผ ์„ค์ •ํ•˜์—ฌ Kubernetes hostNetwork ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜์„ธ์š”. Amazon EKS๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์™„์ „ ํ†ตํ•ฉํ˜• ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

      hostNetwork์˜ ํ•„์š”์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜์˜ ์„ฌ(island) ๋ชจ๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ hostNetwork๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    • ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ๊ตฌ์„ฑ์„ ์ƒˆ ๋ฆฌ์ „์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ ์ „ ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ hostNetwork๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • hostNetwork๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์—ˆ์œผ๋ฉด ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์˜ ์ •๋ฐฉํ–ฅ DNS ์กฐํšŒ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Apigee Cassandra๋Š” ์ •๋ฐฉํ–ฅ DNS ์กฐํšŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ์ค‘์— ํ˜ธ์ŠคํŠธ IP๋ฅผ ํš๋“ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ชจ๋“  ๋ฆฌ์ „์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— Cassandra ํฌํŠธ๋ฅผ ์—ด์–ด ๋ฆฌ์ „๊ณผ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์‚ฌ์ด์˜ ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ†ต์‹ ํ•˜๋„๋ก ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Cassandra ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ํฌํŠธ ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Kubernetes ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

OpenShift

  • ์—ฌ๋Ÿฌ ๋„คํŠธ์›Œํฌ(์˜ˆ: ๋‹ค์–‘ํ•œ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด, ๋‹ค๋ฅธ VPC ๋„คํŠธ์›Œํฌ, ํด๋ผ์šฐ๋“œ ๋ฐ ์˜จํ”„๋ ˜) ๊ฐ„์— ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ Apigee ๋ฐฐํฌ๋ฅผ ์„ค์น˜ํ•  ๋•Œ๋Š” Cassandra๊ฐ€ ๋…ธ๋“œ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋Ÿฌํ•œ ๊ฐœ๋ณ„ ๋„คํŠธ์›Œํฌ ๊ฐ„์— ๋‚ด๋ถ€ ์—ฐ๊ฒฐ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” VPN ๋˜๋Š” ํด๋ผ์šฐ๋“œ๋ณ„ ์—ฐ๊ฒฐ ์†”๋ฃจ์…˜์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ • ๋‹จ๊ณ„๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— Google Cloud ๋ฐ ์กฐ์ง ๊ตฌ์„ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์š”๊ฑด์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.
  • ๊ฐ ํด๋Ÿฌ์Šคํ„ฐ์— cert-manager๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  Cassandra ํฌ๋“œ์—์„œ ์ž์ฒด ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. hostNetwork๊ฐ€ false๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ Cassandra ํฌ๋“œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. hostNetwork๊ฐ€ true๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ Cassandra ํฌ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Kubernetes ๋…ธ๋“œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
  • Cassandra ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ:
    • ํฌ๋“œ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„ ์—ฐ๊ฒฐ์ด ์—†์œผ๋ฉด(OpenShift ์„ค์น˜์˜ ๊ธฐ๋ณธ ์‚ฌ๋ก€์ธ '์„ฌ(island) ๋„คํŠธ์›Œํฌ ๋ชจ๋“œ'๋กœ ์‹คํ–‰๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ) Apigee Hybrid ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์„ค์น˜์—์„œ ๋ชจ๋“  ๋ฆฌ์ „์— ๋Œ€ํ•œ ์žฌ์ •์˜ ํŒŒ์ผ์— cassandra.hostNetwork: true๋ฅผ ์„ค์ •ํ•˜์—ฌ Kubernetes hostNetwork ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜์„ธ์š”.

      hostNetwork์˜ ํ•„์š”์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜์˜ ์„ฌ(island) ๋ชจ๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ hostNetwork๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

    • ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ๊ตฌ์„ฑ์„ ์ƒˆ ๋ฆฌ์ „์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ ์ „ ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ hostNetwork๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    • hostNetwork๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋˜์—ˆ์œผ๋ฉด ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์˜ ์ •๋ฐฉํ–ฅ DNS ์กฐํšŒ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Apigee Cassandra๋Š” ์ •๋ฐฉํ–ฅ DNS ์กฐํšŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ์ค‘์— ํ˜ธ์ŠคํŠธ IP๋ฅผ ํš๋“ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ชจ๋“  ๋ฆฌ์ „์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— Cassandra ํฌํŠธ๋ฅผ ์—ด์–ด ๋ฆฌ์ „๊ณผ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์‚ฌ์ด์˜ ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ†ต์‹ ํ•˜๋„๋ก ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Cassandra ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ํฌํŠธ ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Kubernetes ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์„ฌ(Island) ๋ชจ๋“œ ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ hostNetwork

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” ์™„์ „ ํ†ตํ•ฉ(ํ”Œ๋žซ) ๋ชจ๋“œ์™€ ์„ฌ(island) ๋ชจ๋“œ๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋ณธ ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Apigee๋Š” ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ Cassandra ์—ฐ๊ฒฐ์ด ๋‹จ์ˆœํ™”๋˜๋ฏ€๋กœ ๊ฐ€๊ธ‰์  ํ”Œ๋žซ ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์„ฌ(island) ๋ชจ๋“œ๋กœ ๊ตฌ์„ฑ๋˜๋ฉด ํฌ๋“œ ๋„คํŠธ์›Œํฌ๊ฐ€ ๊ฒฉ๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ํฌ๋“œ๋Š” ํฌ๋“œ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์‹คํ–‰ ์ค‘์ธ ํฌ๋“œ์™€ ์ง์ ‘ ํ†ต์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‘ ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ์˜ ์ž์„ธํ•œ ์ฐจ์ด์ ๊ณผ ๊ฐ ๋ชจ๋ธ์˜ ์˜ˆ์‹œ๋Š” ์ผ๋ฐ˜์ ์ธ ๋„คํŠธ์›Œํฌ ๋ชจ๋ธ ๊ตฌํ˜„์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Apigee Hybrid๊ฐ€ ๋‘˜ ์ด์ƒ์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์„ฌ(Island) ๋ชจ๋“œ ๋„คํŠธ์›Œํ‚น ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ, cassandra.hostNetwork ์†์„ฑ์„ ํ†ตํ•ด Cassandra์˜ hostNetwork ์„ค์ •์„ ์‚ฌ์šฉ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Kubernetes ํฌ๋“œ๋Š” Kubernetes ์›Œ์ปค ๋…ธ๋“œ IP๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ๊ฐœ๋ณ„ ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ๊ฒฉ๋ฆฌ๋ฉ๋‹ˆ๋‹ค. hostNetwork๊ฐ€ true๋กœ ์„ค์ •๋˜๋ฉด ํฌ๋“œ๊ฐ€ ์ž์ฒด ๋„คํŠธ์›Œํฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์—์„œ ๊ฒฉ๋ฆฌ๋˜์ง€ ์•Š๊ณ  ํฌ๋“œ๊ฐ€ ์˜ˆ์•ฝ๋œ Kubernetes ์›Œ์ปค ๋…ธ๋“œ์˜ IP ์ฃผ์†Œ์™€ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ๋Œ€์‹  ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด Cassandra๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ Kubernetes ์›Œ์ปค ๋…ธ๋“œ IP๋ฅผ ํ•ด๋‹น IP๋กœ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ Cassandra๊ฐ€ ์„ฌ(island) ๋ชจ๋“œ๋กœ ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ชจ๋“  Cassandra ํฌ๋“œ ๊ฐ„์— ํ’€ ๋ฉ”์‹œ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cassandra ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ํ™•์ธ

Cassandra ํฌ๋“œ๋Š” ๋‹ค๋ฅธ Cassandra ํฌ๋“œ๋ฅผ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ ํ™•์ธํ•˜์ง€ ์•Š์ง€๋งŒ Cassandra๋Š” ์‹œ์ž‘ ์‹œ ์ž์ฒด ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์ด DNS๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. hostNetwork์ด true๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํฌ๋“œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ Kubernetes ์›Œ์ปค ๋…ธ๋“œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ ๋™์ผํ•˜๋ฏ€๋กœ ์›Œ์ปค ๋…ธ๋“œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ ํด๋Ÿฌ์Šคํ„ฐ DNS ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด IP ์ฃผ์†Œ๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Kubernetes ์›Œ์ปค ๋…ธ๋“œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ Cassandra ํฌ๋“œ๊ฐ€ ์™„์ „ํžˆ ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ hostNetwork์„ true๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ ํด๋Ÿฌ์Šคํ„ฐ์˜ ํฌ๋“œ์—์„œ Kubernetes ์›Œ์ปค ๋…ธ๋“œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ ๋ฆฌ์ „์— Apigee Hybrid ๊ตฌ์„ฑ

์ด ์„น์…˜์—์„œ๋Š” ๋ฉ€ํ‹ฐ ๋ฆฌ์ „์— Apigee Hybrid๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

GKE

๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ ๊ตฌ์„ฑ

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

  1. ์ฒซ ๋ฒˆ์งธ๋กœ ์ƒ์„ฑ๋œ ๋ฆฌ์ „์— ๋Œ€ํ•ด apigee ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ํฌ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    kubectl get pods -o wide -n APIGEE_NAMESPACE
    
  2. ์ด ๋ฆฌ์ „์—์„œ Cassandra์˜ ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: 10.0.0.11).
  3. ๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „์˜ overrides.yaml ํŒŒ์ผ์„ ์ค€๋น„ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œ๋“œ ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    cassandra:
      multiRegionSeedHost: "SEED_HOST_IP_ADDRESS"
      datacenter: "DATACENTER_NAME"
      rack: "RACK_NAME"
      hostNetwork: false
      clusterName: CLUSTER_NAME

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • SEED_HOST_IP_ADDRESS๋ฅผ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: 10.0.0.11).
    • DATACENTER_NAME์„ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: dc-2).
    • RACK_NAME์„ ๋ž™ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: ra-1).
    • CLUSTER_NAME์„ Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ apigeecluster์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ cassandra.clusterName์˜ ๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“  ๋ฆฌ์ „์—์„œ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „ ๊ตฌ์„ฑ

์ƒˆ ๋ฆฌ์ „์„ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „์— cert-manager๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ธ์ฆ์„œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ CA ๋ฃจํŠธ๋Š” Cassandra ๋ฐ mTLS์šฉ ๊ธฐํƒ€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ตฌ์„ฑ์š”์†Œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— ์ผ๊ด€๋œ ์ธ์ฆ์„œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    1. ์ปจํ…์ŠคํŠธ๋ฅผ ์›๋ž˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      kubectl config use-context ORIGINAL_CLUSTER_NAME
      
    2. ํ˜„์žฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ์„ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

      kubectl get namespace APIGEE_NAMESPACE -o yaml > apigee-namespace.yaml
      
    3. apigee-ca ๋ณด์•ˆ ๋น„๋ฐ€์„ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
      
    4. ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒˆ ๋ฆฌ์ „์˜ ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      kubectl config use-context NEW_CLUSTER_NAME
      
    5. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ์„ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ƒˆ ๋ฆฌ์ „์—์„œ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      kubectl apply -f apigee-namespace.yaml
      
    6. ๋ณด์•ˆ ๋น„๋ฐ€์„ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

      kubectl -n cert-manager apply -f apigee-ca.yaml
      
  3. ๋‹จ๊ณ„์— ๋”ฐ๋ผ ์ƒˆ ๋ฆฌ์ „์— Apigee Hybrid CRD๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  4. ์ด์ œ Helm ์ฐจํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ „ 1์—์„œ์™€ ๊ฐ™์ด ๋‹ค์Œ Helm ์ฐจํŠธ ๋ช…๋ น์–ด๋กœ ์ƒˆ ๋ฆฌ์ „์— Apigee Hybrid๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    helm upgrade operator apigee-operator \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade datastore apigee-datastore \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade telemetry apigee-telemetry \
      --install \
      --namespace APIGEE_NAMESPACE> \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade redis apigee-redis \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ingress-manager apigee-ingress-manager \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ORG_NAME apigee-org \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env mentioned on the overrides
    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set env=ENV_RELEASE_NAME \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env group mentioned on the overrides
    helm upgrade apigee-virtualhost-ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set envgroup=ENV_GROUP_RELEASE_NAME \
      -f overrides-DATACENTER_NAME.yaml
    

    ENV_RELEASE_NAME ๋ฐ ENV_GROUP_RELEASE_NAME์€ apigee-env ๋ฐ apigee-virtualhost ์ฐจํŠธ์˜ ์„ค์น˜ ๋ฐ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. Helm ์ถœ์‹œ ์ด๋ฆ„์€ Apigee Hybrid ์„ค์น˜ ๋‚ด์—์„œ ๊ณ ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ์ด๋ฆ„์ด ๊ณ ์œ ํ•œ ๊ฒฝ์šฐ ENV_NAME๊ณผ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ™˜๊ฒฝ ์ด๋ฆ„๊ณผ ํ™˜๊ฒฝ ๊ทธ๋ฃน ์ด๋ฆ„์ด ๋™์ผํ•œ ๊ฒฝ์šฐ ๊ฐ๊ฐ ๊ณ ์œ ํ•œ Helm ์ถœ์‹œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‘˜ ๋‹ค ์ด๋ฆ„์ด dev์ธ ๊ฒฝ์šฐ dev-env-release ๋ฐ dev-envgroup-release์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    helm list ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ์‹œ ์ด๋ฆ„ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    helm list -n APIGEE_NAMESPACE
    .

  5. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์™€ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๋ชจ๋‘ ์ถœ๋ ฅ์— ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  \
    -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    ๋‹ค์Œ์€ ์„ฑ๊ณต์ ์ธ ์„ค์ •์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

    Datacenter: dc-1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.87.93   68.07 GiB  256     ?     fb51465c-167a-42f7-98c9-b6eba1de34de  c
    UN  10.132.84.94   69.9 GiB   256     ?     f621a5ac-e7ee-48a9-9a14-73d69477c642  b
    UN  10.132.84.105  76.95 GiB  256     ?     0561086f-e95b-4232-ba6c-ad519ff30336  d
    
    Datacenter: dc-2
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.0.8     71.61 GiB  256     ?     8894a98b-8406-45de-99e2-f404ab10b5d6  c
    UN  10.132.9.204   75.1 GiB   256     ?     afa0ffa3-630b-4f1e-b46f-fc3df988092e  a
    UN  10.132.3.133   68.08 GiB  256     ?     25ae39ab-b39e-4d4f-9cb7-de095ab873db  b
  6. ์ƒˆ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ๋ชจ๋“  ํฌ๋“œ์— Cassandra๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ apigeeorg๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
      kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      

      ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      Ex: kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      "rg-hybrid-b7d3b9c"
      
    2. Cassandra ๋ฐ์ดํ„ฐ ๋ณต์ œ ์ปค์Šคํ…€ ๋ฆฌ์†Œ์Šค(YAML) ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์‹œ์—์„œ ํŒŒ์ผ ์ด๋ฆ„์€ datareplication.yaml์ž…๋‹ˆ๋‹ค.

      ํŒŒ์ผ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: REGION_EXPANSION
        namespace: NAMESPACE
      spec:
        organizationRef: APIGEEORG_VALUE
        force: false
        source:
          region: SOURCE_REGION

      ๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      • REGION_EXPANSION์€ ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ง€์ •ํ•  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.
      • NAMESPACE๋Š” overrides.yaml์— ์ œ๊ณต๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ 'apigee'์ž…๋‹ˆ๋‹ค.
      • APIGEEORG_VALUE๋Š” ์ด์ „ ๋‹จ๊ณ„์˜ kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name" ๋ช…๋ น์–ด์—์„œ ์ถœ๋ ฅ๋œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด rg-hybrid-b7d3b9c์ž…๋‹ˆ๋‹ค.
      • SOURCE_REGION์€ ์†Œ์Šค ๋ฆฌ์ „์ด๋ฉฐ ์†Œ์Šค ๋ฆฌ์ „ overrides.yaml์˜ cassandra ์„น์…˜ ์•„๋ž˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๊ฐ’์ž…๋‹ˆ๋‹ค.

      ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: region-expansion
        namespace: apigee
      spec:
        organizationRef: rg-hybrid-b7d3b9c
        force: false
        source:
          region: "dc-1"
    3. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CassandraDataReplication์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
      kubectl apply -f datareplication.yaml
  7. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ๋นŒ๋“œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl -n APIGEE_NAMESPACE get apigeeds -o json | jq ".items[].status.cassandraDataReplication"

    ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
    "state": "complete",
    "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
    "state": "complete",
    "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
    "state": "complete",
    "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
  8. ๋ฐ์ดํ„ฐ ๋ณต์ œ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ํ™•์ธ๋˜๋ฉด ์‹œ๋“œ ํ˜ธ์ŠคํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
    1. overrides-DATACENTER_NAME.yaml์—์„œ multiRegionSeedHost: 10.0.0.11๊ฐ€ ์‚ญ์ œ๋จ
    2. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‹ค์‹œ ์ ์šฉํ•˜์—ฌ Apigee Datastore CR์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides-DATACENTER_NAME.yaml
      
  9. ๋กœ๊ทธ์—์„œ ์žฌ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ nodetool status ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl logs apigee-cassandra-default-0 -f -n APIGEE_NAMESPACE
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    ๋‹ค์Œ ์˜ˆ์‹œ๋Š” ๋กœ๊ทธ ํ•ญ๋ชฉ์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

    INFO  01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens)
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB)
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed

Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ํ™•์ธ

๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ๋‘ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์ด ์„ฑ๊ณตํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” ๋‘ ๋ฆฌ์ „์˜ nodetool ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status


Datacenter: dc-1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
Datacenter: us-west1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.0.4.33   78.69 KiB  256          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

GKE On-Prem

๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ ๊ตฌ์„ฑ

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

  1. ์ฒซ ๋ฒˆ์งธ๋กœ ์ƒ์„ฑ๋œ ๋ฆฌ์ „์— ๋Œ€ํ•ด apigee ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ํฌ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    kubectl get pods -o wide -n APIGEE_NAMESPACE
    
  2. ์ด ๋ฆฌ์ „์—์„œ Cassandra์˜ ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: 10.0.0.11).
  3. ๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „์˜ overrides.yaml ํŒŒ์ผ์„ ์ค€๋น„ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œ๋“œ ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    cassandra:
      multiRegionSeedHost: "SEED_HOST_IP_ADDRESS"
      datacenter: "DATACENTER_NAME"
      rack: "RACK_NAME"
      hostNetwork: false
      clusterName: CLUSTER_NAME

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • SEED_HOST_IP_ADDRESS๋ฅผ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: 10.0.0.11).
    • DATACENTER_NAME์„ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: dc-2).
    • RACK_NAME์„ ๋ž™ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: ra-1).
    • CLUSTER_NAME์„ Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ apigeecluster์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ cassandra.clusterName์˜ ๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“  ๋ฆฌ์ „์—์„œ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „ ๊ตฌ์„ฑ

์ƒˆ ๋ฆฌ์ „์„ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „์— cert-manager๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ธ์ฆ์„œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ CA ๋ฃจํŠธ๋Š” Cassandra ๋ฐ mTLS์šฉ ๊ธฐํƒ€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ตฌ์„ฑ์š”์†Œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— ์ผ๊ด€๋œ ์ธ์ฆ์„œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    1. ์ปจํ…์ŠคํŠธ๋ฅผ ์›๋ž˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      kubectl config use-context ORIGINAL_CLUSTER_NAME
      
    2. ํ˜„์žฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ์„ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

      kubectl get namespace APIGEE_NAMESPACE -o yaml > apigee-namespace.yaml
      
    3. apigee-ca ๋ณด์•ˆ ๋น„๋ฐ€์„ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
      
    4. ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒˆ ๋ฆฌ์ „์˜ ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      kubectl config use-context NEW_CLUSTER_NAME
      
    5. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ์„ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ƒˆ ๋ฆฌ์ „์—์„œ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      kubectl apply -f apigee-namespace.yaml
      
    6. ๋ณด์•ˆ ๋น„๋ฐ€์„ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

      kubectl -n cert-manager apply -f apigee-ca.yaml
      
  3. ๋‹จ๊ณ„์— ๋”ฐ๋ผ ์ƒˆ ๋ฆฌ์ „์— Apigee Hybrid CRD๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  4. ์ด์ œ Helm ์ฐจํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ „ 1์—์„œ์™€ ๊ฐ™์ด ๋‹ค์Œ Helm ์ฐจํŠธ ๋ช…๋ น์–ด๋กœ ์ƒˆ ๋ฆฌ์ „์— Apigee Hybrid๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    helm upgrade operator apigee-operator \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade datastore apigee-datastore \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade telemetry apigee-telemetry \
      --install \
      --namespace APIGEE_NAMESPACE> \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade redis apigee-redis \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ingress-manager apigee-ingress-manager \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ORG_NAME apigee-org \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env mentioned on the overrides
    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set env=ENV_RELEASE_NAME \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env group mentioned on the overrides
    helm upgrade apigee-virtualhost-ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set envgroup=ENV_GROUP_RELEASE_NAME \
      -f overrides-DATACENTER_NAME.yaml
    

    ENV_RELEASE_NAME ๋ฐ ENV_GROUP_RELEASE_NAME์€ apigee-env ๋ฐ apigee-virtualhost ์ฐจํŠธ์˜ ์„ค์น˜ ๋ฐ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. Helm ์ถœ์‹œ ์ด๋ฆ„์€ Apigee Hybrid ์„ค์น˜ ๋‚ด์—์„œ ๊ณ ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ์ด๋ฆ„์ด ๊ณ ์œ ํ•œ ๊ฒฝ์šฐ ENV_NAME๊ณผ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ™˜๊ฒฝ ์ด๋ฆ„๊ณผ ํ™˜๊ฒฝ ๊ทธ๋ฃน ์ด๋ฆ„์ด ๋™์ผํ•œ ๊ฒฝ์šฐ ๊ฐ๊ฐ ๊ณ ์œ ํ•œ Helm ์ถœ์‹œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‘˜ ๋‹ค ์ด๋ฆ„์ด dev์ธ ๊ฒฝ์šฐ dev-env-release ๋ฐ dev-envgroup-release์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    helm list ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ์‹œ ์ด๋ฆ„ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    helm list -n APIGEE_NAMESPACE
    .

  5. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์™€ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๋ชจ๋‘ ์ถœ๋ ฅ์— ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  \
    -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    ๋‹ค์Œ์€ ์„ฑ๊ณต์ ์ธ ์„ค์ •์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

    Datacenter: dc-1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.87.93   68.07 GiB  256     ?     fb51465c-167a-42f7-98c9-b6eba1de34de  c
    UN  10.132.84.94   69.9 GiB   256     ?     f621a5ac-e7ee-48a9-9a14-73d69477c642  b
    UN  10.132.84.105  76.95 GiB  256     ?     0561086f-e95b-4232-ba6c-ad519ff30336  d
    
    Datacenter: dc-2
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.0.8     71.61 GiB  256     ?     8894a98b-8406-45de-99e2-f404ab10b5d6  c
    UN  10.132.9.204   75.1 GiB   256     ?     afa0ffa3-630b-4f1e-b46f-fc3df988092e  a
    UN  10.132.3.133   68.08 GiB  256     ?     25ae39ab-b39e-4d4f-9cb7-de095ab873db  b
  6. ์ƒˆ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ๋ชจ๋“  ํฌ๋“œ์— Cassandra๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ apigeeorg๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
      kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      

      ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      Ex: kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      "rg-hybrid-b7d3b9c"
      
    2. Cassandra ๋ฐ์ดํ„ฐ ๋ณต์ œ ์ปค์Šคํ…€ ๋ฆฌ์†Œ์Šค(YAML) ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์‹œ์—์„œ ํŒŒ์ผ ์ด๋ฆ„์€ datareplication.yaml์ž…๋‹ˆ๋‹ค.

      ํŒŒ์ผ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: REGION_EXPANSION
        namespace: NAMESPACE
      spec:
        organizationRef: APIGEEORG_VALUE
        force: false
        source:
          region: SOURCE_REGION

      ๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      • REGION_EXPANSION์€ ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ง€์ •ํ•  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.
      • NAMESPACE๋Š” overrides.yaml์— ์ œ๊ณต๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ 'apigee'์ž…๋‹ˆ๋‹ค.
      • APIGEEORG_VALUE๋Š” ์ด์ „ ๋‹จ๊ณ„์˜ kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name" ๋ช…๋ น์–ด์—์„œ ์ถœ๋ ฅ๋œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด rg-hybrid-b7d3b9c์ž…๋‹ˆ๋‹ค.
      • SOURCE_REGION์€ ์†Œ์Šค ๋ฆฌ์ „์ด๋ฉฐ ์†Œ์Šค ๋ฆฌ์ „ overrides.yaml์˜ cassandra ์„น์…˜ ์•„๋ž˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๊ฐ’์ž…๋‹ˆ๋‹ค.

      ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: region-expansion
        namespace: apigee
      spec:
        organizationRef: rg-hybrid-b7d3b9c
        force: false
        source:
          region: "dc-1"
    3. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CassandraDataReplication์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
      kubectl apply -f datareplication.yaml
  7. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ๋นŒ๋“œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl -n APIGEE_NAMESPACE get apigeeds -o json | jq ".items[].status.cassandraDataReplication"

    ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
    "state": "complete",
    "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
    "state": "complete",
    "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
    "state": "complete",
    "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
  8. ๋ฐ์ดํ„ฐ ๋ณต์ œ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ํ™•์ธ๋˜๋ฉด ์‹œ๋“œ ํ˜ธ์ŠคํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
    1. overrides-DATACENTER_NAME.yaml์—์„œ multiRegionSeedHost: 10.0.0.11๊ฐ€ ์‚ญ์ œ๋จ
    2. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‹ค์‹œ ์ ์šฉํ•˜์—ฌ Apigee Datastore CR์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides-DATACENTER_NAME.yaml
      
  9. ๋กœ๊ทธ์—์„œ ์žฌ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ nodetool status ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl logs apigee-cassandra-default-0 -f -n APIGEE_NAMESPACE
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    ๋‹ค์Œ ์˜ˆ์‹œ๋Š” ๋กœ๊ทธ ํ•ญ๋ชฉ์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

    INFO  01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens)
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB)
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed

Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ํ™•์ธ

๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ๋‘ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์ด ์„ฑ๊ณตํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” ๋‘ ๋ฆฌ์ „์˜ nodetool ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status


Datacenter: dc-1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
Datacenter: us-west1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.0.4.33   78.69 KiB  256          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

AKS

๊ฐ ๋ฆฌ์ „์— ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ๋งŒ๋“ค๊ธฐ

Azure ๊ถŒ์žฅ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์—ฌ๊ธฐ์—์„œ ๋ฆฌ์ „ ๊ฐ„ ํ†ต์‹ ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. VNet-to-VNet: Azure์—์„œ ์—ฌ๋Ÿฌ ๋ฆฌ์ „ ๊ฐ„ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ.

๋‹ค์ค‘ ๋ฆฌ์ „ ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ

์—ฌ๋Ÿฌ ๊ฐ€์ง€ CIDR ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฆฌ์ „์— Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. 1๋‹จ๊ณ„: ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ๋„ ์ฐธ์กฐํ•˜์„ธ์š”. ์•ž์—์„œ ๋งŒ๋“  ์œ„์น˜ ๋ฐ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ฆฌ์ „์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— Cassandra ํฌํŠธ๋ฅผ ์—ด์–ด ๋ฆฌ์ „๊ณผ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์‚ฌ์ด์˜ ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ†ต์‹ ํ•˜๋„๋ก ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Cassandra ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ํฌํŠธ ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ ๊ตฌ์„ฑ

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

  1. ์ฒซ ๋ฒˆ์งธ๋กœ ์ƒ์„ฑ๋œ ๋ฆฌ์ „์— ๋Œ€ํ•ด apigee ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ํฌ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    kubectl get pods -o wide -n APIGEE_NAMESPACE
    
  2. ์ด ๋ฆฌ์ „์—์„œ Cassandra์˜ ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: 10.0.0.11).
  3. ๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „์˜ overrides.yaml ํŒŒ์ผ์„ ์ค€๋น„ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œ๋“œ ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    cassandra:
      multiRegionSeedHost: "SEED_HOST_IP_ADDRESS"
      datacenter: "DATACENTER_NAME"
      rack: "RACK_NAME"
      hostNetwork: false
      clusterName: CLUSTER_NAME

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • SEED_HOST_IP_ADDRESS๋ฅผ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: 10.0.0.11).
    • DATACENTER_NAME์„ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: dc-2).
    • RACK_NAME์„ ๋ž™ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: ra-1).
    • CLUSTER_NAME์„ Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ apigeecluster์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ cassandra.clusterName์˜ ๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“  ๋ฆฌ์ „์—์„œ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „ ๊ตฌ์„ฑ

์ƒˆ ๋ฆฌ์ „์„ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „์— cert-manager๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ธ์ฆ์„œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ CA ๋ฃจํŠธ๋Š” Cassandra ๋ฐ mTLS์šฉ ๊ธฐํƒ€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ตฌ์„ฑ์š”์†Œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— ์ผ๊ด€๋œ ์ธ์ฆ์„œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    1. ์ปจํ…์ŠคํŠธ๋ฅผ ์›๋ž˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      kubectl config use-context ORIGINAL_CLUSTER_NAME
      
    2. ํ˜„์žฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ์„ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

      kubectl get namespace APIGEE_NAMESPACE -o yaml > apigee-namespace.yaml
      
    3. apigee-ca ๋ณด์•ˆ ๋น„๋ฐ€์„ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
      
    4. ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒˆ ๋ฆฌ์ „์˜ ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      kubectl config use-context NEW_CLUSTER_NAME
      
    5. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ์„ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ƒˆ ๋ฆฌ์ „์—์„œ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      kubectl apply -f apigee-namespace.yaml
      
    6. ๋ณด์•ˆ ๋น„๋ฐ€์„ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

      kubectl -n cert-manager apply -f apigee-ca.yaml
      
  3. ๋‹จ๊ณ„์— ๋”ฐ๋ผ ์ƒˆ ๋ฆฌ์ „์— Apigee Hybrid CRD๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  4. ์ด์ œ Helm ์ฐจํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ „ 1์—์„œ์™€ ๊ฐ™์ด ๋‹ค์Œ Helm ์ฐจํŠธ ๋ช…๋ น์–ด๋กœ ์ƒˆ ๋ฆฌ์ „์— Apigee Hybrid๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    helm upgrade operator apigee-operator \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade datastore apigee-datastore \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade telemetry apigee-telemetry \
      --install \
      --namespace APIGEE_NAMESPACE> \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade redis apigee-redis \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ingress-manager apigee-ingress-manager \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ORG_NAME apigee-org \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env mentioned on the overrides
    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set env=ENV_RELEASE_NAME \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env group mentioned on the overrides
    helm upgrade apigee-virtualhost-ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set envgroup=ENV_GROUP_RELEASE_NAME \
      -f overrides-DATACENTER_NAME.yaml
    

    ENV_RELEASE_NAME ๋ฐ ENV_GROUP_RELEASE_NAME์€ apigee-env ๋ฐ apigee-virtualhost ์ฐจํŠธ์˜ ์„ค์น˜ ๋ฐ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. Helm ์ถœ์‹œ ์ด๋ฆ„์€ Apigee Hybrid ์„ค์น˜ ๋‚ด์—์„œ ๊ณ ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ์ด๋ฆ„์ด ๊ณ ์œ ํ•œ ๊ฒฝ์šฐ ENV_NAME๊ณผ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ™˜๊ฒฝ ์ด๋ฆ„๊ณผ ํ™˜๊ฒฝ ๊ทธ๋ฃน ์ด๋ฆ„์ด ๋™์ผํ•œ ๊ฒฝ์šฐ ๊ฐ๊ฐ ๊ณ ์œ ํ•œ Helm ์ถœ์‹œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‘˜ ๋‹ค ์ด๋ฆ„์ด dev์ธ ๊ฒฝ์šฐ dev-env-release ๋ฐ dev-envgroup-release์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    helm list ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ์‹œ ์ด๋ฆ„ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    helm list -n APIGEE_NAMESPACE
    .

  5. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์™€ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๋ชจ๋‘ ์ถœ๋ ฅ์— ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  \
    -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    ๋‹ค์Œ์€ ์„ฑ๊ณต์ ์ธ ์„ค์ •์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

    Datacenter: dc-1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.87.93   68.07 GiB  256     ?     fb51465c-167a-42f7-98c9-b6eba1de34de  c
    UN  10.132.84.94   69.9 GiB   256     ?     f621a5ac-e7ee-48a9-9a14-73d69477c642  b
    UN  10.132.84.105  76.95 GiB  256     ?     0561086f-e95b-4232-ba6c-ad519ff30336  d
    
    Datacenter: dc-2
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.0.8     71.61 GiB  256     ?     8894a98b-8406-45de-99e2-f404ab10b5d6  c
    UN  10.132.9.204   75.1 GiB   256     ?     afa0ffa3-630b-4f1e-b46f-fc3df988092e  a
    UN  10.132.3.133   68.08 GiB  256     ?     25ae39ab-b39e-4d4f-9cb7-de095ab873db  b
  6. ์ƒˆ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ๋ชจ๋“  ํฌ๋“œ์— Cassandra๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ apigeeorg๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
      kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      

      ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      Ex: kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      "rg-hybrid-b7d3b9c"
      
    2. Cassandra ๋ฐ์ดํ„ฐ ๋ณต์ œ ์ปค์Šคํ…€ ๋ฆฌ์†Œ์Šค(YAML) ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์‹œ์—์„œ ํŒŒ์ผ ์ด๋ฆ„์€ datareplication.yaml์ž…๋‹ˆ๋‹ค.

      ํŒŒ์ผ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: REGION_EXPANSION
        namespace: NAMESPACE
      spec:
        organizationRef: APIGEEORG_VALUE
        force: false
        source:
          region: SOURCE_REGION

      ๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      • REGION_EXPANSION์€ ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ง€์ •ํ•  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.
      • NAMESPACE๋Š” overrides.yaml์— ์ œ๊ณต๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ 'apigee'์ž…๋‹ˆ๋‹ค.
      • APIGEEORG_VALUE๋Š” ์ด์ „ ๋‹จ๊ณ„์˜ kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name" ๋ช…๋ น์–ด์—์„œ ์ถœ๋ ฅ๋œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด rg-hybrid-b7d3b9c์ž…๋‹ˆ๋‹ค.
      • SOURCE_REGION์€ ์†Œ์Šค ๋ฆฌ์ „์ด๋ฉฐ ์†Œ์Šค ๋ฆฌ์ „ overrides.yaml์˜ cassandra ์„น์…˜ ์•„๋ž˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๊ฐ’์ž…๋‹ˆ๋‹ค.

      ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: region-expansion
        namespace: apigee
      spec:
        organizationRef: rg-hybrid-b7d3b9c
        force: false
        source:
          region: "dc-1"
    3. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CassandraDataReplication์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
      kubectl apply -f datareplication.yaml
  7. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ๋นŒ๋“œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl -n APIGEE_NAMESPACE get apigeeds -o json | jq ".items[].status.cassandraDataReplication"

    ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
    "state": "complete",
    "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
    "state": "complete",
    "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
    "state": "complete",
    "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
  8. ๋ฐ์ดํ„ฐ ๋ณต์ œ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ํ™•์ธ๋˜๋ฉด ์‹œ๋“œ ํ˜ธ์ŠคํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
    1. overrides-DATACENTER_NAME.yaml์—์„œ multiRegionSeedHost: 10.0.0.11๊ฐ€ ์‚ญ์ œ๋จ
    2. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‹ค์‹œ ์ ์šฉํ•˜์—ฌ Apigee Datastore CR์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides-DATACENTER_NAME.yaml
      
  9. ๋กœ๊ทธ์—์„œ ์žฌ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ nodetool status ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl logs apigee-cassandra-default-0 -f -n APIGEE_NAMESPACE
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    ๋‹ค์Œ ์˜ˆ์‹œ๋Š” ๋กœ๊ทธ ํ•ญ๋ชฉ์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

    INFO  01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens)
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB)
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed

Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ํ™•์ธ

๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ๋‘ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์ด ์„ฑ๊ณตํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” ๋‘ ๋ฆฌ์ „์˜ nodetool ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status


Datacenter: dc-1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
Datacenter: us-west1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.0.4.33   78.69 KiB  256          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

EKS

๊ฐ ๋ฆฌ์ „์— ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ๋งŒ๋“ค๊ธฐ

VPC ํ”ผ์–ด๋ง์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๋ฆฌ์ „ ๊ฐ„ ํ†ต์‹ ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ AWS ๊ถŒ์žฅ์‚ฌํ•ญ์„ ๋”ฐ๋ฅด์„ธ์š”. ๋‹ค๋ฅธ ๋ฆฌ์ „์„ ์‚ฌ์šฉํ•˜๋Š” AWS ์šฉ์–ด๋Š” ๋ฆฌ์ „ ๊ฐ„ VPC ํ”ผ์–ด๋ง์ž…๋‹ˆ๋‹ค.

๋‹ค์ค‘ ๋ฆฌ์ „ ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ

์—ฌ๋Ÿฌ ๊ฐ€์ง€ CIDR ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฆฌ์ „์— Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. 1๋‹จ๊ณ„: ํด๋Ÿฌ์Šคํ„ฐ ๋งŒ๋“ค๊ธฐ๋„ ์ฐธ์กฐํ•˜์„ธ์š”. ์•ž์—์„œ ๋งŒ๋“  ์œ„์น˜ ๋ฐ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ฆฌ์ „์˜ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— Cassandra ํฌํŠธ๋ฅผ ์—ด์–ด ๋ฆฌ์ „๊ณผ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์‚ฌ์ด์˜ ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ†ต์‹ ํ•˜๋„๋ก ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Cassandra ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ํฌํŠธ ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ ๊ตฌ์„ฑ

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

  1. ์ฒซ ๋ฒˆ์งธ๋กœ ์ƒ์„ฑ๋œ ๋ฆฌ์ „์— ๋Œ€ํ•ด apigee ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ํฌ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    kubectl get pods -o wide -n APIGEE_NAMESPACE
    
  2. ์ด ๋ฆฌ์ „์—์„œ Cassandra์˜ ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: 10.0.0.11).
  3. ๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „์˜ overrides.yaml ํŒŒ์ผ์„ ์ค€๋น„ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œ๋“œ ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    cassandra:
      multiRegionSeedHost: "SEED_HOST_IP_ADDRESS"
      datacenter: "DATACENTER_NAME"
      rack: "RACK_NAME"
      hostNetwork: false
      clusterName: CLUSTER_NAME

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • SEED_HOST_IP_ADDRESS๋ฅผ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: 10.0.0.11).
    • DATACENTER_NAME์„ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: dc-2).
    • RACK_NAME์„ ๋ž™ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: ra-1).
    • CLUSTER_NAME์„ Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ apigeecluster์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ cassandra.clusterName์˜ ๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“  ๋ฆฌ์ „์—์„œ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „ ๊ตฌ์„ฑ

์ƒˆ ๋ฆฌ์ „์„ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „์— cert-manager๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ธ์ฆ์„œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ CA ๋ฃจํŠธ๋Š” Cassandra ๋ฐ mTLS์šฉ ๊ธฐํƒ€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ตฌ์„ฑ์š”์†Œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— ์ผ๊ด€๋œ ์ธ์ฆ์„œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    1. ์ปจํ…์ŠคํŠธ๋ฅผ ์›๋ž˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      kubectl config use-context ORIGINAL_CLUSTER_NAME
      
    2. ํ˜„์žฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ์„ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

      kubectl get namespace APIGEE_NAMESPACE -o yaml > apigee-namespace.yaml
      
    3. apigee-ca ๋ณด์•ˆ ๋น„๋ฐ€์„ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
      
    4. ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒˆ ๋ฆฌ์ „์˜ ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      kubectl config use-context NEW_CLUSTER_NAME
      
    5. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ์„ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ƒˆ ๋ฆฌ์ „์—์„œ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      kubectl apply -f apigee-namespace.yaml
      
    6. ๋ณด์•ˆ ๋น„๋ฐ€์„ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

      kubectl -n cert-manager apply -f apigee-ca.yaml
      
  3. ๋‹จ๊ณ„์— ๋”ฐ๋ผ ์ƒˆ ๋ฆฌ์ „์— Apigee Hybrid CRD๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  4. ์ด์ œ Helm ์ฐจํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ „ 1์—์„œ์™€ ๊ฐ™์ด ๋‹ค์Œ Helm ์ฐจํŠธ ๋ช…๋ น์–ด๋กœ ์ƒˆ ๋ฆฌ์ „์— Apigee Hybrid๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    helm upgrade operator apigee-operator \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade datastore apigee-datastore \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade telemetry apigee-telemetry \
      --install \
      --namespace APIGEE_NAMESPACE> \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade redis apigee-redis \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ingress-manager apigee-ingress-manager \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ORG_NAME apigee-org \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env mentioned on the overrides
    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set env=ENV_RELEASE_NAME \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env group mentioned on the overrides
    helm upgrade apigee-virtualhost-ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set envgroup=ENV_GROUP_RELEASE_NAME \
      -f overrides-DATACENTER_NAME.yaml
    

    ENV_RELEASE_NAME ๋ฐ ENV_GROUP_RELEASE_NAME์€ apigee-env ๋ฐ apigee-virtualhost ์ฐจํŠธ์˜ ์„ค์น˜ ๋ฐ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. Helm ์ถœ์‹œ ์ด๋ฆ„์€ Apigee Hybrid ์„ค์น˜ ๋‚ด์—์„œ ๊ณ ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ์ด๋ฆ„์ด ๊ณ ์œ ํ•œ ๊ฒฝ์šฐ ENV_NAME๊ณผ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ™˜๊ฒฝ ์ด๋ฆ„๊ณผ ํ™˜๊ฒฝ ๊ทธ๋ฃน ์ด๋ฆ„์ด ๋™์ผํ•œ ๊ฒฝ์šฐ ๊ฐ๊ฐ ๊ณ ์œ ํ•œ Helm ์ถœ์‹œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‘˜ ๋‹ค ์ด๋ฆ„์ด dev์ธ ๊ฒฝ์šฐ dev-env-release ๋ฐ dev-envgroup-release์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    helm list ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ์‹œ ์ด๋ฆ„ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    helm list -n APIGEE_NAMESPACE
    .

  5. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์™€ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๋ชจ๋‘ ์ถœ๋ ฅ์— ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  \
    -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    ๋‹ค์Œ์€ ์„ฑ๊ณต์ ์ธ ์„ค์ •์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

    Datacenter: dc-1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.87.93   68.07 GiB  256     ?     fb51465c-167a-42f7-98c9-b6eba1de34de  c
    UN  10.132.84.94   69.9 GiB   256     ?     f621a5ac-e7ee-48a9-9a14-73d69477c642  b
    UN  10.132.84.105  76.95 GiB  256     ?     0561086f-e95b-4232-ba6c-ad519ff30336  d
    
    Datacenter: dc-2
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.0.8     71.61 GiB  256     ?     8894a98b-8406-45de-99e2-f404ab10b5d6  c
    UN  10.132.9.204   75.1 GiB   256     ?     afa0ffa3-630b-4f1e-b46f-fc3df988092e  a
    UN  10.132.3.133   68.08 GiB  256     ?     25ae39ab-b39e-4d4f-9cb7-de095ab873db  b
  6. ์ƒˆ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ๋ชจ๋“  ํฌ๋“œ์— Cassandra๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ apigeeorg๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
      kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      

      ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      Ex: kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      "rg-hybrid-b7d3b9c"
      
    2. Cassandra ๋ฐ์ดํ„ฐ ๋ณต์ œ ์ปค์Šคํ…€ ๋ฆฌ์†Œ์Šค(YAML) ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์‹œ์—์„œ ํŒŒ์ผ ์ด๋ฆ„์€ datareplication.yaml์ž…๋‹ˆ๋‹ค.

      ํŒŒ์ผ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: REGION_EXPANSION
        namespace: NAMESPACE
      spec:
        organizationRef: APIGEEORG_VALUE
        force: false
        source:
          region: SOURCE_REGION

      ๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      • REGION_EXPANSION์€ ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ง€์ •ํ•  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.
      • NAMESPACE๋Š” overrides.yaml์— ์ œ๊ณต๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ 'apigee'์ž…๋‹ˆ๋‹ค.
      • APIGEEORG_VALUE๋Š” ์ด์ „ ๋‹จ๊ณ„์˜ kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name" ๋ช…๋ น์–ด์—์„œ ์ถœ๋ ฅ๋œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด rg-hybrid-b7d3b9c์ž…๋‹ˆ๋‹ค.
      • SOURCE_REGION์€ ์†Œ์Šค ๋ฆฌ์ „์ด๋ฉฐ ์†Œ์Šค ๋ฆฌ์ „ overrides.yaml์˜ cassandra ์„น์…˜ ์•„๋ž˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๊ฐ’์ž…๋‹ˆ๋‹ค.

      ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: region-expansion
        namespace: apigee
      spec:
        organizationRef: rg-hybrid-b7d3b9c
        force: false
        source:
          region: "dc-1"
    3. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CassandraDataReplication์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
      kubectl apply -f datareplication.yaml
  7. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ๋นŒ๋“œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl -n APIGEE_NAMESPACE get apigeeds -o json | jq ".items[].status.cassandraDataReplication"

    ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
    "state": "complete",
    "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
    "state": "complete",
    "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
    "state": "complete",
    "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
  8. ๋ฐ์ดํ„ฐ ๋ณต์ œ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ํ™•์ธ๋˜๋ฉด ์‹œ๋“œ ํ˜ธ์ŠคํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
    1. overrides-DATACENTER_NAME.yaml์—์„œ multiRegionSeedHost: 10.0.0.11๊ฐ€ ์‚ญ์ œ๋จ
    2. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‹ค์‹œ ์ ์šฉํ•˜์—ฌ Apigee Datastore CR์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides-DATACENTER_NAME.yaml
      
  9. ๋กœ๊ทธ์—์„œ ์žฌ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ nodetool status ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl logs apigee-cassandra-default-0 -f -n APIGEE_NAMESPACE
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    ๋‹ค์Œ ์˜ˆ์‹œ๋Š” ๋กœ๊ทธ ํ•ญ๋ชฉ์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

    INFO  01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens)
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB)
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed

Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ํ™•์ธ

๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ๋‘ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์ด ์„ฑ๊ณตํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” ๋‘ ๋ฆฌ์ „์˜ nodetool ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status


Datacenter: dc-1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
Datacenter: us-west1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.0.4.33   78.69 KiB  256          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

OpenShift

๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ ๊ตฌ์„ฑ

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

  1. ์ฒซ ๋ฒˆ์งธ๋กœ ์ƒ์„ฑ๋œ ๋ฆฌ์ „์— ๋Œ€ํ•ด apigee ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ํฌ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    kubectl get pods -o wide -n APIGEE_NAMESPACE
    
  2. ์ด ๋ฆฌ์ „์—์„œ Cassandra์˜ ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ๋ฅผ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: 10.0.0.11).
  3. ๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „์˜ overrides.yaml ํŒŒ์ผ์„ ์ค€๋น„ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œ๋“œ ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    cassandra:
      multiRegionSeedHost: "SEED_HOST_IP_ADDRESS"
      datacenter: "DATACENTER_NAME"
      rack: "RACK_NAME"
      hostNetwork: false
      clusterName: CLUSTER_NAME

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • SEED_HOST_IP_ADDRESS๋ฅผ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: 10.0.0.11).
    • DATACENTER_NAME์„ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: dc-2).
    • RACK_NAME์„ ๋ž™ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค(์˜ˆ: ra-1).
    • CLUSTER_NAME์„ Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ apigeecluster์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ cassandra.clusterName์˜ ๊ฐ’์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ’์€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“  ๋ฆฌ์ „์—์„œ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „ ๊ตฌ์„ฑ

์ƒˆ ๋ฆฌ์ „์„ ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

  1. ๋‘ ๋ฒˆ์งธ ๋ฆฌ์ „์— cert-manager๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  2. ๊ธฐ์กด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ธ์ฆ์„œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ CA ๋ฃจํŠธ๋Š” Cassandra ๋ฐ mTLS์šฉ ๊ธฐํƒ€ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ตฌ์„ฑ์š”์†Œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํด๋Ÿฌ์Šคํ„ฐ ๊ฐ„์— ์ผ๊ด€๋œ ์ธ์ฆ์„œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    1. ์ปจํ…์ŠคํŠธ๋ฅผ ์›๋ž˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      kubectl config use-context ORIGINAL_CLUSTER_NAME
      
    2. ํ˜„์žฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ์„ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

      kubectl get namespace APIGEE_NAMESPACE -o yaml > apigee-namespace.yaml
      
    3. apigee-ca ๋ณด์•ˆ ๋น„๋ฐ€์„ ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

      kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
      
    4. ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒˆ ๋ฆฌ์ „์˜ ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      kubectl config use-context NEW_CLUSTER_NAME
      
    5. ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ์„ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ƒˆ ๋ฆฌ์ „์—์„œ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      kubectl apply -f apigee-namespace.yaml
      
    6. ๋ณด์•ˆ ๋น„๋ฐ€์„ ์ƒˆ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

      kubectl -n cert-manager apply -f apigee-ca.yaml
      
  3. ๋‹จ๊ณ„์— ๋”ฐ๋ผ ์ƒˆ ๋ฆฌ์ „์— Apigee Hybrid CRD๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  4. ์ด์ œ Helm ์ฐจํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ „ 1์—์„œ์™€ ๊ฐ™์ด ๋‹ค์Œ Helm ์ฐจํŠธ ๋ช…๋ น์–ด๋กœ ์ƒˆ ๋ฆฌ์ „์— Apigee Hybrid๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

    helm upgrade operator apigee-operator \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade datastore apigee-datastore \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade telemetry apigee-telemetry \
      --install \
      --namespace APIGEE_NAMESPACE> \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade redis apigee-redis \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ingress-manager apigee-ingress-manager \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    helm upgrade ORG_NAME apigee-org \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env mentioned on the overrides
    helm upgrade ENV_RELEASE_NAME apigee-env/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set env=ENV_RELEASE_NAME \
      -f overrides-DATACENTER_NAME.yaml
    # repeat the below command for each env group mentioned on the overrides
    helm upgrade apigee-virtualhost-ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      --set envgroup=ENV_GROUP_RELEASE_NAME \
      -f overrides-DATACENTER_NAME.yaml
    

    ENV_RELEASE_NAME ๋ฐ ENV_GROUP_RELEASE_NAME์€ apigee-env ๋ฐ apigee-virtualhost ์ฐจํŠธ์˜ ์„ค์น˜ ๋ฐ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. Helm ์ถœ์‹œ ์ด๋ฆ„์€ Apigee Hybrid ์„ค์น˜ ๋‚ด์—์„œ ๊ณ ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ์ด๋ฆ„์ด ๊ณ ์œ ํ•œ ๊ฒฝ์šฐ ENV_NAME๊ณผ ๋™์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ™˜๊ฒฝ ์ด๋ฆ„๊ณผ ํ™˜๊ฒฝ ๊ทธ๋ฃน ์ด๋ฆ„์ด ๋™์ผํ•œ ๊ฒฝ์šฐ ๊ฐ๊ฐ ๊ณ ์œ ํ•œ Helm ์ถœ์‹œ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‘˜ ๋‹ค ์ด๋ฆ„์ด dev์ธ ๊ฒฝ์šฐ dev-env-release ๋ฐ dev-envgroup-release์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    helm list ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ์‹œ ์ด๋ฆ„ ๋ชฉ๋ก์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    helm list -n APIGEE_NAMESPACE
    .

  5. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์™€ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๋ชจ๋‘ ์ถœ๋ ฅ์— ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  \
    -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    ๋‹ค์Œ์€ ์„ฑ๊ณต์ ์ธ ์„ค์ •์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

    Datacenter: dc-1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.87.93   68.07 GiB  256     ?     fb51465c-167a-42f7-98c9-b6eba1de34de  c
    UN  10.132.84.94   69.9 GiB   256     ?     f621a5ac-e7ee-48a9-9a14-73d69477c642  b
    UN  10.132.84.105  76.95 GiB  256     ?     0561086f-e95b-4232-ba6c-ad519ff30336  d
    
    Datacenter: dc-2
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address        Load       Tokens  Owns  Host ID                               Rack
    UN  10.132.0.8     71.61 GiB  256     ?     8894a98b-8406-45de-99e2-f404ab10b5d6  c
    UN  10.132.9.204   75.1 GiB   256     ?     afa0ffa3-630b-4f1e-b46f-fc3df988092e  a
    UN  10.132.3.133   68.08 GiB  256     ?     25ae39ab-b39e-4d4f-9cb7-de095ab873db  b
  6. ์ƒˆ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ๋ชจ๋“  ํฌ๋“œ์— Cassandra๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
    1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ apigeeorg๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
      kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      

      ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      Ex: kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name"
      "rg-hybrid-b7d3b9c"
      
    2. Cassandra ๋ฐ์ดํ„ฐ ๋ณต์ œ ์ปค์Šคํ…€ ๋ฆฌ์†Œ์Šค(YAML) ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์‹œ์—์„œ ํŒŒ์ผ ์ด๋ฆ„์€ datareplication.yaml์ž…๋‹ˆ๋‹ค.

      ํŒŒ์ผ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: REGION_EXPANSION
        namespace: NAMESPACE
      spec:
        organizationRef: APIGEEORG_VALUE
        force: false
        source:
          region: SOURCE_REGION

      ๊ฐ ํ•ญ๋ชฉ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      • REGION_EXPANSION์€ ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ง€์ •ํ•  ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค.
      • NAMESPACE๋Š” overrides.yaml์— ์ œ๊ณต๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ 'apigee'์ž…๋‹ˆ๋‹ค.
      • APIGEEORG_VALUE๋Š” ์ด์ „ ๋‹จ๊ณ„์˜ kubectl get apigeeorg -n APIGEE_NAMESPACE -o json | jq ".items[].metadata.name" ๋ช…๋ น์–ด์—์„œ ์ถœ๋ ฅ๋œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด rg-hybrid-b7d3b9c์ž…๋‹ˆ๋‹ค.
      • SOURCE_REGION์€ ์†Œ์Šค ๋ฆฌ์ „์ด๋ฉฐ ์†Œ์Šค ๋ฆฌ์ „ overrides.yaml์˜ cassandra ์„น์…˜ ์•„๋ž˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๊ฐ’์ž…๋‹ˆ๋‹ค.

      ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      apiVersion: apigee.cloud.google.com/v1alpha1
      kind: CassandraDataReplication
      metadata:
        name: region-expansion
        namespace: apigee
      spec:
        organizationRef: rg-hybrid-b7d3b9c
        force: false
        source:
          region: "dc-1"
    3. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ CassandraDataReplication์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
      kubectl apply -f datareplication.yaml
  7. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ๋นŒ๋“œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl -n APIGEE_NAMESPACE get apigeeds -o json | jq ".items[].status.cassandraDataReplication"

    ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

    {
    "rebuildDetails": {
    "apigee-cassandra-default-0": {
    "state": "complete",
    "updated": 1623105760
    },
    "apigee-cassandra-default-1": {
    "state": "complete",
    "updated": 1623105765
    },
    "apigee-cassandra-default-2": {
    "state": "complete",
    "updated": 1623105770
    }
    },
    "state": "complete",
    "updated": 1623105770
    }
  8. ๋ฐ์ดํ„ฐ ๋ณต์ œ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ํ™•์ธ๋˜๋ฉด ์‹œ๋“œ ํ˜ธ์ŠคํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
    1. overrides-DATACENTER_NAME.yaml์—์„œ multiRegionSeedHost: 10.0.0.11๊ฐ€ ์‚ญ์ œ๋จ
    2. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‹ค์‹œ ์ ์šฉํ•˜์—ฌ Apigee Datastore CR์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

      helm upgrade datastore apigee-datastore/ \
        --install \
        --namespace APIGEE_NAMESPACE \
        --atomic \
        -f overrides-DATACENTER_NAME.yaml
      
  9. ๋กœ๊ทธ์—์„œ ์žฌ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ nodetool status ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl logs apigee-cassandra-default-0 -f -n APIGEE_NAMESPACE
    kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status

    ๋‹ค์Œ ์˜ˆ์‹œ๋Š” ๋กœ๊ทธ ํ•ญ๋ชฉ์˜ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

    INFO  01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens)
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild
    INFO  01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB)
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36
    INFO  01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB)
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete
    INFO  01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed

Cassandra ํด๋Ÿฌ์Šคํ„ฐ ์ƒํƒœ ํ™•์ธ

๋‹ค์Œ ๋ช…๋ น์–ด๋Š” ๋‘ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ์„ค์ •์ด ์„ฑ๊ณตํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” ๋‘ ๋ฆฌ์ „์˜ nodetool ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

kubectl exec apigee-cassandra-default-0 -n APIGEE_NAMESPACE  -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status


Datacenter: dc-1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.12.1.45  112.09 KiB  256          100.0%            3c98c816-3f4d-48f0-9717-03d0c998637f  ra-1
UN  10.12.4.36  95.27 KiB  256          100.0%            0a36383d-1d9e-41e2-924c-7b62be12d6cc  ra-1
UN  10.12.5.22  88.7 KiB   256          100.0%            3561f4fa-af3d-4ea4-93b2-79ac7e938201  ra-1
Datacenter: us-west1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.0.4.33   78.69 KiB  256          100.0%              a200217d-260b-45cd-b83c-182b27ff4c99  ra-1
UN  10.0.0.21   78.68 KiB  256          100.0%              9f3364b9-a7a1-409c-9356-b7d1d312e52b  ra-1
UN  10.0.1.26   15.46 KiB  256          100.0%              1666df0f-702e-4c5b-8b6e-086d0f2e47fa  ra-1

๋ฌธ์ œ ํ•ด๊ฒฐ

Cassandra ๋ฐ์ดํ„ฐ ๋ณต์ œ ์‹คํŒจ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.