์ด ์ฃผ์ ์์๋ Apigee Hybrid ํ๋ก๋์ ์ค์น๋ฅผ ์ํด Cassandra ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์ฑ์์๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ํ์ํ ๋จ๊ณ์ ๊ถ์ฅ ๋จ๊ณ๋ฅผ ์ค๋ช ํฉ๋๋ค.
ํ์ ๊ตฌ์ฑ
๋ค์ ๊ตฌ์ฑ์ด ํ์ํฉ๋๋ค.
๊ณ ๊ฐ์ฉ์ฑ ๋ณด์ฅ
Cassandra ํด๋ฌ์คํฐ์๋ ํ๋ก๋์ ํ๊ฒฝ์์ ๊ฐ์ฉ์ฑ์ ์ ์งํ๊ธฐ ์ํด 3๊ฐ์ ๊ฐ์ฉ์ฑ ์์ญ์ด ํ์ํฉ๋๋ค. ํ ์์ญ์ด ๋ค์ด๋๋ฉด ์์ญ์ด ์จ๋ผ์ธ ์ํ๋ก ์ ํ๋๋ ๋์ ๋๋จธ์ง ์์ญ์ด ์์ฒญ์ ๊ณ์ ์๋ตํฉ๋๋ค. ์์ญ 2๊ฐ ์ด์์ด ์๋ ์ค๋จ๋๋ฉด Cassandra๋ ์ต์ 2๊ฐ ์ด์์ ์์ญ์ด ์จ๋ผ์ธ ์ํ๊ฐ ๋ ๋๊น์ง ์์ฒญ์ ์๋ตํ ์ ์์ต๋๋ค. Apigee์์๋ ๋ฐ์ดํฐ ์ ๋ฐ์ดํธ๊ฐ ๋๋ฝ๋ ์ํ์ ์ต์ํํ๊ธฐ ์ํด 3์๊ฐ ์ด๋ด์ ์์ญ์ ๋ค์ ์จ๋ผ์ธ์ผ๋ก ์ ํํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.
Cassandra ์คํ ๋ฆฌ์ง ์ค์ ๊ตฌ์ฑ
Apigee Hybrid ํ๋ก๋์ ์ ๊ฒฝ์ฐ Google์์๋ ์ฌ์ ์ ํ์ผ์ ๋ค์ ์คํ ๋ฆฌ์ง ๋ฐ ํ ์ค์ ์ ์ถ๊ฐํ๊ณ ์ด๋ฅผ ํด๋ฌ์คํฐ์ ์ ์ฉํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
cassandra: ... replicaCount: 3 storage: storageclass: your-preferred-ssd-storage #If not using default storage for your cluster capacity: 500Gi resources: requests: cpu: 7 memory: 15Gi maxHeapSize: 8192M heapNewSize: 1200M
๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ Cassandra์ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฉํฉ๋๋ค.
helm upgrade datastore apigee-datastore/ \ --namespace apigee \ --atomic \ -f OVERRIDES_FILE.yaml
replicaCount
replicaCount
๊ฐ์ 3
์ ๋ฐฐ์์ฌ์ผ ํฉ๋๋ค. ์ํ๋ replicaCount
๊ฐ์ ํ์ธํ๋ ค๋ฉด ๋ค์์ ๊ณ ๋ คํ์ธ์.
- ํ๋ก์์ ๋ํ ํธ๋ํฝ ์์๋ฅผ ์์ํฉ๋๋ค.
- ๋ถํ ํ ์คํธ๋ฅผ ์ํํ๊ณ CPU ์ฌ์ฉ๋ฅ ์ ํฉ๋ฆฌ์ ์ผ๋ก ์์ธกํฉ๋๋ค.
- ๋ฆฌ์ ๋ง๋ค ๋ค๋ฅธ
replicaCount
๊ฐ์ ์ง์ ํ ์ ์์ต๋๋ค. - ํฅํ ์ฌ์ ์ ํ์ผ์์
replicaCount
๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
storageclass
ํ๋ก๋์
์ ๊ฒฝ์ฐ Cassandra ์คํ ๋ฆฌ์ง๋ SSD StorageClass์ฌ์ผ ํฉ๋๋ค. ํด๋ฌ์คํฐ์ ๊ธฐ๋ณธ Kubernetes StorageClass๋ฅผ ์ฌ์ฉ ์ค์ด ์๋๋ฉด storageclass
์ ๊ฐ์ ์ค์ ํฉ๋๋ค. ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ StorageClass๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
kubectl get storageclass
๋ค์๊ณผ ๋น์ทํ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE premium-rwo pd.csi.storage.gke.io Delete WaitForFirstConsumer true 6d23h standard kubernetes.io/gce-pd Delete Immediate true 6d23h standard-rwo (default) pd.csi.storage.gke.io Delete WaitForFirstConsumer true 6d23h
๊ธฐ๋ณธ Kubernetes StorageClass๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด StorageClass ๊ตฌ์ฑ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
ํ์ฌ storageclass
์ค์ ์ ํ์ธํ๋ ค๋ฉด ํด๋ฌ์คํฐ์์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl get pvc -n NAMESPACE cassandra-data-apigee-cassandra-default-0 -o=jsonpath="{['.spec.storageClassName', '.metadata.annotations.volume\.beta\.kubernetes\.io/storage-class']}"
storageSize
ํ๋ก๋์ ์ค์น์ ๊ฒฝ์ฐ Google์์๋ 500Gi(๊ธฐ๋น๋ฐ์ดํธ) ์ด์์ ์คํ ๋ฆฌ์ง ํฌ๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค. ํด๋ฌ์คํฐ์ ์คํ ๋ฆฌ์ง ์๊ตฌ์ ๋ง๊ฒ ์คํ ๋ฆฌ์ง ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์คํ ๋ฆฌ์ง ์ฉ๋์ ๋ณ๊ฒฝํ๋ ค๋ฉด Cassandra ์๊ตฌ ๋ณผ๋ฅจ ํ์ฅ์ ์ฐธ์กฐํ์ธ์.
ํ์ฌ ์ฉ๋ ์ค์ ์ ํ์ธํ๋ ค๋ฉด ํด๋ฌ์คํฐ์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl get pvc -n NAMESPACE cassandra-data-apigee-cassandra-default-0 -o=jsonpath='{.spec.resources.requests.storage}'
cpu
๋ฐ memory
ํ๋ก๋์
์ค์น์ ๊ฒฝ์ฐ Google์์๋ ํฌ๋๋น ์ต์ 7๊ฐ์ CPU์ ์ต์ 15Gi(๊ธฐ๋น๋ฐ์ดํธ)๋ฅผ ๊ถ์ฅํฉ๋๋ค. cassandra.resources.requests.cpu
๋ฐ cassandra.resources.requests.memory
๋ฅผ ์ง์ ํ ๋๋ ํธ๋ํฝ ๋ณผ๋ฅจ ๋ฐ ํ๋ก์์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ๋ฅผ ๊ณ ๋ คํฉ๋๋ค.
ํ์ฌ CPU ์ค์ ์ ํ์ธํ๋ ค๋ฉด ํด๋ฌ์คํฐ์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl get pods -n NAMESPACE apigee-cassandra-default-0 -o=jsonpath='{.spec.containers[].resources.requests.cpu}'
ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ค์ ์ ํ์ธํ๋ ค๋ฉด ํด๋ฌ์คํฐ์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl get pods -n NAMESPACE apigee-cassandra-default-0 -o=jsonpath='{.spec.containers[].resources.requests.memory}'
maxHeapSize
, heapNewSize
์ด๋ฌํ ์์ฑ์ cassandra ํ๋ก์ธ์ค์ ํ ๋น๋ ์ต๋ ๋ฉ๋ชจ๋ฆฌ ํ๊ณผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฆ๊ฐํ๋ ์์ ๊ฐ๊ฐ ๋ฉ๊ฐ๋ฐ์ดํธ ๋จ์๋ก ๊ฒฐ์ ํฉ๋๋ค(ํ ํฌ๊ธฐ๋ ๋ฉ๋น๋ฐ์ดํธ๊ฐ ์๋ ๋ฉ๊ฐ๋ฐ์ดํธ๋ก ์ง์ ). ํ๋ก๋์ ํ๊ฒฝ์ ๊ฒฝ์ฐ Google์ ๋ค์ ๊ฐ์ ๊ถ์ฅํฉ๋๋ค.
maxHeapSize: 8192M
heapNewSize: 1200M
์ต์ ํ ํฌ๊ธฐ ๊ฐ์ Kubernetes ํ๋ซํผ ๊ณต๊ธ์ ์ฒด์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ์ฌ maxHeapSize
์ค์ ์ ํ์ธํ๋ ค๋ฉด ํด๋ฌ์คํฐ์์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl get sts -n NAMESPACE apigee-cassandra-default -o=jsonpath='{.spec.template.spec.containers[].env[?(@.name=="MAX_HEAP_SIZE")]}'
ํ์ฌ heapNewSize
์ค์ ์ ํ์ธํ๋ ค๋ฉด ํด๋ฌ์คํฐ์์ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl get sts -n NAMESPACE apigee-cassandra-default -o=jsonpath='{.spec.template.spec.containers[].env[?(@.name=="HEAP_NEWSIZE")]}'
์ด๋ฌํ ์์ฑ ์ค์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ตฌ์ฑ ์์ฑ ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
ํ๋ก๋์ ๋ฐฐํฌ๋ฅผ ์ํ SSD ์คํ ๋ฆฌ์ง ์ฌ์ฉ
Cassandra ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒฝ์ฐ ํ์ด๋ธ๋ฆฌ๋ ๋ฐํ์์ ๋์ ์ผ๋ก ์์ฑ๋ ์๊ตฌ ๋ณผ๋ฅจ๋ง ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ก์ปฌ ์๋ฆฌ๋ ์คํ ์ดํธ ๋์คํฌ(SSD) ๋๋ผ์ด๋ธ๋ ์ง์๋์ง ์์ต๋๋ค.
ํ์ฌ Cassandra์ฉ์ผ๋ก SSD๋ฅผ ๊ตฌ์ฑํ์ง ์์์ผ๋ฉด ์๋ฆฌ๋ ์คํ ์ดํธ ๋๋ผ์ด๋ธ(SSD)๋ก ์ง์๋๋ StorageClass ์ ์๋ฅผ ๊ตฌ์ฑํ๊ณ ์ด๋ฅผ ๊ธฐ๋ณธ ํด๋์ค๋ก ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์์ธํ ๋จ๊ณ๋ StorageClass ๊ตฌ์ฑ์ ์ฐธ์กฐํ์ธ์.
๊ธฐ๋ณธ Kubernetes StorageClass๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด StorageClass ๊ตฌ์ฑ ์๋ด๋ฅผ ๋ฐ๋ฅด์ธ์.
์ถ์ฒ ๊ตฌ์ฑ
์ด ์น์ ์์๋ Cassandra์ ๊ถ์ฅ ๊ตฌ์ฑ์ ์ค๋ช ํฉ๋๋ค.
์ผ์ผ ๋ฐฑ์ ์ผ์ ๊ตฌ์ฑ
์๋ชป๋ ๊ตฌ์ฑ์ผ๋ก ์ธํด ๋ฉํฐ ๋ฆฌ์ Cassandra ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ Google์์ ๋ฐํ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ํ ์ ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ ์๊ตฌ์ ์ผ๋ก ์์ค๋ฉ๋๋ค.
๋ฐ์ดํฐ ์์ค์ ๋ฐฉ์งํ๋ ค๋ฉด ์ผ์ผ ๋ฐฑ์ ์ผ์ ์ ๊ตฌ์ฑํ์ธ์. ๋ฐฑ์ ํฌ๊ธฐ์ ๋น๋๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๋ฐฑ์ ํ์ดํ๋ผ์ธ์ด ์คํจํ ๋ ์๋ฆผ์ ๋ฐ๋๋ก ํฉ๋๋ค.
Cassandra ์ต์ ํด๋ฌ์คํฐ ์๊ตฌ์ฌํญ ์ค์
Cassandra์ ๊ฒฝ์ฐ ์ต์ ํด๋ฌ์คํฐ ๊ตฌ์ฑ์ ๋ฐ๋ฅด์ธ์.
๋ชจ๋ ๊ณ ๊ฐ ๋์ ํ๊ฒฝ์ ํ๋ก๋์ ์ผ๋ก ์ทจ๊ธ
ํ์ด๋ธ๋ฆฌ๋ ์ค์น๊ฐ '๋นํ๋ก๋์ '์ผ๋ก ๊ฐ์ฃผ๋๋๋ผ๋ ํ๋ก๋์ ๋ ๋ ์ค์ ์ด ํ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์ ์๋ฝ ํ ์คํธ(UAT) ์ค์น์ ์๋น์ค ์ค๋จ์ ์ฐ์ ์์๊ฐ ๋์ ์ฌ๊ณ ๋ฅผ ํธ๋ฆฌ๊ฑฐํด์ผ ํฉ๋๋ค.
'๋นํ๋ก๋์
' ๊ณ ๊ฐ ๋์ ํ์ด๋ธ๋ฆฌ๋ ์ค์น์๋ ํ๋ก๋์
๋ ๋ ์ค์ ์ ์ฌ์ฉํ์ธ์.
์ด ๋์๋ง์ ์ค๋ช
๋ ๋๋ก ํ๋ก๋์
์๋ฒ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ๊ณ ๊ฐ ๋์ ํ๊ฒฝ์ ๋์ผํ ์์น์ ์ค์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํนํ replicaCount
๋ฐ ๋ฆฌ์ ์ ์ฌ์ฉํ์ฌ ์ฌํด ๋ณต๊ตฌ ์์น์ ๋ฐ๋ฅด์ธ์.
์์ธํ ๋ด์ฉ์ Cassandra ์คํ ๋ฆฌ์ง ์ค์ ๊ตฌ์ฑ์ ์ฐธ์กฐํ์ธ์.