Mengoptimalkan performa workload MySQL di GKE

Dokumen ini menjelaskan cara meningkatkan performa workload MySQL Anda di Google Kubernetes Engine (GKE) dengan membuat konfigurasi tingkat aplikasi dan tingkat node yang dioptimalkan. Untuk mengetahui detail selengkapnya, lihat Mengoptimalkan workload di GKE.

Pengoptimalan untuk MySQL ditentukan untuk instance MySQL 8 yang digunakan sebagai database pemrosesan transaksi online satu node ("Read/Write OLTP") dengan SSL, dengan performa yang diukur menggunakan Sysbench 1.1.0. Pertimbangkan cara beban kerja MySQL digunakan di cluster Anda dibandingkan dengan kasus penggunaan ini. Jika kasus penggunaan Anda berbeda, pengoptimalan yang direkomendasikan mungkin perlu disesuaikan dengan konteks Anda.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan GKE Recommender API dan Google Kubernetes Engine API.
  • Aktifkan API
  • Untuk menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Persyaratan

Gunakan GKE versi 1.31.1-gke.12000 atau yang lebih baru.

Mengoptimalkan untuk workload MySQL

Sebaiknya gunakan node pool khusus untuk workload MySQL Anda. Secara default, node pool baru dibuat saat Anda menyelesaikan langkah-langkah berikut.

Untuk mengoptimalkan performa beban kerja MySQL, lakukan hal berikut:

  1. Buat manifes dengan pengoptimalan untuk workload MySQL:

    1. Buat manifes dengan pengoptimalan yang direkomendasikan dengan menjalankan perintah berikut:

      gcloud container workload profiles manifests create \
         --workload=mysql-8-oltp
         --cluster-version=CLUSTER_VERSION
         --options=machineType=MACHINE_TYPE \
         --output-path=/tmp/manifests.yaml
      

      Ganti kode berikut:

      • CLUSTER_VERSION: versi GKE. Rekomendasinya adalah GKE versi 1.31.1-gke.12000 atau yang lebih baru.
      • MACHINE_TYPE: jenis mesin yang diinginkan.

      Flag --output-path=/tmp/manifests.yaml bersifat opsional. Jika tidak ditentukan, manifes akan dicetak ke terminal, tetapi tidak disimpan ke file.

      Perintah ini menghasilkan satu file YAML yang berisi dua resource Kubernetes:

      • ConfigMap yang menentukan konfigurasi MySQL bernama default-auth.cnf.
      • Objek ComputeClass. Opsi ini menentukan mesin tempat MySQL akan berjalan, yang bersifat opsional. Untuk mengetahui detail tentang cara menentukan jenis mesin, lihat Tentang ComputeClass kustom
    2. Tinjau rekomendasi dan ubah manifes sehingga menyertakan pengoptimalan pilihan Anda. Untuk menilai rekomendasi, Anda dapat melakukan hal berikut:

      • Tinjau dokumentasi MySQL untuk menilai konfigurasi yang direkomendasikan untuk konteks Anda.
      • Pertimbangkan cara beban kerja MySQL digunakan di cluster Anda dibandingkan dengan kasus penggunaan berikut. Jika kasus penggunaan Anda berbeda, maka pengoptimalan yang direkomendasikan mungkin perlu disesuaikan dengan konteks Anda.

      Pengoptimalan untuk MySQL ditentukan untuk instance MySQL 8 yang digunakan sebagai database pemrosesan transaksi online satu node ("Read/Write OLTP") dengan SSL, dengan performa yang diukur menggunakan Sysbench 1.1.0.

    3. Edit file manifes jika Anda ingin mengubah konfigurasi atau menambahkan ke konfigurasi.

    4. Terapkan manifes ke cluster menggunakan perintah berikut:

      kubectl create -f /tmp/manifests.yaml
      
  2. Deploy Pod yang mereferensikan pengoptimalan. Contoh:

    apiVersion: v1
    kind: Pod
    metadata:
      name: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:8
          volumeMounts:
            - name: gke-optimized-workload-config
              subPath: default-auth.cnf
              mountPath: /etc/mysql/conf.d/gke-optimized.cnf
              readOnly: true
      volumes:
        - name: gke-optimized-workload-config
          configMap:
            name: mysql-config
      nodeSelector:
        cloud.google.com/compute-class: optimized-gke-mysql-8-oltp-abc123
    

    Ubah nama ComputeClass agar cocok dengan nama yang dihasilkan. Kemudian, terapkan manifes Pod Anda ke cluster:

    kubectl apply -f pod.yaml
    
  3. Pastikan MySQL menggunakan konfigurasi yang dioptimalkan. Untuk melakukannya, Anda dapat menjalankan perintah berikut untuk memastikan MySQL menggunakan konfigurasi yang dioptimalkan:

    kubectl exec mysql -- mysql -e "SELECT DISTINCT VARIABLE_PATH FROM performance_schema.variables_info WHERE VARIABLE_PATH != '';"
    

    Anda akan melihat output yang mirip dengan berikut ini:

    VARIABLE_PATH
    /etc/mysql/conf.d/gke-optimized.cnf
    /etc/my.cnf
    

    Anda juga dapat menggunakan perintah mysql untuk membuat kueri setiap direktif yang ditetapkan dalam konfigurasi yang dioptimalkan, seperti max_connections.

Saat Anda men-deploy workload, cluster akan membuat node pool baru yang sesuai dengan konfigurasi yang dioptimalkan, dan menetapkan Pod Anda ke node pool tersebut.

Pod yang sudah ada tidak akan diubah. Hanya Pod yang mereferensikan konfigurasi yang dioptimalkan yang dioptimalkan. Jika sebelumnya Anda telah men-deploy workload MySQL di cluster, Anda harus men-deploy ulang workload ini untuk menjalankannya dengan konfigurasi yang dioptimalkan.

Langkah berikutnya