์—ฌ๋Ÿฌ ๋ฆฌ์ „์—์„œ ๋ณต์›

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์—ฌ๋Ÿฌ ๋ฆฌ์ „์—์„œ Cassandra๋ฅผ ๋ณต๊ตฌ ๋˜๋Š” ๋ณต์›ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ๋ฐฐํฌ์—์„œ Apigee Hybrid๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ์—ฌ๋Ÿฌ ์ง€๋ฆฌ์  ์œ„์น˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฆฌ์ „์ด ์‹คํŒจํ–ˆ์ง€๋งŒ ์ •์ƒ ๋ฆฌ์ „์ด ๋‚จ์•„ ์žˆ๋Š” ๊ฒฝ์šฐ ์ •์ƒ ๋ฆฌ์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํŒจํ•œ Cassandra ๋ฆฌ์ „์„ ์ตœ์‹  ๋ฐ์ดํ„ฐ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  Hybrid ๋ฆฌ์ „์— ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Cassandra๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ์— Apigee ์กฐ์ง์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ณต์› ํ”„๋กœ์„ธ์Šค์—์„œ ๋ชจ๋“  ์กฐ์ง์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์›ํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ๋ฉ€ํ‹ฐ ์กฐ์ง ์„ค์ •์—์„œ ํŠน์ • ์กฐ์ง๋งŒ ๋ณต์›ํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ์ฃผ์ œ์—์„œ๋Š” ์‹คํŒจํ•œ ๋ฆฌ์ „์„ ๋ณต๊ตฌํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  • ์‹คํŒจํ•œ ๋ฆฌ์ „ ๋ณต๊ตฌ - ์ •์ƒ ๋ฆฌ์ „์„ ๊ธฐ์ค€์œผ๋กœ ์‹คํŒจํ•œ ๋ฆฌ์ „์„ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ๊ณ„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํŒจํ•œ ๋ฆฌ์ „ ๋ณต์› - ๋ฐฑ์—…์—์„œ ์‹คํŒจํ•œ ๋ฆฌ์ „์„ ๋ณต์›ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ๋ชจ๋“  ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฆฌ์ „์ด ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‹คํŒจํ•œ ๋ฆฌ์ „ ๋ณต๊ตฌ

์ •์ƒ ์ƒํƒœ ๋ฆฌ์ „์—์„œ ์‹คํŒจํ•œ ๋ฆฌ์ „์„ ๋ณต๊ตฌํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ฆฌ์ „์—์„œ ์ •์ƒ ์ž‘๋™ํ•˜๋Š” ๋ฆฌ์ „์œผ๋กœ API ํŠธ๋ž˜ํ”ฝ์„ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค. ์‹คํŒจํ•œ ๋ฆฌ์ „์—์„œ ๋ณ€๊ฒฝ๋œ ํŠธ๋ž˜ํ”ฝ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ์šฉ๋Ÿ‰์„ ๊ณ„ํšํ•ฉ๋‹ˆ๋‹ค.
  2. ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ฆฌ์ „์„ ์‚ฌ์šฉ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ฐ ๋ฆฌ์ „์— ๋Œ€ํ•ด ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฆฌ์ „ ํ•ด์ œ์— ์„ค๋ช…๋œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”. ์‚ฌ์šฉ ์ค‘๋‹จ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ ํ›„ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  3. ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ฆฌ์ „์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. ๋ณต์›ํ•˜๋ ค๋ฉด GKE, GKE On-Prem, AKS์˜ ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ๋ฐฐํฌ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์ƒˆ ๋ฆฌ์ „์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋ฐฑ์—…์—์„œ ๋ณต์›

Cassandra ๋ฐฑ์—…์€ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ Cloud Storage ๋˜๋Š” ์›๊ฒฉ ์„œ๋ฒ„์— ์ €์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—…์—์„œ Cassandra๋ฅผ ๋ณต์›ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ณต์›ํ•  ๋ฆฌ์ „์˜ ์žฌ์ •์˜ ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค.
  2. cassandra:hostNetwork์„ false๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. ์žฌ์ •์˜ ํŒŒ์ผ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    helm upgrade datastore apigee-datastore/ \
      --install \
      --namespace APIGEE_NAMESPACE \
      -f OVERRIDES_FILE
    
  4. ๊ณ„์†ํ•˜๊ธฐ ์ „์— hostNetwork๊ฐ€ false๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl -n APIGEE_NAMESPACE get apigeeds -o=jsonpath='{.items[].spec.components.cassandra.hostNetwork}'
  5. ๋ณต์› ์ค‘์ธ ๋ฆฌ์ „์—์„œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    helm delete DATASTORE_RELEASE_NAME \
      --namespace APIGEE_NAMESPACE
    

    ์—ฌ๊ธฐ์„œ DATASTORE_RELEASE_NAME์€ ๋ฆฌ์ „์— Cassandra๋ฅผ ์„ค์น˜ํ•œ Datastore์˜ ์ถœ์‹œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค(์˜ˆ: datastore-region1).

  6. ๋ฐฑ์—…์—์„œ ์›ํ•˜๋Š” ๋ฆฌ์ „์„ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐฑ์—…์—์„œ ๋ฆฌ์ „ ๋ณต์›์„ ์ฐธ์กฐํ•˜์„ธ์š”.

  7. ์‚ญ์ œ๋œ ๋ฆฌ์ „ ์ฐธ์กฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ  KeySpaces ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ ๋ณต์›๋œ ๋ฆฌ์ „ ์ฐธ์กฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  8. nodetool status ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Cassandra ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    kubectl exec -n APIGEE_NAMESPACE -it apigee-cassandra-default-0 -- bash
          nodetool  -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status |grep -i Datacenter

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

    • APIGEE_JMX_USER๋Š” Cassandra JMX ์ž‘์—… ์‚ฌ์šฉ์ž์˜ ์‚ฌ์šฉ์ž ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. Cassandra JMX ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ธ์ฆํ•˜๊ณ  ํ†ต์‹ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. cassandra:auth:jmx:username์„ ์ฐธ์กฐํ•˜์„ธ์š”.
    • APIGEE_JMX_PASSWORD๋Š” Cassandra JMX ์ž‘์—… ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. cassandra:auth:jmx:password๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  9. KeySpaces ๋ณต์ œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
    1. ํด๋ผ์ด์–ธํŠธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ  CQL ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด Cassandra ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
    2. CQL ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์‚ฌ์šฉ์ž ํ‚ค์ŠคํŽ˜์ด์Šค ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
      cqlsh CASSANDRA_SEED_HOST -u APIGEE_DDL_USER -p APIGEE_DDL_PASSWORD
            --ssl -e "select keyspace_name from system_schema.keyspaces;"|grep -v system

      ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      • CASSANDRA_SEED_HOST๋Š” Cassandra ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์‹œ๋“œ ํ˜ธ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๋ฉ€ํ‹ฐ ๋ฆฌ์ „ ์„ค์น˜์—์„œ๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฆฌ์ „์˜ ํ˜ธ์ŠคํŠธ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ ๋ฆฌ์ „์— Apigee Hybrid ๊ตฌ์„ฑ ๋ฐ cassandra:externalSeedHost๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
      • APIGEE_DDL_USER ๋ฐ APIGEE_DDL_PASSWORD๋Š” Cassandra ๋ฐ์ดํ„ฐ ์ •์˜ ์–ธ์–ด(DDL) ์‚ฌ์šฉ์ž์˜ ๊ด€๋ฆฌ์ž ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 'ddl_user' ๋ฐ 'iloveapis123'์ž…๋‹ˆ๋‹ค.

        ๊ตฌ์„ฑ ์†์„ฑ ์ฐธ์กฐ์˜ cassandra.auth.ddl.password์™€ Apache Cassandra cqlsh ๋ฌธ์„œ์˜ ๋ช…๋ น์ค„ ์˜ต์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.

    3. ํ‚ค์ŠคํŽ˜์ด์Šค๋งˆ๋‹ค CQL ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ณต์ œ ์„ค์ •์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
      ALTER KEYSPACE KEYSPACE_NAME WITH replication = {'class': 'NetworkTopologyStrategy', 'DATACENTER_NAME':3};

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

      • KEYSPACE_NAME์€ ์ด์ „ ๋‹จ๊ณ„ ์ถœ๋ ฅ์— ๋‚˜์—ด๋œ ํ‚ค์ŠคํŽ˜์ด์Šค์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
      • DATACENTER_NAME์€ 8๋‹จ๊ณ„์—์„œ nodetool status ์˜ต์…˜์œผ๋กœ ๊ฐ€์ ธ์˜จ Cassandra ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.