Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como monitorar várias instâncias do MySQL em execução na mesma máquina - Dicas e truques do ClusterControl


Requer ClusterControl 1.6 ou posterior. Aplica-se a instâncias/clusters baseados em MySQL.

Em algumas ocasiões, você pode querer executar várias instâncias do MySQL em uma única máquina. Você pode querer dar a diferentes usuários acesso aos seus próprios servidores MySQL que eles mesmos gerenciam, ou você pode querer testar uma nova versão do MySQL enquanto mantém uma configuração de produção existente intacta.

É possível usar um binário de servidor MySQL diferente por instância ou usar o mesmo binário para várias instâncias (ou uma combinação das duas abordagens). Por exemplo, você pode executar um servidor do MySQL 5.6 e um do MySQL 5.7, para ver como as diferentes versões lidam com uma determinada carga de trabalho. Ou você pode executar várias instâncias da versão mais recente do MySQL, cada uma gerenciando um conjunto diferente de bancos de dados.

Quer você use ou não binários de servidor distintos, cada instância executada deve ser configurada com valores exclusivos para vários parâmetros operacionais. Isso elimina o potencial de conflito entre instâncias. Você pode usar o MySQL Sandbox para criar várias instâncias do MySQL. Ou você pode usar mysqld_multi disponível no MySQL para iniciar ou parar qualquer número de processos mysqld separados rodando em diferentes portas TCP/IP e soquetes UNIX.

Nesta postagem do blog, mostraremos como configurar o ClusterControl para monitorar várias instâncias do MySQL em execução em um host.

Limitação de controle de cluster


No momento da escrita, o ClusterControl não oferece suporte ao monitoramento de várias instâncias em um host por grupo de cluster/servidor. Ele assume as seguintes práticas recomendadas:
  • Apenas uma instância MySQL por host (servidor físico ou máquina virtual).
  • A redundância de dados MySQL deve ser configurada no servidor N+1.
  • Todas as instâncias do MySQL estão sendo executadas com configuração uniforme em todo o cluster/grupo de servidores, por exemplo, porta de escuta, log de erros, datadir, basedir, socket são idênticos.

Com relação aos pontos mencionados acima, o ClusterControl assume que em um grupo de cluster/servidor:
  • As instâncias do MySQL são configuradas uniformemente em um cluster; mesma porta, o mesmo local de logs, diretório de base/dados e outras configurações críticas.
  • Ele monitora, gerencia e implanta apenas uma instância MySQL por host.
  • O cliente MySQL deve estar instalado no host e disponível no caminho executável para o usuário do SO correspondente.
  • O MySQL está vinculado a um endereço IP acessível pelo nó ClusterControl.
  • Ele continua monitorando as estatísticas do host, por exemplo, CPU/RAM/disco/rede para cada instância do MySQL individualmente. Em um ambiente com várias instâncias por host, você deve esperar estatísticas de host redundantes, pois ele monitora o mesmo host várias vezes.

Com as suposições acima, os seguintes recursos do ClusterControl não funcionam para um host com várias instâncias:

Backup - Percona Xtrabackup não suporta múltiplas instâncias por host e o mysqldump executado pelo ClusterControl somente se conecta ao socket padrão.

Gerenciamento de processos - ClusterControl usa o padrão 'pgrep -f mysqld_safe' para verificar se o MySQL está sendo executado nesse host. Com várias instâncias do MySQL, essa é uma abordagem de falso positivo. Como tal, a recuperação automática para nó/cluster não funcionará.

Gerenciamento de configuração - ClusterControl provisiona o diretório de configuração padrão do MySQL. Geralmente reside em /etc/ e /etc/mysql.

Solução


O monitoramento de várias instâncias do MySQL em uma máquina ainda é possível com o ClusterControl com uma solução simples. Cada instância do MySQL deve ser tratada como uma única entidade por grupo de servidores.

Neste exemplo, temos 3 instâncias do MySQL em um único host criado com o MySQL Sandbox:
ClusterControl monitorando várias instâncias no mesmo host
Criamos nossas instâncias MySQL usando os seguintes comandos:
$ su - sandbox
$ make_multiple_sandbox mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

Por padrão, o MySQL Sandbox cria instâncias mysql que escutam 127.0.0.1. É necessário configurar cada nó adequadamente para fazê-los escutar todos os endereços IP disponíveis. Aqui está o resumo de nossas instâncias MySQL no host:
[[email protected] multi_msb_mysql-5_7_23]$ cat default_connection.json 
{
"node1":  
    {
        "host":     "master",
        "port":     "15024",
        "socket":   "/tmp/mysql_sandbox15024.sock",
        "username": "[email protected]%",
        "password": "msandbox"
    }
,
"node2":  
    {
        "host":     "master",
        "port":     "15025",
        "socket":   "/tmp/mysql_sandbox15025.sock",
        "username": "[email protected]%",
        "password": "msandbox"
    }
,
"node3":  
    {
        "host":     "master",
        "port":     "15026",
        "socket":   "/tmp/mysql_sandbox15026.sock",
        "username": "[email protected]%",
        "password": "msandbox"
    }
}

O próximo passo é modificar a configuração das instâncias recém-criadas. Vá para my.cnf para cada um deles e faça o hash da variável bind_address:
[[email protected] multi_msb_mysql-5_7_23]$ ps -ef | grep mysqld_safe
sandbox  13086     1  0 08:58 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node1/my.sandbox.cnf
sandbox  13805     1  0 08:58 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node2/my.sandbox.cnf
sandbox  14065     1  0 08:58 pts/0    00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node3/my.sandbox.cnf
[[email protected] multi_msb_mysql-5_7_23]$ vi my.cnf
#bind_address = 127.0.0.1

Em seguida, instale o mysql em seu nó mestre e reinicie todas as instâncias usando o script restart_all.
[[email protected] multi_msb_mysql-5_7_23]$ yum install mysql
[[email protected] multi_msb_mysql-5_7_23]$ ./restart_all  
# executing "stop" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "stop" on node 1
executing "stop" on node 2
executing "stop" on node 3
# executing "start" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "start" on node 1
. sandbox server started
executing "start" on node 2
. sandbox server started
executing "start" on node 3
. sandbox server started

Do ClusterControl, precisamos realizar ‘Import’ para cada instância, pois precisamos isolá-las em um grupo diferente para que funcione.
ClusterControl importar servidor existente
Para node1, insira as seguintes informações em ClusterControl> Import:
ClusterControl importar servidor existente
Certifique-se de colocar portas apropriadas (diferentes para diferentes instâncias) e host (igual para todas as instâncias).

Você pode monitorar o progresso clicando no ícone Atividade/Trabalhos no menu superior.
ClusterControl importa detalhes do servidor existente
Você verá node1 na interface do usuário assim que o ClusterControl terminar o trabalho. Repita as mesmas etapas para adicionar outros dois nós com as portas 15025 e 15026. Você deverá ver algo como o abaixo quando eles forem adicionados:
Painel de controle de cluster
Ai está. Acabamos de adicionar nossas instâncias MySQL existentes no ClusterControl para monitoramento. Bom acompanhamento!

PS.:Para começar a usar o ClusterControl, clique aqui!