Este documento descreve como melhorar a performance das cargas de trabalho do MySQL no Google Kubernetes Engine (GKE) gerando configurações otimizadas no nível do aplicativo e do nó. Para mais detalhes, consulte Otimizar cargas de trabalho no GKE.
As otimizações do 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 performance medida usando o Sysbench 1.1.0. Considere como a carga de trabalho do MySQL é usada no cluster em comparação com esse caso de uso. Se o caso de uso for diferente, as otimizações recomendadas poderão precisar ser ajustadas para o 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, em seguida,
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 a versão 1.31.1-gke.12000 do GKE ou mais recente.
Otimizar cargas de trabalho do MySQL
Recomendamos o uso de um pool de nós dedicado para a carga de trabalho do MySQL. Por padrão, um novo pool de nós é criado quando você conclui as etapas a seguir.
Para otimizar a performance de uma carga de trabalho do MySQL, faça o seguinte:
Crie os manifestos com otimizações para a carga de trabalho do MySQL:
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.yamlSubstitua:
CLUSTER_VERSION: a versão do GKE. A recomendação é a versão 1.31.1-gke.12000 do GKE ou mais recente.MACHINE_TYPE: o tipo de máquina desejado.
A flag
--output-path=/tmp/manifests.yamlé opcional. Se não for especificada, 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 máquinas para o MySQL ser executado, o que é opcional. Para detalhes sobre como os tipos de máquina são especificados, consulte Sobre as ComputeClasses personalizadas
Analise as recomendações e modifique os manifestos para que eles incluam as otimizações preferidas. Para avaliar as recomendações, faça o seguinte:
- Analise a documentação do MySQL para avaliar a configuração recomendada para o 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, as otimizações recomendadas poderão precisar ser ajustadas para o contexto.
As otimizações do 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 performance medida usando o Sysbench 1.1.0.
Edite o arquivo de manifesto se quiser modificar ou adicionar à configuração.
Aplique os manifestos ao cluster usando o seguinte comando:
kubectl create -f /tmp/manifests.yaml
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-abc123Modifique o nome da ComputeClass para corresponder ao gerado. Em seguida, aplique o manifesto do pod ao cluster:
kubectl apply -f pod.yamlConfirme se o MySQL está usando a configuração otimizada. Para fazer isso, execute o seguinte comando para garantir que o MySQL esteja 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.cnfTambém é possível usar o comando
mysqlpara consultar as diretivas individuais definidas na configuração otimizada, comomax_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 fazem referência às configurações otimizadas são otimizados. Se você já implantou cargas de trabalho do MySQL no cluster, será necessário reimplantar essas cargas de trabalho para executá-las com as configurações otimizadas.
A seguir
- Saiba mais sobre a otimização de cargas de trabalho no GKE.
- Saiba mais sobre como implantar um cluster MySQL com estado no GKE.
- Saiba mais sobre as ComputeClasses do GKE.
- Para otimizar cargas de trabalho do Redis, consulte Otimizar a performance da carga de trabalho do Redis no GKE.