kubernetes · mariadb · maxscale · veritabanı

Kubernetes ile MariaDB MaxScale Cluster Kurulumu

Kubernetes ile MariaDB MaxScale Cluster Kurulumu konusunda temel yaklaşımı ve uygulanabilir adımları özetleyen kısa bir teknik not.

Kubernetes ile MariaDB MaxScale Cluster Kurulumu

Kubernetes üzerinde yüksek erişilebilir, ölçeklenebilir ve merkezi yönetilebilir bir MariaDB kümesi oluşturmak, özellikle kurumsal uygulamalarda önemli bir gereksinim. Bu rehberde; MariaDB replikasyon kümesi ve üzerinde çalışan MaxScale read/write split proxy yapısını adım adım nasıl kurabileceğinizi sade ve uygulanabilir bir şekilde özetledim.

1. Ön Hazırlık

Gereksinimler

  • Kubernetes v1.21+
  • Docker Hub veya özel registry
  • Helm veya kubectl
  • Depolama sağlayıcısı (PVC için)

Bu kurulum tamamen YAML tanımlarıyla yapılabilir; ek bir operator veya CRD gerektirmez.

2. ConfigMap: Kümenin Beyni

MariaDB kümesindeki davranışların çoğu ConfigMap içinde tanımlanır. Burada hem primary hem de replica nodelar için yapılandırma dosyaları ve init scriptler tutulur.

Örnek ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: mariadb-configmap
data:
  primary.cnf: |
    [mariadb]
    log-bin
    report_host=mariadb-0.mariadb-headless.default.svc
  replica.cnf: |
    [mariadb]
    read_only=ON
  primary.sql: |
    CREATE USER ...;
  secondary.sql: |
    CHANGE MASTER TO ...;

Her pod, kendi sırasına göre (ordinal değeri) primary veya replica olarak başlatılır.

3. MariaDB StatefulSet: Kalıcılık + Kimlik

MariaDB, verisini korumak ve node kimliğini sabit tutmak için mutlaka StatefulSet ile deploy edilmelidir.

Öne çıkan noktalar:

  • volumeClaimTemplates ile kalıcı disk kullanılır.
  • initContainers sayesinde primary/replica ayrımı yapılır.
  • Pod adından (mariadb-0) rol belirlenir.

Temel StatefulSet tanımı:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mariadb
spec:
  replicas: 2
  serviceName: mariadb-headless
  podManagementPolicy: Parallel

InitContainer örneği:

if [[ $ordinal -eq 0 ]]; then
  cp /mnt/config-map/primary.cnf /etc/mysql/conf.d/
  cp /mnt/config-map/primary.sql /docker-entrypoint-initdb.d/
else
  cp /mnt/config-map/replica.cnf /etc/mysql/conf.d/
  cp /mnt/config-map/secondary.sql /docker-entrypoint-initdb.d/
fi

4. Secrets: Kullanıcı ve Replikasyon Şifreleri

MariaDB erişim bilgileri ve replication kullanıcıları mutlaka Secret içinde saklanmalıdır.

apiVersion: v1
kind: Secret
metadata:
  name: mariadb-secret
type: Opaque
data:
  MARIADB_ROOT_PASSWORD: <base64>
  MARIADB_REPLICATION_USER: <base64>
  MARIADB_REPLICATION_PASSWORD: <base64>

Bu değerler pod içine environment variable olarak geçer.

5. MaxScale Deployment: Read/Write Split Proxy

MaxScale, cluster’ın önünde durarak sorguları doğru node’a yönlendirir:

  • Write → Primary
  • Read → Replicas
  • Node erişilemezse otomatik devre dışı bırakır

Deployment örneği:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: maxscale
spec:
  replicas: 1
  template:
    spec:
      containers:
      - name: maxscale
        image: custom.registry.io/maxscale:latest
        volumeMounts:
        - name: maxscale-config
          mountPath: /etc/maxscale.cnf
          subPath: maxscale.cnf

MaxScale konfigürasyonu (ConfigMap):

[SplitterService]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale
password=maxscale_secret

6. Test ve Doğrulama

Kurulum tamamlandıktan sonra:

1) MaxScale arayüzüne bağlanın

http://<NodeIP>:8989

2) MariaDB bağlantısı yapın

mysql -h <maxscale-service> -P 3306 -u admin -p

3) Query hangi node’dan geçti?

SELECT @@hostname;

Replica değişimlerini buradan takip edebilirsiniz.

Sonuç

Bu rehberde, Kubernetes üzerinde çalışan bir MariaDB + MaxScale cluster için temel yapı taşlarını ele aldık. Bu mimari sayesinde:

  • Yüksek erişilebilirlik
  • Read/write ayrımı
  • Otomatik failover
  • Kalıcı veri yönetimi

gibi özelliklere kolayca ulaşabilirsiniz.

YAML dosyalarını kendi ortamınıza göre özelleştirerek kurumsal ölçekte kullanılabilir bir veritabanı altyapısı oluşturabilirsiniz.