Cassandra ์ถ•์†Œ

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

Cassandra๋Š” ๋ฆฌ์†Œ์Šค ์ง‘์•ฝ์ ์ธ ์„œ๋น„์Šค์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์„œ๋น„์Šค๊ฐ€ ์žˆ๋Š” ํฌ๋“œ์— ๋ฐฐํฌํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋กœ๋“œ์— ๋”ฐ๋ผ ๋ง์˜ Cassandra ๋…ธ๋“œ ์ˆ˜๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์ถ•์†Œํ•˜๊ณ ์ž ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cassandra ๋ง์„ ์ถ•์†Œํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. Cassandra ๋…ธ๋“œ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉ ์ค‘๋‹จํ•˜์„ธ์š”.
  2. overrides.yaml์˜ cassandra.replicaCount ์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”.
  3. ๊ตฌ์„ฑ ์—…๋ฐ์ดํŠธ๋ฅผ ์ ์šฉํ•˜์„ธ์š”.
  4. ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๋งˆ๋‹ค ์ด ๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
  5. ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ์˜๊ตฌ ๋ณผ๋ฅจ ์‹ ์ฒญ ๋˜๋Š” ๋ณผ๋ฅจ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์•Œ์•„๋‘์–ด์•ผ ํ•  ์‚ฌํ•ญ

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

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

๋ง์—์„œ Cassandra ๋…ธ๋“œ ์ˆ˜๋ฅผ ์ถ•์†Œํ•˜๊ธฐ ์ „์— ๋‹ค์Œ ์˜ˆ์‹œ์™€ ๊ฐ™์ด ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ •์ƒ ์ƒํƒœ์ด๊ณ  ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 kubectl get pods -n yourNamespace -l app=apigee-cassandra
NAME                 READY   STATUS    RESTARTS   AGE
apigee-cassandra-0   1/1     Running   0          2h
apigee-cassandra-1   1/1     Running   0          2h
apigee-cassandra-2   1/1     Running   0          2h
apigee-cassandra-3   1/1     Running   0          16m
apigee-cassandra-4   1/1     Running   0          14m
apigee-cassandra-5   1/1     Running   0          13m
kubectl -n yourNamespace exec -it apigee-cassandra-0 nodetool status
Datacenter: us-east1
====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address      Load       Tokens       Owns (effective)  Host ID                               Rack
UN  10.16.2.6    690.17 KiB  256          48.8%             b02089d1-0521-42e1-bbed-900656a58b68  ra-1
UN  10.16.4.6    700.55 KiB  256          51.6%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1 to
UN  10.16.11.11  144.36 KiB  256          48.3%             c7906366-6c98-4ff6-a4fd-17c596c33cf7  ra-1
UN  10.16.1.11   767.03 KiB  256          49.8%             ddf221aa-80aa-497d-b73f-67e576ff1a23  ra-1
UN  10.16.5.13   193.64 KiB  256          50.9%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
UN  10.16.8.15   132.42 KiB  256          50.6%             a27f93af-f8a0-4c88-839f-2d653596efc2  ra-1

Cassandra ๋…ธ๋“œ ์‚ฌ์šฉ ์ค‘๋‹จ

  1. nodetool ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Cassandra ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.
    kubectl -n yourNamespace exec -it nodeName nodetool decommission

    ์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๋ช…๋ น์–ด๋Š” ์ด๋ฆ„์—์„œ ์ˆซ์ž ๊ฐ’์ด ๊ฐ€์žฅ ๋†’์€ ๋…ธ๋“œ apigee-cassandra-5๋ฅผ ์‚ฌ์šฉ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

    kubectl -n apigee exec -it apigee-cassandra-5 nodetool decommission
  2. ์‚ฌ์šฉ ์ค‘๋‹จ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์— ๋…ธ๋“œ๊ฐ€ ํ•œ ๊ฐœ ์ค„์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    kubectl -n yourNamespace exec -it nodeName nodetool status
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.16.2.6   710.37 KiB  256          59.0%             b02089d1-0521-42e1-bbed-900656a58b68  ra-1
    UN  10.16.4.6   720.97 KiB  256          61.3%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1
    UN  10.16.1.11  777.11 KiB  256          58.9%             ddf221aa-80aa-497d-b73f-67e576ff1a23  ra-1
    UN  10.16.5.13  209.23 KiB  256          62.2%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
    UN  10.16.8.15  143.23 KiB  256          58.6%             a27f93af-f8a0-4c88-839f-2d653596efc2  ra-1
    
  3. overrides.yaml ํŒŒ์ผ์—์„œ cassandra.replicaCount ์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ˜„์žฌ ๋…ธ๋“œ ์ˆ˜๊ฐ€ 6์ด๋ฉด 5๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
    cassandra:
      replicaCount: 5 # (n-1)
  4. ํด๋Ÿฌ์Šคํ„ฐ์— ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    ./apigeectl apply -v beta2 -c cassandra
    namespace/apigee unchanged
    secret/ssl-cassandra unchanged
    storageclass.storage.k8s.io/apigee-gcepd unchanged
    service/apigee-cassandra unchanged
    statefulset.apps/apigee-cassandra configured
  5. ๋‚จ์•„์žˆ๋Š” ๋ชจ๋“  Cassandra ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl get pods -n yourNamespace -l app=apigee-cassandra
    NAME                 READY   STATUS    RESTARTS   AGE
    apigee-cassandra-0   1/1     Running   0          3h
    apigee-cassandra-1   1/1     Running   0          3h
    apigee-cassandra-2   1/1     Running   0          2h
    apigee-cassandra-3   1/1     Running   0          25m
    apigee-cassandra-4   1/1     Running   0          24m
    
    
  6. ์‚ฌ์šฉ ์ค‘๋‹จํ•˜๋ ค๋Š” ๋…ธ๋“œ๋งˆ๋‹ค 1~5๋‹จ๊ณ„๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
  7. ๋…ธ๋“œ ํ•ด์ œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด cassandra.replicaCount ๊ฐ’์ด nodetool status ๋ช…๋ น์–ด์—์„œ ๋ฐ˜ํ™˜๋œ ๋…ธ๋“œ ์ˆ˜์™€ ๋™์ผํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    kubectl -n yourNamespace exec -it apigee-cassandra-0 nodetool status
    Datacenter: us-east1
    ====================
    Status=Up/Down
    |/ State=Normal/Leaving/Joining/Moving
    --  Address     Load       Tokens       Owns (effective)  Host ID                               Rack
    UN  10.16.2.6   710.37 KiB  256          59.0%             b02089d1-0521-42e1-bbed-900656a58b68  ra-1
    UN  10.16.4.6   720.97 KiB  256          61.3%             dc6b7faf-6866-4044-9ac9-1269ebd85dab  ra-1
    UN  10.16.1.11  777.11 KiB  256          58.9%             ddf221aa-80aa-497d-b73f-67e576ff1a23  ra-1
    UN  10.16.5.13  209.23 KiB  256          62.2%             2f01ac42-4b6a-4f9e-a4eb-4734c24def95  ra-1
    UN  10.16.8.15  143.23 KiB  256          58.6%             a27f93af-f8a0-4c88-839f-2d653596efc2  ra-1
    
    
  8. Cassandra ํด๋Ÿฌ์Šคํ„ฐ ํฌ๊ธฐ๋ฅผ ์ค„์ธ ํ›„์—๋Š” pvc(PersistentVolumeClaim)๋ฅผ ์‚ญ์ œํ•˜์—ฌ ๋‹ค์Œ ํ™•์žฅ ์ด๋ฒคํŠธ๊ฐ€ ๋™์ผํ•œ ์˜๊ตฌ ๋ณผ๋ฅจ๊ณผ ์ด์ „์— ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    kubectl get pvc -n yourNamespace
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    cassandra-data-apigee-cassandra-0   Bound    pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-1   Bound    pvc-2956cb78-818d-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-2   Bound    pvc-79de5407-8190-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-3   Bound    pvc-d29ba265-81a2-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
    cassandra-data-apigee-cassandra-4   Bound    pvc-0675a0ff-81a3-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
    cassandra-data-apigee-cassandra-5   Bound    pvc-354afa95-81a3-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
    kubectl -n yourNamespace delete pvc cassandra-data-apigee-cassandra-5
    persistentvolumeclaim "cassandra-data-apigee-cassandra-5" deleted
    kubectl get pvc -n yourNamespace
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    cassandra-data-apigee-cassandra-0   Bound    pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-1   Bound    pvc-2956cb78-818d-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-2   Bound    pvc-79de5407-8190-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   7h
    cassandra-data-apigee-cassandra-3   Bound    pvc-d29ba265-81a2-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
    cassandra-data-apigee-cassandra-4   Bound    pvc-0675a0ff-81a3-11e9-8862-42010a8e014a   100Gi      RWO            apigee-gcepd   5h
  9. Anthos ์„ค์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Anthos Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์—์„œ๋„ ์˜๊ตฌ ๋ณผ๋ฅจ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
    kubectl get pv -n youNamespace
    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                      STORAGECLASS   REASON   AGE
    pvc-0675a0ff-81a3-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-4   apigee-gcepd            5h
    pvc-2956cb78-818d-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-1   apigee-gcepd            7h
    pvc-354afa95-81a3-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-5   apigee-gcepd            5h
    pvc-79de5407-8190-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-2   apigee-gcepd            7h
    pvc-d29ba265-81a2-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-3   apigee-gcepd            5h
    pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a   100Gi      RWO            Delete           Bound    apigee/cassandra-data-apigee-cassandra-0   apigee-gcepd            7h
    kubectl -n yourNamespace delete pv pvc-354afa95-81a3-11e9-8862-42010a8e014a