Otimizar o desempenho da carga de trabalho do MySQL no GKE

Neste documento, descrevemos como melhorar o desempenho das suas cargas de trabalho do MySQL no Google Kubernetes Engine (GKE) ao gerar configurações otimizadas no nível do aplicativo e do nó. Para mais detalhes, consulte Otimizar para cargas de trabalho no GKE.

As otimizações para MySQL foram determinadas para uma instância do MySQL 8 usada como um banco de dados de processamento de transações on-line de nó único ("OLTP de leitura/gravação") com SSL, com desempenho medido usando o Sysbench 1.1.0. Considere como a carga de trabalho do MySQL é usada no seu cluster em comparação com esse caso de uso. Se o seu caso de uso for diferente, as otimizações recomendadas talvez precisem ser ajustadas para seu contexto.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ative a API GKE Recommender e a API Google Kubernetes Engine.
  • Ativar APIs
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando o comando gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.

Requisitos

Use o GKE versão 1.31.1-gke.12000 ou posterior.

Otimizar para cargas de trabalho do MySQL

Recomendamos usar um pool de nós dedicado para sua carga de trabalho do MySQL. Por padrão, um novo pool de nós é criado quando você conclui as etapas a seguir.

Para otimizar o desempenho de uma carga de trabalho do MySQL, faça o seguinte:

  1. Crie os manifestos com otimizações para a carga de trabalho do MySQL:

    1. Gere manifestos com otimizações recomendadas executando o seguinte comando:

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

      Substitua:

      • CLUSTER_VERSION: a versão do GKE. A recomendação é usar o GKE versão 1.31.1-gke.12000 ou mais recente.
      • MACHINE_TYPE: o tipo de máquina desejado.

      A sinalização --output-path=/tmp/manifests.yaml é opcional. Se não for especificado, os manifestos serão impressos no terminal, mas não serão salvos em um arquivo.

      Esse comando gera um único arquivo YAML que contém dois recursos do Kubernetes:

      • Um ConfigMap que especifica uma configuração do MySQL chamada default-auth.cnf.
      • Um objeto ComputeClass. Isso especifica as máquinas em que o MySQL será executado, o que é opcional. Para detalhes sobre como os tipos de máquina são especificados, consulte Sobre as ComputeClasses personalizadas.
    2. Revise as recomendações e modifique os manifestos para incluir as otimizações de sua preferência. Para avaliar as recomendações, faça o seguinte:

      • Leia a documentação do MySQL para avaliar a configuração recomendada para seu contexto.
      • Considere como a carga de trabalho do MySQL é usada no cluster em comparação com o caso de uso a seguir. Se o caso de uso for diferente, talvez seja necessário ajustar as otimizações recomendadas ao seu contexto.

      As otimizações para MySQL foram determinadas para uma instância do MySQL 8 usada como um banco de dados de processamento de transações on-line de nó único ("OLTP de leitura/gravação") com SSL, com desempenho medido usando o Sysbench 1.1.0.

    3. Edite o arquivo de manifesto se quiser modificar ou adicionar à configuração.

    4. Aplique os manifestos ao cluster usando o seguinte comando:

      kubectl create -f /tmp/manifests.yaml
      
  2. Implante um pod que faça referência às otimizações. Exemplo:

    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
    

    Modifique o nome da ComputeClass para corresponder ao gerado. Em seguida, aplique o manifesto do pod ao cluster:

    kubectl apply -f pod.yaml
    
  3. Confirme se o MySQL está usando a configuração otimizada. Para isso, execute o comando a seguir e confira se o MySQL está usando a configuração otimizada:

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

    O resultado será semelhante a este:

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

    Também é possível usar o comando mysql para consultar as diretivas individuais definidas na configuração otimizada, como max_connections.

Quando você implanta a carga de trabalho, o cluster cria um novo pool de nós que segue a configuração otimizada e atribui seus pods a esses pools de nós.

Os pods que já existem não são modificados. Somente os pods que referenciam as configurações otimizadas são otimizados. Se você já tiver implantado cargas de trabalho do MySQL no cluster, será necessário reimplantá-las para executar com as configurações otimizadas.

A seguir