์ด ์ฃผ์ ์์๋ Cassandra๋ฅผ ์ํ ๋ฐ ์์ง์ผ๋ก ํ์ฅํ๋ ๋ฐฉ๋ฒ๊ณผ Cassandra๋ฅผ ์ถ์ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
Cassandra ์ํ ํ์ฅ
Cassandra๋ฅผ ์ํ์ผ๋ก ํ์ฅํ๋ ค๋ฉด
- Cassandra๋ฅผ ํ์ฅํ๊ธฐ ์ ์ ํ์์ ๋ฐ๋ผ
apigee-data
๋ ธ๋ ํ์ ์ถ๊ฐ ์ฉ๋์ด ์๋์ง ํ์ธํฉ๋๋ค. ์ ์ฉ ๋ ธ๋ ํ ๊ตฌ์ฑ๋ ์ฐธ์กฐํ์ธ์. - ์ฌ์ ์ ํ์ผ์์
cassandra.replicaCount
๊ตฌ์ฑ ์์ฑ ๊ฐ์ ์ค์ ํฉ๋๋ค. ์ด ์์ฑ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ตฌ์ฑ ์์ฑ ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ์ธ์. ๋ฐํ์ ์์ญ ๊ตฌ์ฑ์์ ๊ด๋ฆฌ๋ ์ฐธ์กฐํ์ธ์. - ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$APIGEE_HOME/apigeectl apply --datastore -f overrides/overrides.yaml
Cassandra ์์ง ํ์ฅ
์ด ์น์ ์์๋ ๋ ๋์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ์ฌํญ์ ์์ฉํ๊ธฐ ์ํด Cassandra ํฌ๋๋ฅผ ์์ง์ผ๋ก ํ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
๊ฐ์
Apigee Hybrid ํ๋ก๋์ ๋ฐฐํฌ์ ๊ฒฝ์ฐ ์คํ ์ดํธํ ์๋น์ค(Cassandra)์ฉ์ผ๋ก ํ๋, ์คํ ์ดํธ๋ฆฌ์ค(runtime) ์๋น์ค์ฉ์ผ๋ก ํ๋, ์ต์ 2๊ฐ์ ๋ ๋ฆฝ์ ์ธ ๋ ธ๋ ํ์ ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ์์์ ๋ํด์๋ GKE ํ๋ก๋์ ํด๋ฌ์คํฐ ์๊ตฌ์ฌํญ์ ์ฐธ์กฐํ์ธ์.
์คํ ์ดํธํ(Stateful) Cassandra ๋ ธ๋ ํ์ ๊ฒฝ์ฐ 8๊ฐ์ CPU ์ฝ์ด์ 30GB์ ๋ฉ๋ชจ๋ฆฌ๋ก ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ ธ๋ ํ์ด ํ๋ก๋น์ ๋๋๋ฉด ์ด ์ค์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ํ๋ก๋์ ์ ์ํ Cassandra ๊ตฌ์ฑ๋ ์ฐธ์กฐํ์ธ์.
๋ ๋ง์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ์ฌํญ์ ์์ฉํ๊ธฐ ์ํด Cassandra ํฌ๋๋ฅผ ํ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ์ด ์ฃผ์ ์์ ์ค๋ช ๋ ์ ์ฐจ๋ฅผ ๋ฐ๋ฅด์ธ์.
Cassandra ํฌ๋ ํ์ฅ
Cassandra์ ์ฌ์ฉ๋๋ ์คํ ์ดํธํ ๋ ธ๋ ํ์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋ฆฌ๋ ค๋ฉด ๋ค์ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
- Kubernetes ํ๋ซํผ์ ์๋ด์ ๋ฐ๋ผ ํด๋ฌ์คํฐ์ ์ ๋ ธ๋ ํ์ ์ถ๊ฐํฉ๋๋ค. ์ง์๋๋ ํ๋ซํผ์ ์ค์น ์๋ด์ ๋์ด๋์ด ์์ต๋๋ค.
- ์ ๋
ธ๋ ํ์ด ์ค๋น๋์๋์ง ํ์ธํฉ๋๋ค.
kubectl get nodes -l NODE_POOL_LABEL_NAME=NODE_POOL_LABEL_VALUE
๋ช ๋ น์ด ์์:
kubectl get nodes -l cloud.google.com/gke-nodepool=apigee-data-new
๊ฒฐ๊ณผ ์์:
NAME STATUS ROLES AGE VERSION gke-apigee-data-new-441387c2-2h5n Ready <none> 4m28s v1.14.10-gke.17 gke-apigee-data-new-441387c2-6941 Ready <none> 4m28s v1.14.10-gke.17 gke-apigee-data-new-441387c2-nhgc Ready <none> 4m29s v1.14.10-gke.17
- Cassandra์ ์ ๋
ธ๋ ํ์ ์ฌ์ฉํ๋๋ก ์ฌ์ ์ ํ์ผ์ ์
๋ฐ์ดํธํ๊ณ ์ฌ์ฉํ๋ ค๋ CPU ์์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ํฌ๋ ๋ฆฌ์์ค์ ์
๋ฐ์ดํธํฉ๋๋ค. ์๋ฅผ ๋ค์ด GKE ํด๋ฌ์คํฐ์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๋น์ทํ ๊ตฌ์ฑ์ ์ฌ์ฉํฉ๋๋ค.
๋ค๋ฅธ Kubernetes ํ๋ซํผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด์ ๋ฐ๋ผ
apigeeData.key
๊ฐ์ ์กฐ์ ํด์ผ ํฉ๋๋ค.nodeSelector: requiredForScheduling: true apigeeData: key: "NODE_POOL_LABEL_NAME" value: "NODE_POOL_LABEL_VALUE" cassandra: resources: requests: cpu: NODE_POOL_CPU_NUMBER memory: NODE_POOL_MEMORY_SIZE
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
nodeSelector: requiredForScheduling: true apigeeData: key: "cloud.google.com/gke-nodepool" value: "apigee-data-new" cassandra: resources: requests: cpu: 14 memory: 16Gi
- ํด๋ฌ์คํฐ์ ์ฌ์ ์ ํ์ผ์ ์ ์ฉํฉ๋๋ค.
$APIGEECTL_HOME/apigeectl apply -f ./overrides/overrides.yaml --datastore
์ด ๋จ๊ณ๋ฅผ ์๋ฃํ๋ฉด Cassandra pod๊ฐ ์ ๋ ธ๋ ํ๋ก ๋กค๋ง๋ฉ๋๋ค.
Cassandra ์ถ์
Apigee Hybrid๋ Cassandra ๋ ธ๋์ ๋ง์ StatefulSet๋ก ์ฌ์ฉํฉ๋๋ค. Cassandra๋ ๋ฐํ์ ์์ญ์ ํน์ Apigee ํญ๋ชฉ์ ์๊ตฌ ์คํ ๋ฆฌ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค. Cassandra์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ฐํ์ ์์ญ ์ ๋ณด๋ฅผ ์ฐธ์กฐํ์ธ์.
Cassandra๋ ๋ฆฌ์์ค ์ง์ฝ์ ์ธ ์๋น์ค์ด๋ฏ๋ก ๋ค๋ฅธ ํ์ด๋ธ๋ฆฌ๋ ์๋น์ค๊ฐ ์๋ ํฌ๋์ ๋ฐฐํฌํด์๋ ์ ๋ฉ๋๋ค. ๋ก๋์ ๋ฐ๋ผ ๋ง์ Cassandra ๋ ธ๋ ์๋ฅผ ํด๋ฌ์คํฐ์ ์ถ์ํ๊ณ ์ ํ ์ ์์ต๋๋ค.
Cassandra ๋ง์ ์ถ์ํ๋ ์ผ๋ฐ์ ์ธ ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Cassandra ํด๋ฌ์คํฐ๊ฐ ์ ์ ์ํ์ธ์ง ํ์ธํ๊ณ ์ถ์ํ๊ธฐ์ ์ถฉ๋ถํ ์คํ ๋ฆฌ์ง๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
overrides.yaml
์cassandra.replicaCount
์์ฑ์ ์ ๋ฐ์ดํธํ์ธ์.- ๊ตฌ์ฑ ์ ๋ฐ์ดํธ๋ฅผ ์ ์ฉํ์ธ์.
- ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ๋ฐ๋ผ ์๊ตฌ ๋ณผ๋ฅจ ์ ์ฒญ ๋๋ ๋ณผ๋ฅจ์ ์ญ์ ํฉ๋๋ค.
์์ ๋์ด์ผ ํ ์ฌํญ
- ์ฌ์ฉ ์ค๋จํ ๋ ธ๋ ์ด์ธ์ ๋ ธ๋๊ฐ ๋น์ ์์ธ ๊ฒฝ์ฐ ๊ณ์ ์งํํ์ง ๋ง์ธ์. Kubernetes๋ ํด๋ฌ์คํฐ์์ ํฌ๋๋ฅผ ์ถ์ํ ์ ์์ต๋๋ค.
- ํญ์ ๋ ธ๋ 3๊ฐ์ ๋ฐฐ์๋ก ํ์ฅ ๋๋ ์ถ์๋ฉ๋๋ค.
Cassandra ์ถ์
- ๋ค์ ์์์ ๊ฐ์ด ํด๋ฌ์คํฐ๊ฐ ์ ์์ด๊ณ ๋ชจ๋ ๋
ธ๋๊ฐ ์คํ ์ค์ธ์ง ํ์ธํฉ๋๋ค.
kubectl get pods -n yourNamespace -l app=apigee-cassandra NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 2h apigee-cassandra-default-1 1/1 Running 0 2h apigee-cassandra-default-2 1/1 Running 0 2h apigee-cassandra-default-3 1/1 Running 0 16m apigee-cassandra-default-4 1/1 Running 0 14m apigee-cassandra-default-5 1/1 Running 0 13m apigee-cassandra-default-6 1/1 Running 0 9m apigee-cassandra-default-7 1/1 Running 0 9m apigee-cassandra-default-8 1/1 Running 0 8m
kubectl -n yourNamespace exec -it apigee-cassandra-default-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 705.55 KiB 256 51.6% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 to UN 10.16.11.11 674.36 KiB 256 48.3% c7906366-6c98-4ff6-a4fd-17c596c33cf7 ra-1 UN 10.16.1.11 697.03 KiB 256 49.8% ddf221aa-80aa-497d-b73f-67e576ff1a23 ra-1 UN 10.16.5.13 703.64 KiB 256 50.9% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1 UN 10.16.8.15 700.42 KiB 256 50.6% a27f93af-f8a0-4c88-839f-2d653596efc2 ra-1 UN 10.16.11.3 697.03 KiB 256 49.8% dad221ff-dad1-de33-2cd3-f1.672367e6f ra-1 UN 10.16.14.16 704.04 KiB 256 50.9% 1feed042-a4b6-24ab-49a1-24d4cef95473 ra-1 UN 10.16.16.1 699.82 KiB 256 50.6% beef93af-fee0-8e9d-8bbf-efc22d653596 ra-1
- Cassandra ํด๋ฌ์คํฐ์ ์ถ์๋ฅผ ์งํํ ์ถฉ๋ถํ ์คํ ๋ฆฌ์ง๊ฐ ์๋์ง ํ์
ํฉ๋๋ค. ์ถ์ ํ Cassandra ๋
ธ๋๋ ์ด ์คํ ๋ฆฌ์ง์ 75% ์ดํ์ฌ์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ํด๋ฌ์คํฐ์ 6๊ฐ์ Cassandra ๋ ธ๋๊ฐ ์๊ณ ์ด ๋ ธ๋ ์ฉ๋์ด 50% ์ ๋์ธ ๊ฒฝ์ฐ, ๋ ธ๋๋ฅผ 3๊ฐ๋ก ์ถ์ํ๋ฉด ์ฉ๋์ด 100%๊ฐ ๋์ด ์์ ์ ๊ณ์ํ ์ฌ์ ๊ณต๊ฐ์ด ์๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ 9๊ฐ์ Cassandra ๋ ธ๋๊ฐ ์๊ณ ์ด ๋ ธ๋ ์ฉ๋์ด 50% ์ ๋์ธ ๊ฒฝ์ฐ, ๋ ธ๋๋ฅผ 6๊ฐ๋ก ์ถ์ํ๋ฉด ๋๋จธ์ง ๊ฐ ๋ ธ๋์ ์ฉ๋์ด ์ฝ 75%๊ฐ ๋๋ฏ๋ก ์ถ์ํ ์ ์์ต๋๋ค.
overrides.yaml
ํ์ผ์์cassandra.replicaCount
์์ฑ์ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ์ถ๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ์ฌ ๋ ธ๋ ์๊ฐ 9๋ฉด 6์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค.cassandra: replicaCount: 6 #
- ํด๋ฌ์คํฐ์ ๊ตฌ์ฑ ๋ณ๊ฒฝ์ ์ ์ฉํฉ๋๋ค.
./apigeectl apply --datastore -f overrides/override.yaml
namespace/apigee unchanged secret/ssl-cassandra unchanged storageclass.storage.k8s.io/apigee-gcepd unchanged service/apigee-cassandra unchanged statefulset.apps/apigee-cassandra configured
- ๋จ์์๋ ๋ชจ๋ Cassandra ๋
ธ๋๊ฐ ์คํ ์ค์ธ์ง ํ์ธํฉ๋๋ค.
kubectl get pods -n yourNamespace -l app=apigee-cassandra NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 3h apigee-cassandra-default-1 1/1 Running 0 3h apigee-cassandra-default-2 1/1 Running 0 2h apigee-cassandra-default-3 1/1 Running 0 25m apigee-cassandra-default-4 1/1 Running 0 24m apigee-cassandra-default-5 1/1 Running 0 23m
cassandra.replicaCount
๊ฐ์ดnodetool status
๋ช ๋ น์ด๊ฐ ๋ฐํํ๋ ๋ ธ๋ ์์ ์ผ์นํ๋์ง ํ์ธํฉ๋๋ค.์๋ฅผ ๋ค์ด Cassandra๋ฅผ 6๊ฐ์ ๋ ธ๋๋ก ์ถ์ํ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u JMX_user -pw JMX_password 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 1009.17 KiB 256 73.8% b02089d1-0521-42e1-bbed-900656a58b68 ra-1 UN 10.16.4.6 1.65.55 KiB 256 75.6% dc6b7faf-6866-4044-9ac9-1269ebd85dab ra-1 to UN 10.16.11.11 999.36 KiB 256 72.8% c7906366-6c98-4ff6-a4fd-17c596c33cf7 ra-1 UN 10.16.1.11 1017.03 KiB 256 74.2% ddf221aa-80aa-497d-b73f-67e576ff1a23 ra-1 UN 10.16.5.13 1061.64 KiB 256 75.9% 2f01ac42-4b6a-4f9e-a4eb-4734c24def95 ra-1 UN 10.16.8.15 1049.42 KiB 256 74.9% a27f93af-f8a0-4c88-839f-2d653596efc2 ra-1
- Cassandra ํด๋ฌ์คํฐ๊ฐ ์ถ์๋ ํ pvcs(PersistentVolumeClaim)๊ฐ ๋๋จธ์ง Cassandra ๋
ธ๋์ ํด๋นํ๋์ง ํ์ธํฉ๋๋ค.
pvc์ ์ด๋ฆ์ ๊ฐ์ ธ์ต๋๋ค.
kubectl get pvc -n yourNamespace NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE cassandra-data-apigee-cassandra-default-0 Bound pvc-f9c2a5b9-818c-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-1 Bound pvc-2956cb78-818d-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-2 Bound pvc-79de5407-8190-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 7h cassandra-data-apigee-cassandra-default-3 Bound pvc-d29ba265-81a2-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h cassandra-data-apigee-cassandra-default-4 Bound pvc-0675a0ff-81a3-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h cassandra-data-apigee-cassandra-default-5 Bound pvc-354afa95-81a3-11e9-8862-42010a8e014a 100Gi RWO apigee-gcepd 5h
์ด ์์์์๋ ์ถ์๋ ์ธ ๊ฐ์ ๋ ธ๋์ ํด๋นํ๋ pvcs๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
cassandra-data-apigee-cassandra-8
cassandra-data-apigee-cassandra-7
cassandra-data-apigee-cassandra-6