Π‘ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ
Apache Cassandra ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΡ Π΅Ρ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π½Π° Π±Π°Π·Π΅ Kubernetes ΠΌΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ. Π ΡΡΠΎΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΡΡ ΡΠ²ΠΎΠΈΠΌ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ
ΡΠ°Π³ΠΎΠ², ΠΊΡΠΈΡΠ΅ΡΠΈΠ΅Π² ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ (Π²ΠΊΠ»ΡΡΠ°Ρ ΠΎΠ±Π·ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ²) Π΄Π»Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Cassandra Π² K8s.
Β«ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΆΠ΅Π½ΡΠΈΠ½ΠΎΠΉ, ΡΠΏΡΠ°Π²ΠΈΡΡΡ ΠΈ Ρ Π³ΠΎΡΡΠ΄Π°ΡΡΡΠ²ΠΎΠΌΒ»
ΠΡΠΎ ΠΆΠ΅ ΡΠ°ΠΊΠ°Ρ Cassandra? ΠΡΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Ρ ΡΠ°Π½Π΅Π½ΠΈΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΌΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠ°Ρ Π²ΡΡΠΎΠΊΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ Π±Π΅Π· Π΅Π΄ΠΈΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΠΎΡΠΊΠ°Π·Π°. ΠΡΠΎΠ΅ΠΊΡ Π²ΡΡΠ΄ Π»ΠΈ Π½ΡΠΆΠ΄Π°Π΅ΡΡΡ Π² Π΄Π»ΠΈΠ½Π½ΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΠ²Π΅Π΄Ρ Π»ΠΈΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Cassandra, ΡΡΠΎ Π±ΡΠ΄ΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ Π² ΡΠ°Π·ΡΠ΅Π·Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ:
- Cassandra Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Java.
- Π’ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ Cassandra Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ²Π½Π΅ΠΉ:
- Node β ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Cassandra;
- Rack β Π³ΡΡΠΏΠΏΠ° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Cassandra, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡ-Π»ΠΈΠ±ΠΎ ΠΏΡΠΈΠ·Π½Π°ΠΊΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠ°ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Π΄Π°ΡΠ°-ΡΠ΅Π½ΡΡΠ΅;
- Datacenter β ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΡ Π²ΡΠ΅Ρ Π³ΡΡΠΏΠΏ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Cassandra, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Π΄Π°ΡΠ°-ΡΠ΅Π½ΡΡΠ΅;
- Cluster β ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΡ Π²ΡΠ΅Ρ Π΄Π°ΡΠ°-ΡΠ΅Π½ΡΡΠΎΠ².
- ΠΠ»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ·Π»Π° Cassandra ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ IP-Π°Π΄ΡΠ΅Ρ.
- ΠΠ»Ρ Π±ΡΡΡΡΠΎΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΡΠ΅Π½ΠΈΡ ΡΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ Cassandra Ρ ΡΠ°Π½ΠΈΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ β ΠΊ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΅Π·Π΄Ρ Π² Kubernetes.
Check-list Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ°
ΠΠΎΠ²ΠΎΡΡ ΠΎ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Cassandra Π² Kubernetes, ΠΌΡ Π½Π°Π΄Π΅Π΅ΠΌΡΡ, ΡΡΠΎ Ρ ΠΏΠ΅ΡΠ΅Π΅Π·Π΄ΠΎΠΌ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π΅ΠΉ ΡΡΠ°Π½Π΅Ρ ΡΠ΄ΠΎΠ±Π½Π΅Π΅. Π§ΡΠΎ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎ Π² ΡΡΠΎΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ?
1. Π₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π΄Π»Ρ Π΄Π°Π½Π½ΡΡ
ΠΠ°ΠΊ ΡΠΆΠ΅ ΡΡΠΎΡΠ½ΡΠ»ΠΎΡΡ, ΡΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ Cassanda Ρ ΡΠ°Π½ΠΈΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ β Π² Memtable. ΠΠΎ Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³Π°Ρ ΡΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π½Π° Π΄ΠΈΡΠΊ, β Π² Π²ΠΈΠ΄Π΅ SSTable. Π ΡΡΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ½ΠΎΡΡΡ Commit Log β Π·Π°ΠΏΠΈΡΠΈ ΠΎΠ±ΠΎ Π²ΡΠ΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠΆΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π½Π° Π΄ΠΈΡΠΊ.
Π‘Ρ
Π΅ΠΌΠ° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² Cassandra
Π Kubernetes ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ PersistentVolume. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°ΠΌ, ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ Π² Kubernetes Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ Π³ΠΎΠ΄ΠΎΠΌ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π²ΡΡ ΠΏΡΠΎΡΠ΅.
ΠΠ°ΠΆΠ΄ΠΎΠΌΡ podβΡ Ρ Cassandra ΠΌΡ Π²ΡΠ΄Π΅Π»ΠΈΠΌ ΡΠ²ΠΎΠΉ PersistentVolume
ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Cassandra ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡ. ΠΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅Ρ Cassandra ΠΈΠ· Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΡΠ·Π»ΠΎΠ², ΡΠΎ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π²ΡΠΎΠ΄Π΅ Ceph ΠΈΠ»ΠΈ GlusterFS. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Ρ
ΡΠ°Π½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ Π½Π° Π΄ΠΈΡΠΊΠ΅ ΡΠ·Π»Π° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ hostPath
.
ΠΡΡΠ³ΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ, Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ feature-Π²Π΅ΡΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ·Π΅Π» Cassandra, Π° Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ°Π½ΠΈΡΡ Π² ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, Ρ.Π΅. ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠ΅ Ceph ΠΈ GlusterFS ΡΡΠ°Π½ΡΡ Π²Π°ΡΠ΅ΠΉ ΠΎΠΏΡΠΈΠ΅ΠΉ. Π’ΠΎΠ³Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π±ΡΠ΄Π΅Ρ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π½Π΅ ΠΏΠΎΡΠ΅ΡΡΠ΅Ρ ΡΠ΅ΡΡΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π°ΠΆΠ΅ ΠΏΡΠΈ ΠΏΠΎΡΠ΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ·Π»ΠΎΠ² Kuberntes-ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
2. ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π±Π΅Π·Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Π² Kubernetes ΡΠ²Π»ΡΠ΅ΡΡΡ Prometheus (ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΌΡ ΠΎΠ± ΡΡΠΎΠΌ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ Π²
ΠΡΠΈΠΌΠ΅Ρ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ Π²ΠΈΠ΄Π° Π³ΡΠ°ΡΠΈΠΊΠΎΠ² Π² Grafana Π΄Π»Ρ Cassandra
ΠΠΊΡΠΏΠΎΡΡΠ΅ΡΠΎΠ² Π²ΡΠ΅Π³ΠΎ Π΄Π²Π°:
ΠΡ Π²ΡΠ±ΡΠ°Π»ΠΈ Π΄Π»Ρ ΡΠ΅Π±Ρ ΠΏΠ΅ΡΠ²ΡΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ:
- JMX Exporter ΡΠ°ΡΡΠ΅Ρ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Cassandra Exporter Π½Π΅ ΡΠΌΠΎΠ³ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°. Cassandra Exporter Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²Π΅ΡΡΠΈΠΉ Cassandra.
- ΠΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ javaagent ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ»Π°Π³Π°
-javaagent:<plugin-dir-name>/cassandra-exporter.jar=--listen=:9180
. - ΠΠ»Ρ Π½Π΅Π³ΠΎ Π΅ΡΡΡ
Π°Π΄Π΅ΠΊΠ²Π°ΡΠ½ΡΠΉ dashboad , ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Cassandra Exporter.
3. ΠΡΠ±ΠΎΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ² Kubernetes
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ Π²ΡΡΠ΅ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Cassandra, ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π²ΡΡ, ΡΡΠΎ ΡΠ°ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΎ, Π² ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡ Kubernetes:
- Cassandra Node β Pod
- Cassandra Rack β StatefulSet
- Cassandra Datacenter β ΠΏΡΠ» ΠΈΠ· StatefulSets
- Cassandra Cluster β ???
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ, ΡΡΠΎΠ±Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ Cassandra ΡΡΠ°Π·Ρ. ΠΠΎ Π΅ΡΠ»ΠΈ ΡΠ΅Π³ΠΎ-ΡΠΎ Π½Π΅Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ! Π Kubernetes Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ² β
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ
ΡΠ΅ΡΡΡΡΠΎΠ² Π΄Π»Ρ Π»ΠΎΠ³ΠΎΠ² ΠΈ ΠΎΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΠΉ
ΠΠΎ ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ Custom Resource Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°ΡΠΈΡ: Π²Π΅Π΄Ρ Π΄Π»Ρ Π½Π΅Π³ΠΎ Π½ΡΠΆΠ΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠΈΠ±Π΅Π³Π½ΡΡΡ ΠΊ ΠΏΠΎΠΌΠΎΡΠΈ
4. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈΡ podβΠΎΠ²
ΠΡΠ½ΠΊΡΠΎΠΌ Π²ΡΡΠ΅ ΠΌΡ ΡΠΎΠ³Π»Π°ΡΠΈΠ»ΠΈΡΡ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ·Π΅Π» Cassandra Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ podβΡ Π² Kubernetes. ΠΠΎ IP-Π°Π΄ΡΠ΅ΡΠ° Ρ podβΠΎΠ² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π±ΡΠ΄ΡΡ ΡΠ°Π·Π½ΡΠΌΠΈ. Π ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ·Π»Π° Π² Cassandra ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ IP-Π°Π΄ΡΠ΅ΡΠ°β¦ ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ podβΠ° ΠΊΠ»Π°ΡΡΠ΅Ρ Cassandra Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π² ΡΠ΅Π±Ρ Π½ΠΎΠ²ΡΠΉ ΡΠ·Π΅Π».
ΠΡΡ ΠΎΠ΄ Π΅ΡΡΡ, ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΎΠ΄ΠΈΠ½:
- ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π΅ΡΡΠΈ ΡΡΠ΅Ρ ΠΏΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌ Ρ
ΠΎΡΡΠΎΠ² (UUIDβΠ°ΠΌ, ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΡΡΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ Cassandra) ΠΈΠ»ΠΈ ΠΏΠΎ IP-Π°Π΄ΡΠ΅ΡΠ°ΠΌ ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΡΡΠΎ Π²ΡΡ Π² ΠΊΠ°ΠΊΠΈΡ
-ΡΠΎ ΡΡΡΡΠΊΡΡΡΠ°Ρ
/ΡΠ°Π±Π»ΠΈΡΠ°Ρ
. Π£ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ°:
- Π ΠΈΡΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡ Π³ΠΎΠ½ΠΊΠΈ ΠΏΡΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΡΡΠ°Π·Ρ Π΄Π²ΡΡ ΡΠ·Π»ΠΎΠ². ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ΄Π½ΡΡΠΈΡ ΡΠ·Π»Ρ Cassandra ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠΉΠ΄ΡΡ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ΅Π±Ρ IP-Π°Π΄ΡΠ΅Ρ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ ΠΈ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅ΡΡΡΡ.
- ΠΡΠ»ΠΈ ΡΠ·Π΅Π» Cassandra ΠΏΠΎΡΠ΅ΡΡΠ» ΡΠ²ΠΎΠΈ Π΄Π°Π½Π½ΡΠ΅, ΠΌΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ.
- ΠΡΠΎΡΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ Ρ
Π°ΠΊΠΎΠΌ, Π½ΠΎ ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅: ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Service Ρ ClusterIP Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·Π»Π° Cassandra. ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΡΡΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
- ΠΡΠ»ΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Cassandra ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ·Π»ΠΎΠ², Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ServiceβΠΎΠ².
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ClusterIP ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠ΅ΡΠ΅Π· iptables. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ, Π΅ΡΠ»ΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Cassandra ΠΌΠ½ΠΎΠ³ΠΎ (1000β¦ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ 100?) ΡΠ·Π»ΠΎΠ². Π₯ΠΎΡΡ
Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠ° Π½Π° Π±Π°Π·Π΅ IPVS ΡΠΏΠΎΡΠΎΠ±Π½Π° ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
- Π’ΡΠ΅ΡΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ·Π»ΠΎΠ² Cassandra ΡΠ΅ΡΡ ΡΠ·Π»ΠΎΠ² Π²ΠΌΠ΅ΡΡΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΠ΅ΡΠΈ podβΠΎΠ² ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ
hostNetwork: true
. ΠΠ°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ:- ΠΠ° Π·Π°ΠΌΠ΅Π½Ρ ΡΠ·Π»ΠΎΠ². ΠΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π½ΠΎΠ²ΡΠΉ ΡΠ·Π΅Π» ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠΌΠ΅Π» ΡΠΎΡ ΠΆΠ΅ IP-Π°Π΄ΡΠ΅Ρ, ΡΡΠΎ ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ (Π² ΠΎΠ±Π»Π°ΠΊΠ°Ρ Π²ΡΠΎΠ΄Π΅ AWS, GCP ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ);
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅ΡΡ ΡΠ·Π»ΠΎΠ² ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΠΌΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π° ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΡΠ΅ΡΡΡΡΡ. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π²ΡΠ»ΠΎΠΆΠΈΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠ·Π΅Π» ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ podβΠ° Ρ Cassandra Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ.
5. ΠΡΠΊΠ°ΠΏΡ
ΠΡ Ρ
ΠΎΡΠΈΠΌ ΡΠΎΡ
ΡΠ°Π½ΡΡΡ ΠΏΠΎΠ»Π½ΡΡ Π²Π΅ΡΡΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π° Cassandra ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ. Kubernetes ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
ΠΠ°ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ ΡΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ Cassandra Ρ ΡΠ°Π½ΠΈΡ Π² ΠΏΠ°ΠΌΡΡΠΈ. Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ Π±ΡΠΊΠ°ΠΏ, Π½ΡΠΆΠ½ΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ (Memtables) ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ Π½Π° Π΄ΠΈΡΠΊ (SSTables). Π ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ·Π΅Π» Cassandra ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΡΠΊΠ»ΡΡΠ°ΡΡΡ ΠΈΠ· ΡΠ°Π±ΠΎΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ½ΠΈΠΌΠ°Π΅ΡΡΡ Π±ΡΠΊΠ°ΠΏ (snapshot) ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ ΡΡ Π΅ΠΌΠ° (keyspace). Π ΡΡΡ Π²ΡΡΡΠ½ΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π±ΡΠΊΠ°ΠΏ Π½Π°ΠΌ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π°Π΅Ρ: Π½ΡΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π΄Π°Π½Π½ΡΡ , Π·Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ²Π΅ΡΠ°Π» ΡΠ·Π΅Π» Cassandra, β ΡΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΠΊΠ΅Π½Ρ.
Π Π°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅Π½ΠΎΠ² Π΄Π»Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π·Π° ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΠ²Π΅ΡΠ°ΡΡ ΡΠ·Π»Ρ Cassandra
ΠΡΠΈΠΌΠ΅Ρ ΡΠΊΡΠΈΠΏΡΠ° Π΄Π»Ρ ΡΠ½ΡΡΠΈΡ Π±ΡΠΊΠ°ΠΏΠ° Cassandra ΠΎΡ Google Π² Kubernetes ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΠΎ
set -eu
if [[ -z "$1" ]]; then
info "Please provide a keyspace"
exit 1
fi
KEYSPACE="$1"
result=$(nodetool snapshot "${KEYSPACE}")
if [[ $? -ne 0 ]]; then
echo "Error while making snapshot"
exit 1
fi
timestamp=$(echo "$result" | awk '/Snapshot directory: / { print $3 }')
mkdir -p /tmp/backup
for path in $(find "/var/lib/cassandra/data/${KEYSPACE}" -name $timestamp); do
table=$(echo "${path}" | awk -F "[/-]" '{print $7}')
mkdir /tmp/backup/$table
mv $path /tmp/backup/$table
done
tar -zcf /tmp/backup.tar.gz -C /tmp/backup .
nodetool clearsnapshot "${KEYSPACE}"
ΠΡΠΈΠΌΠ΅Ρ bash-ΡΠΊΡΠΈΠΏΡΠ° Π΄Π»Ρ ΡΠ½ΡΡΠΈΡ Π±ΡΠΊΠ°ΠΏΠ° Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π° Cassandra
ΠΠΎΡΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Cassandra Π² Kubernetes
Π§ΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ΅ΠΉΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ Cassandra Π² Kubernetes ΠΈ ΡΡΠΎ ΠΈΠ· ΡΡΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ΄ Π·Π°Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ?
1. Π Π΅ΡΠ΅Π½ΠΈΡ Π½Π° Π±Π°Π·Π΅ StatefulSet ΠΈΠ»ΠΈ Helm-ΡΠ°ΡΡΠΎΠ²
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ StatefulSets Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Cassandra β Ρ ΠΎΡΠΎΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ. ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Helm-ΡΠ°ΡΡΠ° ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Go ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ Cassandra.
ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎβ¦ ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ»ΡΡΠΈΡΡΡ ΡΡΠΎ-ΡΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΡ ΠΎΠ΄ ΡΠ·Π»Π° ΠΈΠ· ΡΡΡΠΎΡ. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Kubernetes ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΡΠ΅ΡΡΡ Π²ΡΠ΅ Π²ΡΡΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΎΡΠ΅Π½Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π² ΡΠΎΠΌ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ: Π·Π°ΠΌΠ΅Π½Ρ ΡΠ·Π»ΠΎΠ², ΡΠ΅Π·Π΅ΡΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈ Ρ.Π΄.
ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠ΅Π»ΠΈ:
ΠΠ±Π° ΡΠ°ΡΡΠ° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Ρ ΠΎΡΠΎΡΠΈ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π²ΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ.
2. Π Π΅ΡΠ΅Π½ΠΈΡ Π½Π° Π±Π°Π·Π΅ Kubernetes Operator
Π’Π°ΠΊΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠΈΡΠΎΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ. ΠΠ»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Cassandra, ΠΊΠ°ΠΊ ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΏΠ°ΡΡΠ΅ΡΠ½ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ Sidecar <-> Controller <-> CRD:
Π‘Ρ
Π΅ΠΌΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ·Π»Π°ΠΌΠΈ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ Cassandra
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ.
1. Cassandra-operator ΠΎΡ instaclustr
-
GitHub - ΠΠΎΡΠΎΠ²Π½ΠΎΡΡΡ: Alpha
- ΠΠΈΡΠ΅Π½Π·ΠΈΡ: Apache 2.0
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π°: Java
ΠΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Π΅ΡΠ°ΡΡΠΈΠΉ ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΠΈΠΉΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Cassandra. ΠΠ½, ΠΊΠ°ΠΊ ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΡΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ sidecar-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ΅ΡΠ΅Π· HTTP. ΠΠ°ΠΏΠΈΡΠ°Π½ Π½Π° Java, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠ½ΠΎΠ³Π΄Π° Π΅ΠΌΡ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ client-go. Π’Π°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°Π·Π½ΡΠ΅ Racks Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Datacenter.
ΠΠ°ΡΠΎ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠ»ΡΡΡ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°, Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ CRD ΠΈ Π΄Π°ΠΆΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΠ½ΡΡΠΈΡ Π±ΡΠΊΠ°ΠΏΠΎΠ².
2. Navigator ΠΎΡ Jetstack
-
GitHub - ΠΠΎΡΠΎΠ²Π½ΠΎΡΡΡ: Alpha
- ΠΠΈΡΠ΅Π½Π·ΠΈΡ: Apache 2.0
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π°: Golang
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ DB-as-a-Service. ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π΄Π²Π΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ : Elasticsearch ΠΈ Cassandra. ΠΠΌΠ΅Π΅Ρ Π² ΡΠ΅Π±Π΅ ΡΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· RBAC (Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠ²ΠΎΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ navigator-apiserver). ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΡΠΎΠΈΠ»ΠΎ Π±Ρ ΠΏΡΠΈΡΠΌΠΎΡΡΠ΅ΡΡΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ Π±ΡΠ» ΡΠ΄Π΅Π»Π°Π½ ΠΏΠΎΠ»ΡΠΎΡΠ° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄, ΡΡΠΎ ΡΠ²Π½ΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π΅Π³ΠΎ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π».
3. Cassandra-operator ΠΎΡ vgkowski
-
GitHub - ΠΠΎΡΠΎΠ²Π½ΠΎΡΡΡ: Alpha
- ΠΠΈΡΠ΅Π½Π·ΠΈΡ: Apache 2.0
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π°: Golang
Π Π°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Β«Π²ΡΠ΅ΡΡΡΠ·Β» Π½Π΅ ΡΡΠ°Π»ΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π±ΡΠ» Π±ΠΎΠ»ΡΡΠ΅ Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π·Π°Π±ΡΠΎΡΠ΅Π½Π°: ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ Kubernetes, Π·Π°ΡΠ²Π»Π΅Π½Π½Π°Ρ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠ°Ρ, β ΡΡΠΎ 1.9.
4. Cassandra-operator ΠΎΡ Rook
-
GitHub - ΠΠΎΡΠΎΠ²Π½ΠΎΡΡΡ: Alpha
- ΠΠΈΡΠ΅Π½Π·ΠΈΡ: Apache 2.0
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π°: Golang
ΠΠΏΠ΅ΡΠ°ΡΠΎΡ, ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΠ΄Π΅Ρ Π½Π΅ ΡΠ°ΠΊ Π±ΡΡΡΡΠΎ, ΠΊΠ°ΠΊ Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ. ΠΠΌΠ΅Π΅Ρ ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ CRD Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ, ΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΡΠ·Π»ΠΎΠ² ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Service Ρ ClusterIP (ΡΠΎΡ ΡΠ°ΠΌΡΠΉ Β«Ρ
Π°ΠΊΒ»)β¦ Π½ΠΎ ΠΏΠΎΠΊΠ° ΡΡΠΎ ΡΡΠΎ Π²ΡΡ. ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈ Π±ΡΠΊΠ°ΠΏΠΎΠ² ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅Ρ (ΠΊΡΡΠ°ΡΠΈ, Π·Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΌΡ
NB: ΠΠ°Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠ°ΠΌΠΈ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ². ΠΡΠΎΠ±Π»Π΅ΠΌ Π² ΡΠ°Π±ΠΎΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π·Π° Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ (~4 ΠΌΠ΅ΡΡΡΠ° ΡΠ°Π±ΠΎΡΡ) Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΎ Π½Π΅ Π±ΡΠ»ΠΎ.
5. CassKop ΠΎΡ Orange
-
GitHub - ΠΠΎΡΠΎΠ²Π½ΠΎΡΡΡ: Alpha
- ΠΠΈΡΠ΅Π½Π·ΠΈΡ: Apache 2.0
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π°: Golang
Π‘Π°ΠΌΡΠΉ ΠΌΠΎΠ»ΠΎΠ΄ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π² ΡΠΏΠΈΡΠΊΠ΅: ΠΏΠ΅ΡΠ²ΡΠΉ ΠΊΠΎΠΌΠΌΠΈΡ Π±ΡΠ» ΡΠ΄Π΅Π»Π°Π½ 23 ΠΌΠ°Ρ 2019 Π³ΠΎΠ΄Π°. Π£ΠΆΠ΅ ΡΠ΅ΠΉΡΠ°Ρ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ Π² ΡΠ²ΠΎΠ΅ΠΌ Π°ΡΡΠ΅Π½Π°Π»Π΅ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡ ΠΈΠ· Π½Π°ΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ°, ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° Π±Π°Π·Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠ³ΠΎ operator-sdk. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ Β«ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈΒ». ΠΠ»Π°Π²Π½ΡΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅ΠΌ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠ²ΠΎΠ΄Ρ
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ° Cassandra Π² Kubernetes Π³ΠΎΠ²ΠΎΡΠΈΡ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅Π±Ρ: ΡΠ΅ΠΌΠ° Π²ΠΎΡΡΡΠ΅Π±ΠΎΠ²Π°Π½Π°.
ΠΠ° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΈΠ· Π²ΡΡΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΡΠ²ΠΎΠΉ ΡΡΡΠ°Ρ ΠΈ ΡΠΈΡΠΊ: Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ 100%-ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π² production-ΡΡΠ΅Π΄Π΅. ΠΠΎ ΡΠΆΠ΅ ΡΠ΅ΠΉΡΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Π΅ΡΠ°ΡΡΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ Π² ΡΡΠ΅Π½Π΄Π°Ρ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΡΠΌΠ°Ρ, Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΡΡΠ° ΠΆΠ΅Π½ΡΠΈΠ½Π° Π½Π° ΠΊΠΎΡΠ°Π±Π»Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΊ ΠΌΠ΅ΡΡΡ!
P.S.
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«
ΠΠ΅ΡΠΏΡΠΎΡΡΠΎΠΉΠ½Π°Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ MongoDB Π² Kubernetes Β»; - Β«
ΠΠ΅ΡΠΏΡΠΎΡΡΠΎΠΉΠ½Π°Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ RabbitMQ Π² Kubernetes Β»; - Β«
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Kubernetes (ΠΎΠ±Π·ΠΎΡ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°) Β»; - Β«
K8s tips & tricks: Π£ΡΠΊΠΎΡΡΠ΅ΠΌ bootstrap Π±ΠΎΠ»ΡΡΠΈΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ Β».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com