One place for hosting & domains

      Galera

      Como configurar um Galera Cluster com o MySQL em servidores Ubuntu 18.04.


      O autor selecionou o Free and Open Source Fund para receber uma doação como parte do programa Write for DOnations.

      Introdução

      O clustering proporciona alta disponibilidade ao seu banco de dados pela distribuição das alterações para servidores diferentes. Caso uma das instâncias falhe, as demais ficam rapidamente disponíveis para continuar a atender.

      Os clusters vêm em duas configurações gerais, ativo-passivo e ativo-ativo. Em clusters do tipo ativo-passivo, todas as gravações são feitas em um único servidor ativo e, em seguida, copiadas para um ou mais servidores passivos que estão prontos para assumir – apenas se houver uma falha ativa no servidor. Alguns clusters do tipo ativo-passivo também permitem operações SELECT em nós passivos. Em um cluster do tipo ativo-ativo, cada nó é de leitura-gravação e uma alteração feita em um nó é reproduzida para todos.

      O MySQL é um sistema de gerenciamento de banco de dados relacional de código aberto, sendo uma escolha popular para os bancos de dados SQL. O Galera é uma solução de clustering de banco de dados que permite que você configure clusters com múltiplos mestres usando replicação síncrona. O Galera consegue manter – de modo automático – dados em nós diferentes em sincronia, ao mesmo tempo em que permite que você envie consultas de leitura e gravação a qualquer um dos nós no cluster. Você pode aprender mais sobre o Galera na página de documentação oficial.

      Neste guia, você irá configurar o cluster Galera, do tipo ativo-ativo, no MySQL. A título de demonstração, você irá configurar e testar três Droplets do Ubuntu 18.04, que atuarão como nós no cluster. Essa quantidade de nós é a menor configuração possível de um cluster.

      Pré-requisitos

      Para continuar, você precisará de uma conta DigitalOcean, além do seguinte:

      • Três Droplets do Ubuntu 18.04 com rede privada habilitada, cada qual com um usuário não raiz com privilégios sudo.

      Embora os passos neste tutorial tenham sido escritos e testados em relação aos Droplets da DigitalOcean, grande parte deles também será aplicável a servidores que não sejam da DigitalOcean com a rede privada habilitada.

      Passo 1 — Adicionando os repositórios do MySQL para todos os servidores

      Neste passo, você adicionará os repositórios de pacotes do MySQL e Galera relevantes para cada um dos seus três servidores, de modo que você possa instalar a versão correta do MySQL e do Galera usadas neste tutorial.

      Nota: a Codership, empresa por trás do Galera Cluster, mantém o repositório do Galera, mas saiba que nem todos os repositórios externos são confiáveis. Certifique-se de instalar apenas a partir de fontes confiáveis.

      Neste tutorial, você usará o MySQL versão 5.7. Você começará adicionando o repositório externo do Ubuntu, mantido pelo projeto Galera, aos seus três servidores.

      Assim que os repositórios forem atualizados nos três servidores, você estará pronto para instalar o MySQL junto com o Galera.

      Primeiro, nos seus três servidores, adicione a chave de repositório do Galera com o comando apt-key, a qual o gerenciador de pacotes APT usará para verificar se o pacote é autêntico:

      • sudo apt-key adv --keyserver keyserver.ubuntu.com --recv BC19DDBA

      Depois de alguns segundos, você receberá o seguinte resultado:

      Output

      Executing: /tmp/apt-key-gpghome.RG5cTZjQo0/gpg.1.sh --keyserver keyserver.ubuntu.com --recv BC19DDBA gpg: key D669017EBC19DDBA: public key "Codership Oy <info@galeracluster.com>" imported gpg: Total number processed: 1 gpg: imported: 1

      Assim que tiver a chave confiável no banco de dados de cada servidor, poderá adicionar os repositórios. Para fazer isso, crie um novo arquivo chamado galera.list dentro do diretório /etc/apt/sources.list.d/ em cada servidor:

      • sudo nano /etc/apt/sources.list.d/galera.list

      No editor de texto, adicione as seguintes linhas, as quais tornarão os repositórios apropriados disponíveis ao gerenciador de pacotes APT:

      /etc/apt/sources.list.d/galera.list

      deb http://releases.galeracluster.com/mysql-wsrep-5.7/ubuntu bionic main
      deb http://releases.galeracluster.com/galera-3/ubuntu bionic main
      

      Salve e feche os arquivos em cada servidor (pressione CTRL + X, Y e, então, ENTER).

      Agora, os repositórios da Codership estão disponíveis aos seus três servidores. No entanto, é importante que você instrua a apt a dar preferência aos repositórios da Codership em vez de outros repositórios, no intuito de assegurar que ela instale as versões corrigidas do software necessárias para criar um cluster Galera. Para fazer isso, crie outro arquivo novo chamado galera.pref, dentro do diretório /etc/apt/preferences.d/ de cada servidor:

      • sudo nano /etc/apt/preferences.d/galera.pref

      Adicione as seguintes linhas ao editor de texto:

      /etc/apt/preferences.d/galera.pref

      # Prefer Codership repository
      Package: *
      Pin: origin releases.galeracluster.com
      Pin-Priority: 1001
      

      Salve e feche aquele arquivo e, em seguida, execute o seguinte comando em cada servidor para incluir os manifestos dos pacotes dos novos repositórios:

      Agora que você adicionou o repositório de pacotes com sucesso nos seus três servidores, está pronto para instalar o MySQL na seção seguinte.

      Passo 2 — Instalando o MySQL em todos os servidores

      Neste passo, você instalará o pacote da MySQL nos seus três servidores.

      Execute o comando a seguir nos três servidores para instalar uma versão do MySQL corrigida para funcionar com o Galera, além do pacote Galera.

      • sudo apt install galera-3 mysql-wsrep-5.7

      Você será solicitado a confirmar se deseja prosseguir com a instalação. Digite Y para continuar com a instalação. Durante a instalação, também será solicitado que defina uma senha para o usuário administrativo do MySQL. Defina uma senha forte e pressione ENTER para continuar.

      Assim que o MySQL estiver instalado, você irá desativar o perfil padrão do AppArmor para garantir que o Galera funcione corretamente, conforme a documentação oficial do Galera. O AppArmor é um módulo de kernel para o Linux que oferece a função de controle de acesso para serviços através de perfis de segurança.

      Desabilite o AppArmor, executando o seguinte em cada servidor:

      • sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/

      Esse comando adiciona um link simbólico do perfil MySQL ao diretório disable, o que desativa o perfil na inicialização.

      Em seguida, execute o seguinte comando para remover a definição do MySQL que já foi carregada no kernel.

      • sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld

      Assim que tiver instalado o MySQL e desabilitado o perfil do AppArmor no seu primeiro servidor, repita esses passos para seus outros dois servidores.

      Agora que você instalou o MySQL com sucesso em cada um dos três servidores, prossiga para o passo de configuração na seção seguinte.

      Passo 3 — Configurando o primeiro nó

      Neste passo, você irá configurar seu primeiro nó. Cada nó no cluster precisa ter uma configuração quase idêntica. Por conta disso, você fará toda a configuração no seu primeiro computador e, depois, irá copiá-la para os demais nós.

      Por padrão, o MySQL está configurado para verificar o diretório /etc/mysql/conf.d para obter configurações adicionais dos arquivos que terminam em .cnf. No seu primeiro servidor, crie um arquivo neste diretório com todas as diretivas específicas do seu cluster:

      • sudo nano /etc/mysql/conf.d/galera.cnf

      Adicione a seguinte configuração ao arquivo. A configuração especifica diferentes opções de cluster, detalhes sobre o servidor atual e os outros servidores no bem como as configurações relacionadas à replicação. Note que os endereços IP na configuração são os endereços privados dos seus respectivos servidores; substitua as linhas destacadas pelos endereços IP apropriados.

      /etc/mysql/conf.d/galera.cnf

      [mysqld]
      binlog_format=ROW
      default-storage-engine=innodb
      innodb_autoinc_lock_mode=2
      bind-address=0.0.0.0
      
      # Galera Provider Configuration
      wsrep_on=ON
      wsrep_provider=/usr/lib/galera/libgalera_smm.so
      
      # Galera Cluster Configuration
      wsrep_cluster_name="test_cluster"
      wsrep_cluster_address="gcomm://First_Node_IP,Second_Node_IP,Third_Node_IP"
      
      # Galera Synchronization Configuration
      wsrep_sst_method=rsync
      
      # Galera Node Configuration
      wsrep_node_address="This_Node_IP"
      wsrep_node_name="This_Node_Name"
      
      • A primeira seção modifica ou reestrutura as configurações do MySQL que permitirão que o cluster funcione corretamente. Por exemplo, o Galera não funcionará com o MyISAM ou mecanismos de armazenamento não transacionais semelhantes. Além disso, o mysqld não deve estar vinculado ao endereço IP do localhost. Você pode aprender sobre configurações mais detalhadamente na página de configuração do sistema do Galera Cluster.
      • A seção “Configuração de provedor do Galera” configura os componentes do MySQL que fornecem uma API de replicação do WriteSet. No seu caso, trata-se do Galera, propriamente dito, uma vez que o Galera é um provedor de wsrep (Replicação de WriteSet). Você especifica os parâmetros gerais para configurar o ambiente de replicação inicial. Isso não exige nenhuma personalização, mas você pode aprender mais sobre as opções de configuração do Galera na documentação.
      • A seção “Configuração do Galera Cluster” define o cluster, identificando os membros do cluster pelo endereço IP ou nome de domínio resolvível e criando um nome para o cluster – para garantir que os membros se juntem ao grupo correto. Você pode alterar o wsrep_cluster_name para algo mais significativo que test_cluster ou deixá-lo assim mesmo, mas deve atualizar o wsrep_cluster_address com os endereços IP privados dos seus três servidores.
      • A seção Configuração de sincronização do Galera define como o cluster estabelecerá a comunicação e sincronizará os dados entre os membros. Isso é usado apenas para a transferência de estado que acontece quando um nó fica online. Para sua configuração inicial, você está usando o rsync, pois ele pode ser encontrado facilmente e fará o que você irá precisar, por ora.
      • A seção Configuração de nó do Galera esclarece o endereço IP e o nome do servidor atual. Isso é útil quando se tenta dignosticar problemas nos registros e para referenciar cada servidor de várias maneiras. O wsrep_node_address deve corresponder ao endereço do computador em que você estiver trabalhando. Para ajudá-lo a identificar o nó nos arquivos de registros, você pode escolher o nome que desejar.

      Quando estiver satisfeito com seu arquivo de configuração de cluster, copie o conteúdo para sua área de transferência e, em seguida, salve e feche o arquivo.

      Agora que você configurou seu primeiro nó com sucesso, pode prosseguir com a configuração dos demais nós na próxima seção.

      Passo 4 — Configurando os nós restantes

      Neste passo, você irá configurar os dois nós restantes. No seu segundo nó, abra o arquivo de configuração:

      • sudo nano /etc/mysql/conf.d/galera.cnf

      Cole a configuração que você copiou do primeiro nó; depois, atualize a Configuração de nó do Galera para usar o endereço IP ou nome de domínio resolvível para o nó específico que estiver definindo. Por fim, atualize seu nome, que pode ser definido como qualquer coisa que ajude você a identificar o nó em seus arquivos de registro:

      /etc/mysql/conf.d/galera.cnf

      . . .
      # Galera Node Configuration
      wsrep_node_address="This_Node_IP"
      wsrep_node_name="This_Node_Name"
      . . .
      
      

      Salve e saia do arquivo.

      Assim que tiver completado esses passos, repita-os para o terceiro nó.

      Você está quase pronto para iniciar o cluster. Antes disso, porém, certifique-se de que as portas apropriadas estão abertas em seu firewall.

      Passo 5 — Abrindo o firewall em cada um dos servidores

      Neste passo, você irá configurar seu firewall para que as portas necessárias – para a comunicação entre nós – estejam abertas. Em cada um dos servidores, verifique o status do firewall executando:

      Neste caso, apenas o SSH é permitido:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

      Uma vez que, neste caso, somente é permitido o tráfego SSH, você precisará adicionar regras para o tráfego do MySQL e do Galera. Se tentasse iniciar o cluster, ele falharia por causa dessas regras do firewall.

      O Galera pode usar quatro portas:

      • 3306, para conexões de cliente do MySQL e Transferência de snapshots (instantâneos) de Estado que usam o método mysqldump.
      • 4567, para o tráfego de replicação do Galera. A replicação multicast usa tanto o transporte UDP quanto o TCP nessa porta.
      • 4568, para Transferência incremental de estado.
      • 4444, para todas as demais transferências de snapshots de estado.

      Neste exemplo, você abrirá todas as quatro portas enquanto faz sua configuração. Assim que tiver confirmado que a replicação está funcionando, você vai desejar fechar as portas que não estiver efetivamente usando e restringir o tráfego apenas aos servidores no cluster.

      Abra as portas com os seguintes comandos:

      • sudo ufw allow 3306,4567,4568,4444/tcp
      • sudo ufw allow 4567/udp

      Nota: dependendo do que mais estiver em execução em seus servidores, talvez você queira restringir o acesso imediatamente. O guia sobre Fundamentos do UFW: regras e comandos de firewall comuns poderá ajudar com isso.

      Após ter configurado seu firewall no primeiro nó, crie as mesmas configurações de firewall no segundo e terceiro nós.

      Agora que você configurou os firewalls com sucesso, está pronto para iniciar o cluster no passo seguinte.

      Passo 6 — Inicializando o cluster

      Neste passo, você irá inicializar o Galera Cluster do seu MySQL. Antes disso, porém, você irá habilitar o serviço systemd do MySQL, de modo que o MySQL será iniciado automaticamente sempre que o servidor for reinicializado.

      Habilite o MySQL para iniciar na inicialização nos três servidores:

      Use o seguinte comando em todos os três servidores para habilitar o serviço systemd do MySQL:

      • sudo systemctl enable mysql

      Você verá o resultado a seguir, que mostra que o serviço foi vinculado com sucesso à lista de serviços da inicialização:

      Output

      Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service.

      Agora que habilitou o mysql para iniciar na inicialização de todos os servidores, está pronto para prosseguir e iniciar o cluster.

      Inicie o primeiro nó

      Para iniciar o primeiro nó, você precisará usar um script de inicialização especial. A maneira como você configurou seu cluster faz com que cada nó que fique online tente se conectar a pelo menos um outro nó especificado em seu arquivo Galera.cnf para obter seu estado inicial. Sem usar o script mysqld_bootstrap que permite que o systemd passe o parâmetro --wsrep-new-cluster, um systemctl start mysql normal falharia, pois não há nós em execução com os quais o primeiro nó possa se conectar.

      Execute o seguinte no seu primeiro servidor:

      Esse comando não exibirá nenhum resultado no caso de execução bem-sucedida. Quando este script for bem-sucedido, o nó será registrado como parte do cluster e você poderá vê-lo com o seguinte comando:

      • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

      Após digitar sua senha, verá o seguinte resultado, indicando que há um nó no cluster:

      Output

      +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+

      Nos nós restantes, você poderá iniciar o mysql normalmente. Eles irão procurar por qualquer membro da lista do cluster que esteja online e, quando encontrarem algum, irão juntar-se ao cluster.

      Inicie o segundo nó

      Agora, você pode iniciar o segundo nó. Inicie o mysql:

      • sudo systemctl start mysql

      Nenhum resultado será exibido no caso de execução bem-sucedida. Você verá o tamanho do seu cluster aumentar à medida que cada nó ficar online:

      • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

      Você verá o seguinte resultado que indica que o segundo nó se juntou ao cluster e que há dois nós no total.

      Output

      +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+

      Inicie o terceiro nó

      Agora, é hora de iniciar o terceiro nó. Inicie o mysql:

      • sudo systemctl start mysql

      Execute o seguinte comando para obter o tamanho do cluster:

      • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

      Você verá o seguinte resultado, que indica que o terceiro nó se juntou ao cluster e que há um total de três nós no cluster.

      Output

      +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+

      Neste ponto, todo o cluster está online e se comunicando com sucesso. Em seguida, você poderá assegurar-se de que a configuração está funcionando testando a replicação na seção seguinte.

      Passo 7 — Testando a replicação

      Até aqui, você percorreu os passos que fizeram com que seu cluster pudesse executar a replicação de qualquer nó para qualquer outro nó – processo conhecido como replicação ativa-ativa. Neste passo, você testará e verá se a replicação está funcionando como esperado.

      Escrever para o primeiro nó

      Você começará fazendo alterações no banco de dados no seu primeiro nó. Os comandos a seguir criarão um banco de dados chamado playground e uma tabela dentro desse banco de dados chamada equipment.

      • mysql -u root -p -e 'CREATE DATABASE playground;
      • CREATE TABLE playground.equipment ( id INT NOT NULL AUTO_INCREMENT, type VARCHAR(50), quant INT, color VARCHAR(25), PRIMARY KEY(id));
      • INSERT INTO playground.equipment (type, quant, color) VALUES ("slide", 2, "blue");'

      No comando anterior, a instrução CREATE DATABASE cria um banco de dados chamado playground. A instrução CREATE cria uma tabela chamada equipment dentro do banco de dados playground, tendo uma coluna de identificador de incremento automático chamada id e outras colunas. As colunas type, quant e color são definidas para armazenar o tipo, quantidade e cor do equipamento, respectivamente. A instrução INSERT insere uma entrada do tipo slide, quantidade 2 e cor blue.

      Agora, você possui um valor na sua tabela.

      Leitura e gravação no segundo nó

      Em seguida, observe o segundo nó para verificar se a replicação está funcionando:

      • mysql -u root -p -e 'SELECT * FROM playground.equipment;'

      Os dados que você digitou no primeiro nó estarão visíveis aqui no segundo, provando que a replicação está funcionando:

      Output

      +----+-------+-------+-------+ | id | type | quant | color | +----+-------+-------+-------+ | 1 | slide | 2 | blue | +----+-------+-------+-------+

      A partir deste mesmo nó, grave os dados para o cluster:

      • mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("swing", 10, "yellow");'

      Leitura e gravação no terceiro nó

      A partir do terceiro nó, você poderá ler todos esses dados, consultando a tabela novamente:

      • mysql -u root -p -e 'SELECT * FROM playground.equipment;'

      Você verá o seguinte resultado, que mostra as duas linhas:

      Output

      +----+-------+-------+--------+ | id | type | quant | color | +----+-------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | +----+-------+-------+--------+

      Novamente, você pode adicionar outro valor a partir desse nó:

      • mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("seesaw", 3, "green");'

      Leitura no primeiro nó

      De volta ao primeiro nó, você pode verificar se os seus dados estão disponíveis em toda parte:

      • mysql -u root -p -e 'SELECT * FROM playground.equipment;'

      Você verá o seguinte resultado, que indica que as linhas estão disponíveis no primeiro nó.

      Output

      +----+--------+-------+--------+ | id | type | quant | color | +----+--------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | | 3 | seesaw | 3 | green | +----+--------+-------+--------+

      Com isto, você verificou com sucesso que consegue gravar em todos os nós e que a replicação está sendo executada corretamente.

      Conclusão

      Neste ponto, você possui tem um Galera Cluster de trés nós configurado e operacional. Se planeja usar um Galera Cluster em uma situação de produção, é recomendável que comece com não menos que cinco nós.

      Antes do uso na produção, talvez você queira examinar alguns outros agentes de transferência de snapshots de estado (sst), como o xtrabackup, que permite a configuração rápida de novos nós – sem grandes interrupções nos seus nós ativos. Isso não afeta a replicação propriamente dita, mas pode ser fonte de preocupação durante a inicialização dos nós.

      Você também pode ter interesse em outras soluções de cluster para o MySQL e, nesse caso, pode verificar nosso tutorial de Como criar um cluster MySQL de vários nós no Ubuntu 18.04. Se estiver procurando testar uma solução de banco de dados gerenciada, consulte a documentação sobre Bancos de dados gerenciados da DigitalOcean.



      Source link

      Cómo configurar de un clúster de Galera con MySQL en servidores de Ubuntu 18.04


      El autor seleccionó la Free and Open Source Fund para recibir una donación como parte del programa Write for DOnations.

      Introducción

      El uso de clústeres añade una alta disponibilidad a su base de datos mediante la distribución de cambios en servidores diferentes. En caso de que una de las instancias no se produzca, otras están rápidamente disponibles para continuar con el servicio.

      Los clústeres vienen con dos configuraciones generales: activo-pasivo y activo-activo. En los clústeres activo-pasivo, todo lo que escribe queda en un único servidor activo y luego se copia a uno o más servidores pasivos que están preparados para tomar el control solo en caso de que se produzca una falla en el servidor activo. Algunos clústeres activo-pasivo también permiten operaciones SELECT en nodos pasivos. En un clúster activo, todos los nodos son de lectura-escritura y cualquier cambio que se haga en uno de ellos se replica en el resto.

      MySQL es un sistema de administración de bases de datos relacionales de código abierto que representa una opción popular para bases de datos SQL. Galera es una solución de clústeres de bases de datos que le permite configurar clústeres multimaestro mediante reproducción sincrónica. Galera administra de forma automática la sincronización de los datos sobre diferentes nodos y le permite enviar consultas de lectura y escritura a cualquiera de los nodos del clúster. Puede obtener más información sobre Galera en la página de documentación oficial.

      A lo largo de esta guía, configurará un clúster de Galera de MySQL activo-activo. A modo de prueba, confgurará y probará tres Droplets de Ubuntu 18.04 que funcionarán como nodos del clúster. Esta cantidad de nodos es el clúster configurable más pequeño.

      Requisitos previos

      Para continuar, necesitará una cuenta de DigitalOcean y lo siguiente:

      • Tres Droplets de Ubuntu 18.04 con redes privadas habilitadas, cada uno con un usuario no root con privilegios sudo.

      Aunque los pasos de este tutorial se escribieron y probaron con Droplets de DigitalOcean, gran parte de ellos también serán aplicables a servidores que no pertenezcan a DigitalOcean y tengan redes privadas habilitadas.

      Paso 1: Añadir los repositorios de MySQL a todos los servidores

      En este paso, agregará los repositorios de paquetes de MySQL y Galera pertinentes a cada uno de sus tres servidores para poder instalar las versiones correctas de MySQL y Galera que se utilizan en este tutorial.

      Nota: Codership, la empresa responsable de Galera Cluster, se encarga del mantenimiento del repositorio de Galera. Sin embargo, deber tener en cuenta que no todos los repositorios externos son confiables. Asegúrese de realizar la instalación únicamente desde fuentes confiables.

      En este tutorial, usará la versión 5.7 de MySQL. Comenzará añadiendo el repositorio externo de Ubuntu, cuyo mantenimiento está a cargo del proyecto de Galera, a sus tres servidores.

      Una vez que los repositorios se actualicen en los tres servidores, estará listo para instalar MySQL junto con Galera.

      Primero, en sus tres servidores, añada la clave del repositorio de Galera con el comando apt-key que el administrador de paquetes APT usará para verificar que el paquete sea auténtico:

      • sudo apt-key adv --keyserver keyserver.ubuntu.com --recv BC19DDBA

      Después de unos segundos, verá el siguiente resultado:

      Output

      Executing: /tmp/apt-key-gpghome.RG5cTZjQo0/gpg.1.sh --keyserver keyserver.ubuntu.com --recv BC19DDBA gpg: key D669017EBC19DDBA: public key "Codership Oy <info@galeracluster.com>" imported gpg: Total number processed: 1 gpg: imported: 1

      Una vez que tenga la clave de confianza en la base de datos de todos los servidores, podrá añadir los repositorios. Para hacerlo, cree un nuevo archivo llamado galera.list dentro del directorio /etc/apt/sources.list.d/ en cada servidor:

      • sudo nano /etc/apt/sources.list.d/galera.list

      En el editor de texto, añada las siguientes líneas. Con esto, los repositorios correspondientes quedarán a disposición del administrador de paquetes de APT:

      /etc/apt/sources.list.d/galera.list

      deb http://releases.galeracluster.com/mysql-wsrep-5.7/ubuntu bionic main
      deb http://releases.galeracluster.com/galera-3/ubuntu bionic main
      

      Guarde y cierre los archivos en cada servidor (presione CTRL + X, Y y luego ENTER).

      Los repositorios de Codership ahora están disponibles para sus tres servidores. Sin embargo, es importante que indique a apt priorizar los repositorios de Codership por sobre los otros para asegurarse de que instale las versiones parcheadas del software necesario para crear un clúster de Galera. Para hacer esto, cree otro archivo nuevo llamado galera.pref dentro del directorio /etc/apt/preferences.d/ de cada servidor:

      • sudo nano /etc/apt/preferences.d/galera.pref

      Añada las siguientes líneas al editor de texto:

      /etc/apt/preferences.d/galera.pref

      # Prefer Codership repository
      Package: *
      Pin: origin releases.galeracluster.com
      Pin-Priority: 1001
      

      Guarde y cierre ese archivo, y luego ejecute el siguiente comando en cada servidor para incluir los manifiestos de paquetes desde los repositorios nuevos:

      Ahora que añadió correctamente el repositorio de paquetes en sus tres servidores, estará listo para instalar MySQL en la siguiente sección.

      Paso 2: Instalar MySQL en todos los servidores

      Durante este paso, instalará el paquete de MySQL en sus tres servidores.

      Ejecute el siguiente comando en los tres servidores para instalar una versión de MySQL parcheada a fin de trabajar con Galera y el paquete de Galera.

      • sudo apt install galera-3 mysql-wsrep-5.7

      Se le solicitará confirmar si desea continuar con la instalación. Introduzca Y para hacerlo. Durante la instalación, también se le solicitará que establezca una contraseña para el usuario administrativo de MySQL. Establezca una contraseña segura y presione ENTER para continuar.

      Una vez que MySQL esté instalado, desactive el perfil de AppArmor predeterminado para asegurarse de que Galera funcione correctamente, según la documentación oficial de Galera. AppArmor es un módulo de kernel para Linux que ofrece funciones de control de acceso para los servicios a través de los perfiles de seguridad.

      Desactive AppArmor ejecutando lo siguiente en cada servidor:

      • sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/

      Este comando añade un enlace simbólico del perfil de MySQL al directorio disable, lo que deshabilita el perfil en el inicio.

      A continuación, ejecute el siguiente comando para eliminar la definición de MySQL que ya se cargó en el kernel

      • sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld

      Una vez que haya instalado MySQL y desactivado el perfil AppArmor en su primer servidor, repita estos pasos para sus otros dos servidores.

      Ahora que instaló MySQL correctamente en cada uno de los tres servidores, puede continuar con el paso de configuración de la siguiente sección.

      Paso 3: Configurar el primer nodo

      En este paso, configurará su primer nodo. Cada nodo del clúster tiene que tener una configuración casi idéntica. Por eso, hará toda la configuración en su primera máquina y luego la copiará a los otros nodos.

      De forma predeterminada, MySQL está configurado para verificar el directorio /etc/mysql/conf.d a fin de obtener ajustes de configuración adicionales desde los archivos que terminan en .cnf. En su primer servidor, cree un archivo en este directorio con todas sus directivas específicas por clúster:

      • sudo nano /etc/mysql/conf.d/galera.cnf

      Añada la siguiente configuración al archivo. En la configuración se especifican diferentes opciones de clústeres, detalles sobre el servidor actual y los otros servidores del clúster, además de ajustes relacionados con la replicación. Tenga en cuenta que las direcciones IP de la configuración son las direcciones privadas de sus servidores respectivos; sustituya las líneas resaltadas por las direcciones IP correspondientes.

      /etc/mysql/conf.d/galera.cnf

      [mysqld]
      binlog_format=ROW
      default-storage-engine=innodb
      innodb_autoinc_lock_mode=2
      bind-address=0.0.0.0
      
      # Galera Provider Configuration
      wsrep_on=ON
      wsrep_provider=/usr/lib/galera/libgalera_smm.so
      
      # Galera Cluster Configuration
      wsrep_cluster_name="test_cluster"
      wsrep_cluster_address="gcomm://First_Node_IP,Second_Node_IP,Third_Node_IP"
      
      # Galera Synchronization Configuration
      wsrep_sst_method=rsync
      
      # Galera Node Configuration
      wsrep_node_address="This_Node_IP"
      wsrep_node_name="This_Node_Name"
      
      • La primera sección modifica o vuelve a confirmar la configuración de MySQL que permitirá que el clúster funcione correctamente. Por ejemplo, Galera no funcionará con MyISAM ni con motores de almacenamiento no transaccional similares y mysqld no debe estar vinculado a la dirección IP de localhost. Puede obtener más información sobre la configuración en la página de configuración del sistema Galera Cluster.
      • En la sección “Configuración de proveedor de Galera” configura los componentes de MySQL que ofrecen una API de reproducción WriteSet. Esto significa Galera, en su caso, ya que es un proveedor *wsrep *(replicación WriteSet). Usted especifica los parámetros generales para configurar el entorno de reproducción inicial. Esto no requiere personalización, pero puede obtener más información sobre las opciones de configuración de Galera en la documentación.
      • La sección “Configuración de Galera Cluster” define el clúster e identifica los miembros del clúster por dirección IP o nombre de dominio resoluble y crean un nombre para el clúster, a fin de garantizar que los miembros se unan al grupo correcto. Puede cambiar wsrep_cluster_name a algo más significativo que test_cluster, o dejarlo como está, pero debe actualizar wsrep_cluster_address con las direcciones IP privadas de sus tres servidores.
      • En la sección Configuración de sincronización de Galera se define la forma en que el clúster se comunicará y sincronizará los datos entre los miembros. Esto se utiliza solo para la transferencia del estado que sucede cuando se conecta un nodo. Para su configuración inicial, utilizará rsync porque suele estar disponible y hace lo que necesitará por ahora.
      • En la sección Configuración de nodos de Galera, se aclaran la dirección IP y el nombre del servidor actual. Esto es útil al tratar de diagnosticar problemas en registros y hacer referencia a cada servidor de varias formas. La wsrep_node_address debe coincidir con la dirección de la máquina que utilice, pero puede elegir cualquier nombre que desee para poder identificar el nodo en los archivos de registro.

      Cuando esté satisfecho con su archivo de configuración de clúster, copie el contenido al portapapeles y, luego, guarde y cierre el archivo.

      Ahora que configuró correctamente su primer nodo, puede configurar los nodos restantes en la siguiente sección.

      Paso 4: Configurar los nodos restantes

      Durante este paso, configurará los dos nodos restantes. En su segundo nodo, abra el archivo de configuración:

      • sudo nano /etc/mysql/conf.d/galera.cnf

      Pegue la configuración que copió del primer nodo y luego actualice la Configuración de nodos de Galera para usar la dirección IP o el nombre de dominio resoluble para el nodo específico que configurará. Finalmente, actualice su nombre. Podrá elegir cualquiera que le sirva para identificar el nodo en sus archivos de registro:

      /etc/mysql/conf.d/galera.cnf

      . . .
      # Galera Node Configuration
      wsrep_node_address="This_Node_IP"
      wsrep_node_name="This_Node_Name"
      . . .
      
      

      Guarde el archivo y ciérrelo.

      Una vez completados estos pasos, repítalos en el tercer nodo.

      Ya casi está listo para configurar el clúster. No obstante, antes de hacerlo, asegúrese de que los puertos correspondientes estén abiertos en su firewall.

      Paso 5: Abrir el firewall en todos los servidores

      A lo largo de este paso, configurará su firewall a fin de que se abran los puertos necesarios para la comunicación entre nodos. En cada servidor, compruebe el estado del firewall ejecutando lo siguiente:

      En este caso, solo se permite usar SSH:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

      Debido a que solo se permite el tráfico SSH en este caso, deberá añadir reglas para el tráfico de MySQL y Galera. Si intentara iniciar el clúster, se produciría un error debido a estas reglas firewall.

      Galera puede usar cuatro puertos:

      • 3306: para conexiones de clientes de MySQL y transferencia de imagen de estado, que utilizan el método mysqldump.
      • 4567: para tráfico de reproducción de Galera Cluster. La reproducción de multidifución utiliza tanto el transporte UDP como el TCP en este puerto.
      • 4568: para transferencia de estado incremental.
      • 4444: para todas las demás transferencias de imagen de estado.

      En este ejemplo, abrirá los cuatro puertos mientras procede con la configuración. Una vez que confirme que la reproducción funciona, debe cerrar los puertos que no esté usando y restringir el tráfico de modo que solo sea posible para servidores del clúster.

      Abra los puertos con los siguientes comandos:

      • sudo ufw allow 3306,4567,4568,4444/tcp
      • sudo ufw allow 4567/udp

      Nota: Según los demás procesos que estén en ejecución en sus servidores, es posible que le convenga restringir el acceso de inmediato. La guía Nociones básicas de UFW: Comandos y reglas de firewall comunes puede ser útil para esto.

      Después de configurar su firewall en el primer nodo, cree la misma configuración de firewall en el segundo y el tercero.

      Ahora que configuró los firewalls correctamente, estará listo para iniciar el clúster en el siguiente paso.

      Paso 6: Iniciar el clúster

      En este paso, iniciará su clúster de Galera de MySQL. Sin embargo, primero habilitará el servicio systemd de MySQL para que MySQL se inicie de forma automática cuando se reinicie el servidor.

      Habilitar MySQL para que se cargue en el inicio en los tres servidores

      Use el siguiente comando en los tres servidores para habilitar el servicio systemd de MySQL:

      • sudo systemctl enable mysql

      Verá el siguiente resultado, que muestra que el servicio se vinculó correctamente a la lista de servicios de inicio:

      Output

      Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service.

      Ahora que habilitó mysql para cargarse en el inicio en todos los servidores, estará listo para continuar con la activación del clúster.

      Configure el primer nodo

      Para configurar el primer nodo, deberá usar una secuencia de comandos de inicio especial. Por la manera en que configuró su clúster, cada nodo que se conecte intentará establecer conexión con al menos otro nodo especificado en su archivo galera.cnf para obtener su estado inicial. Sin usar la secuencia de comandos mysqld_bootstrap que permite que systemd pase el parámetro --wsrep-new-cluster, un systemctl start mysql normal fallaría porque no hay en ejecución nodos con los que el primer nodo se pueda conectar.

      Ejecute lo siguiente en su primer servidor:

      Con este comando no se mostrará un resultado tras una ejecución correcta. Cuando esta secuencia de comandos es exitosa, el nodo se registra como parte del clúster y puede verlo con el siguiente comando:

      • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

      Después de ingresar su contraseña, verá el siguiente resultado, que indica que hay un nodo en el clúster:

      Output

      +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+

      En los nodos restantes, puede iniciar mysql de forma normal. Buscarán cualquier integrante de la lista de clústeres que esté en línea y, cuando lo encuentren, se sumarán a él.

      Activar el segundo nodo

      Ahora, puede activar el segundo nodo. Inicie mysql:

      • sudo systemctl start mysql

      No se mostrará ningún resultado tras una ejecución correcta. Verá que aumenta el tamaño de su clúster a medida que cada nodo se vuelve disponible en línea:

      • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

      Verá el siguiente resultado que indica que el segundo nodo se ha sumó al clúster y que hay dos nodos en total.

      Output

      +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+

      Active el tercer nodo

      Ahora, es el momento de activar el tercer nodo. Inicie mysql:

      • sudo systemctl start mysql

      Ejecute el siguiente comando para encontrar el tamaño del clúster:

      • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

      Verá el siguiente resultado, que indica que el tercer nodo se sumó al clúster y que la cantidad total de nodos del clúster es tres.

      Output

      +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+

      En este punto, todo el clúster se encuentra en línea y se comunica de forma correcta. A continuación, puede confirmar la configuración de trabajo probando la replicación en la siguiente sección.

      Paso 7: Probar la replicación

      Siguió los pasos hasta este punto para que su clúster pueda realizar la replicación de cualquier nodo a cualquier nodo, conocida como “replicación activo-activo”. En este paso, probará y verá si la replicación funciona de la forma prevista.

      Escribir el primer nodo

      Comenzará por realizar cambios en la base de datos de su primer nodo. Con los siguientes comandos se crearán una base de datos denominada playground y, dentro de esta, una tabla llamada equipment.

      • mysql -u root -p -e 'CREATE DATABASE playground;
      • CREATE TABLE playground.equipment ( id INT NOT NULL AUTO_INCREMENT, type VARCHAR(50), quant INT, color VARCHAR(25), PRIMARY KEY(id));
      • INSERT INTO playground.equipment (type, quant, color) VALUES ("slide", 2, "blue");'

      En el comando anterior, la instrucción CREATE DATABASE crea una base de datos denominada playground. La instrucción CREATE genera dentro de la base de datos playground una tabla denominada equipment, que tiene una columna de identificación llamada id que se incrementa de forma automática además de otras columnas. Las columnas type, quant y color están definidas para almacenar el tipo, la cantidad y el color del equipo respectivamente. La instrucción INSERT introduce un registro de tipo slide, cantidad 2 y color blue.

      Ahora, tiene un valor en su tabla.

      Leer y escribir en el segundo nodo

      A continuación, consulte el segundo nodo para verificar que la replicación funcione:

      • mysql -u root -p -e 'SELECT * FROM playground.equipment;'

      Los datos que ingresó en el primer nodo serán visibles aquí, en el segundo, lo cual demuestra que la replicación funciona:

      Output

      +----+-------+-------+-------+ | id | type | quant | color | +----+-------+-------+-------+ | 1 | slide | 2 | blue | +----+-------+-------+-------+

      Desde este mismo nodo, escriba datos en el clúster:

      • mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("swing", 10, "yellow");'

      Leer y escribir en el tercer nodo

      Desde el tercer nodo, puede leer todos estos datos consultando la tabla de nuevo:

      • mysql -u root -p -e 'SELECT * FROM playground.equipment;'

      Verá el siguiente resultado que muestra las dos filas:

      Output

      +----+-------+-------+--------+ | id | type | quant | color | +----+-------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | +----+-------+-------+--------+

      De nuevo, puede añadir otro valor desde este nodo:

      • mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("seesaw", 3, "green");'

      Leer el primer nodo

      Al regresar al primer nodo, puede verificar que sus datos estén disponibles en todos los lugares:

      • mysql -u root -p -e 'SELECT * FROM playground.equipment;'

      Verá el siguiente resultado, que indica que las filas están disponibles en el primer nodo.

      Output

      +----+--------+-------+--------+ | id | type | quant | color | +----+--------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | | 3 | seesaw | 3 | green | +----+--------+-------+--------+

      De esta forma, habrá verificado correctamente que puede escribir en todos los nodos y que la replicación se realiza de forma adecuada.

      Conclusión

      En este punto, dispondrá de un clúster de prueba de Galera de tres nodos activo configurado. Si planea usar un clúster de Galera en para producción, se le recomienda comenzar con al menos cinco nodos.

      Antes de la aplicación en producción, es posible que desee ver algunos de los otros agentes de transferencia de imagen de estado (sst) como xtrabackup, que le permite configurar nuevos nodos de forma rápida y sin grandes interrupciones en sus nodos activos. Esto no afecta la replicación real, pero es un factor que debe tenerse en cuenta cuando se inicializan los nodos.

      También podrían interesarle otras soluciones de clústeres para MySQL, en cuyo caso puede verificar nuestro tutorial Cómo crear un clúster de MySQL de varios nodos en Ubuntu 18.04. Si desea probar una solución de base de datos administrada, consulte nuestra documentación sobre Bases de datos gestionadas de DigitalOcean.



      Source link

      Настройка кластера Galera с MySQL на серверах Ubuntu 18.04


      Автор выбрал фонд Free and Open Source Fund для получения пожертвования в рамках программы Write for DOnations.

      Введение

      Кластеризация повышает уровень доступности базы данных за счет распространения изменений на разные серверы. В случае выхода из строя одного из экземпляров другие остаются доступными для работы.

      Существует две стандартные конфигурации кластеров: активный-пассивный и активный-активный. В кластерах вида «активный-пассивный» все операции записи выполняются на одном активном сервере, а затем копируются на один или несколько пассивных серверов, которые активируются только в случае неисправности активного сервера. Некоторые кластеры вида «активный-пассивный» также поддерживают выполнение операций SELECT на пассивных узлах. В кластерах вида «активный-активный» каждый узел используется для чтения и записи, и изменения на одном узле воспроизводятся на всех остальных узлах.

      MySQL — популярная реляционная СУБД с открытым исходным кодом для баз данных SQL. Galera — решение кластеризации баз данных, которое позволяет настраивать кластеры с несколькими главными узлами, используя синхронную репликацию. Galera автоматически обрабатывает размещение данных на разных узлах, позволяя при этом отправлять запросы чтения и записи на любой узел кластера. Дополнительную информацию о Galera можно найти на странице официальной документации.

      В этом обучающем руководстве мы настроим кластер MySQL Galera вида «активный-активный». Для демонстрационных целей мы выполним настройку и тестирование трех дроплетов Ubuntu 18.04, которые будут выступать в качестве узлов кластера. Такое количество узлов представляет собой наименьший настраиваемый кластер.

      Предварительные требования

      Для этого вам потребуется учетная запись DigitalOcean, а также следующее:

      • Три дроплета Ubuntu 18.04 с включенной поддержкой частных сетей, на каждом имеется пользователь sudo без привилегий root.

      Хотя данное обучающее руководство написано для дроплетов DigitalOcean и протестировано с ними, многие из шагов также применимы к другим серверам с включенными частными сетями.

      Шаг 1 — Добавление репозиториев MySQL на все серверы

      На этом шаге мы добавим репозитории пакетов MySQL и Galera на каждый из трех серверов, чтобы вы могли установить подходящую версию MySQL и Galera в соответствии с указаниями этого обучающего руководства.

      Примечание. Компания Codership, создавшая Galera Cluster, обслуживает репозиторий Galera, но следует помнить, что не все внешние репозитории являются надежными. Установку следует выполнять только из доверенных источников.

      В этом обучающем руководстве мы будем использовать MySQL версии 5.7. Вначале мы добавим внешний репозиторий Ubuntu, обслуживаемый проектом Galera, на все три ваших сервера.

      После обновления репозиториев на всех трех серверах мы будем готовы выполнить установку MySQL вместе с Galera.

      Вначале добавьте на все три сервера ключ репозитория Galera с помощью команды apt-key, которую диспетчер пакетов APT использует для проверки подлинности пакета:

      • sudo apt-key adv --keyserver keyserver.ubuntu.com --recv BC19DDBA

      Через несколько секунд вы увидите следующее:

      Output

      Executing: /tmp/apt-key-gpghome.RG5cTZjQo0/gpg.1.sh --keyserver keyserver.ubuntu.com --recv BC19DDBA gpg: key D669017EBC19DDBA: public key "Codership Oy <info@galeracluster.com>" imported gpg: Total number processed: 1 gpg: imported: 1

      Когда в базе данных каждого сервера будет доверенный ключ, вы сможете добавить репозитории. Для этог осоздайте новый файл с именем galera.list в директории /etc/apt/sources.list.d/ на каждом сервере:

      • sudo nano /etc/apt/sources.list.d/galera.list

      Добавьте в текстовом редакторе следующие строки, которые сделают соответствующие репозитории доступными для диспетчера пакетов APT:

      /etc/apt/sources.list.d/galera.list

      deb http://releases.galeracluster.com/mysql-wsrep-5.7/ubuntu bionic main
      deb http://releases.galeracluster.com/galera-3/ubuntu bionic main
      

      Сохраните и закройте файлы на каждом сервере (нажмите CTRL + X, Y, а затем ENTER).

      Теперь репозитории Codership доступны для всех трех ваших серверов. Однако важно указать apt приоритет репозиториев Codership перед другими репозиториями. Это необходимо для установки последних исправлений программного обеспечения, необходимого для создания кластера Galera. Для этого следует создать новый файл с именем galera.pref в директории /etc/apt/preferences.d/ на каждом сервере:

      • sudo nano /etc/apt/preferences.d/galera.pref

      Добавьте в текстовом редакторе следующие строки:

      /etc/apt/preferences.d/galera.pref

      # Prefer Codership repository
      Package: *
      Pin: origin releases.galeracluster.com
      Pin-Priority: 1001
      

      Сохраните и закройте файл, а затем запустите следующую команду на каждом сервере, чтобы добавить манифесты пакетов из новых репозиториев:

      Мы успешно добавили репозиторий пакетов на все три сервера и можем переходить к установке MySQL.

      Шаг 2 — Установка MySQL на все серверы

      На этом шаге мы выполним установку пакета MySQL на все три сервера.

      Запустите следующую команду на всех трех серверах, чтобы установить версию MySQL с исправлениями для работы с Galera, а также сам пакет Galera.

      • sudo apt install galera-3 mysql-wsrep-5.7

      Подтвердите установку в соответствующем диалоге. Введите Y для выполнения установки. Во время установки вам будет предложено задать пароль администратора MySQL. Выберите надежный пароль и нажмите ENTER, чтобы продолжить.

      После установки MySQL мы отключим профиль AppArmor по умолчанию, чтобы обеспечить надлежащую работу Galera. Данное требование содержится в официальной документации по Galera. AppArmor — это модуль ядра для Linux, обеспечивающий функции контроля доступа для служб через профили безопасности.

      Для отключения AppArmor нужно выполнить на каждом сервере следующую команду:

      • sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/

      Эта команда добавляет символьную ссылку профиля MySQL в директорию disable, которая отключает профиль при загрузке.

      Затем запустите следующую команду для удаления определения MySQL, которое уже загружено в ядро.

      • sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld

      После установки MySQL и отключения профиля AppArmor на первом сервере следует повторить эти шаги для двух других серверов.

      Мы успешно установили MySQL на каждом из трех серверов и теперь можем перейти к настройке конфигурации.

      Шаг 3 — Настройка конфигурации первого узла

      На этом шаге мы выполним настройку конфигурации нашего первого узла. У всех узлов кластера должна быть практически идентичная конфигурация. В связи с этим мы настроим конфигурацию на первом сервере, а затем скопируем ее на другие узлы.

      По умолчанию СУБД MySQL настроена для проверки директории /etc/mysql/conf.d для получения дополнительных параметров конфигурации из файлов с расширением .cnf. Создайте в этой директории на первом сервере файл со всеми директивами для вашего кластера:

      • sudo nano /etc/mysql/conf.d/galera.cnf

      Добавьте в этот файл следующую конфигурацию. Данная конфигурация задает различные параметры кластера, детальные параметры текущего сервера и других серверов кластера, а также параметры репликации. IP-адреса в конфигурации должны соответствовать частным адресам соответствующих серверов, поэтому замените выделенные строки правильными IP-адресами.

      /etc/mysql/conf.d/galera.cnf

      [mysqld]
      binlog_format=ROW
      default-storage-engine=innodb
      innodb_autoinc_lock_mode=2
      bind-address=0.0.0.0
      
      # Galera Provider Configuration
      wsrep_on=ON
      wsrep_provider=/usr/lib/galera/libgalera_smm.so
      
      # Galera Cluster Configuration
      wsrep_cluster_name="test_cluster"
      wsrep_cluster_address="gcomm://First_Node_IP,Second_Node_IP,Third_Node_IP"
      
      # Galera Synchronization Configuration
      wsrep_sst_method=rsync
      
      # Galera Node Configuration
      wsrep_node_address="This_Node_IP"
      wsrep_node_name="This_Node_Name"
      
      • Первый раздел изменяет или подтверждает параметры MySQL, обеспечивающие правильную работу кластера. Например, Galera не работает с MyISAM и другими системами хранения без транзакций, а mysqld не следует привязывать к IP-адресу для узла localhost. Дополнительную информацию о настройках можно найти на странице по конфигурации системы Galera Cluster.
      • Раздел «Galera Provider Configuration» настраивает компоненты MySQL, которые обеспечивают API репликации WriteSet. В данном случае это означает Galera, поскольку Galera является поставщиком wsrep (репликации WriteSet). Мы зададим общие параметры настройки начальной среды репликации. Для этого не требуется персонализация, но вы можете узнать дополнительную информацию о параметрах конфигурации Galera в документации.
      • Раздел «Galera Cluster Configuration» определяет кластер, идентифицируя узлы кластера по IP-адресу или полному доменному имени и создавая имя кластера, чтобы участники присоединялись к правильной группе. Вы можете изменить значение параметра wsrep_cluster_name на любое другое имя или оставить имя test_cluster, но для параметра wsrep_cluster_address нужно указать IP-адреса трех ваших серверов.
      • В разделе Galera Synchronization Configuration определяются взаимодействие и синхронизация участников кластера. Он используется только для передачи состояния при включении узлов. Для первоначальной настройки мы используем rsync, поскольку это стандартный вариант, который подходит для наших целей.
      • В разделе Galera Node Configuration уточняются IP-адрес и имя текущего сервера. Это полезно для диагностики проблем в журналах и для использования нескольких видов ссылок на каждый сервер. Значение параметра wsrep_node_address должно соответствовать адресу текущего узла, но вы можете выбрать любое удобное название, чтобы вам было удобнее идентифицировать узел в файлах журнала.

      Когда вы будете довольны файлом конфигурации кластера, скопируйте содержимое в буфер обмена, а затем сохраните и закройте файл.

      Мы успешно настроили наш первый узел и теперь можем перейти к настройке конфигурации остальных узлов.

      Шаг 4 — Настройка остальных узлов

      На этом шаге мы выполним настройку конфигурации остальных двух узлов. Откройте файл конфигурации на втором узле:

      • sudo nano /etc/mysql/conf.d/galera.cnf

      Вставьте конфигурацию, скопированную из первого узла, а затем измените раздел Galera Node Configuration так, чтобы в нем использовались IP-адрес или доменное имя узла, который вы настраиваете. Затем измените название узла так, чтобы вам было легко распознавать его в файлах журнала:

      /etc/mysql/conf.d/galera.cnf

      . . .
      # Galera Node Configuration
      wsrep_node_address="This_Node_IP"
      wsrep_node_name="This_Node_Name"
      . . .
      
      

      Сохраните и закройте файл.

      После выполнения этих шагов повторите их для третьего узла.

      Мы уже почти запустили кластер, но прежде чем мы сделаем это, нам нужно убедиться, что на брандмауэре открыты соответствующие порты.

      Шаг 5 — Открытие портов брандмауэра на каждом сервере

      На этом шаге мы настроим брандмауэр так, чтобы были открыты все порты, требующиеся для связи между узлами. Проверьте статус брандмауэра на каждом сервере с помощью следующей команды:

      В данном случае разрешен только трафик SSH:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)

      Поскольку разрешен только трафик SSH, нам нужно добавить правила для трафика MySQL и Galera. Если мы попытаемся запустить кластер, эти правила брандмауэра помешают нам сделать это.

      Galera может использовать четыре порта:

      • 3306 для подключения клиентов MySQL и передачи снимков состояния с использованием метода mysqldump.
      • 4567 для трафика репликации кластера Galera. При репликации мультивещания на этом порту используются транспорт UDP и TCP.
      • 4568 для инкрементной передачи состояния.
      • 4444 для передачи всех других снимков состояния.

      В данном примере при настройке мы открываем все четыре порта. После проверки работы репликации нужно закрыть неиспользуемые порты и ограничить трафик серверами в составе кластера.

      Откройте порты с помощью следующих команд:

      • sudo ufw allow 3306,4567,4568,4444/tcp
      • sudo ufw allow 4567/udp

      Примечание. Если этого требуют другие приложения на ваших серверах, доступ можно ограничить сразу же. В этом поможет обучающее руководство Основы UFW: распространенные правила и команды брандмауэра.

      После настройки брандмауэра на первом узле следует задать такие же параметры брандмауэра на втором и третьем узлах.

      Мы успешно выполнили настройку брандмауэра и теперь готовы к запуску кластера.

      Шаг 6 — Запуск кластера

      На этом шаге мы запустим наш кластер MySQL Galera. Вначале нужно включить службу MySQL systemd, чтобы обеспечить автоматический запуск MySQL при перезагрузке сервера.

      Активация MySQL для запуска при загрузке на всех трех серверах

      Используйте следующую команду для включения службы MySQL systemd на всех трех серверах:

      • sudo systemctl enable mysql

      Вы увидите экран следующего вида, подтверждающий добавление службы в список автозагрузки:

      Output

      Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service.

      Мы активировали автозагрузку mysql на всех трех серверах и теперь можем запускать кластер.

      Включение первого узла

      Для запуска первого узла нам потребуется специальный скрипт. При нашей конфигурации кластера каждый активируемый узел будет пытаться подключиться хотя бы к одному узлу, указанному в файле galera.cnf, для получения его начального состояния. Без использования скрипта mysqld_bootstrap, который позволяет systemd передавать параметр --wsrep-new-cluster, обычная команда systemctl start mysql не будет выполняться, поскольку первый узел не сможет подключиться ни к какому другому узлу.

      Запустите на первом сервере следующую команду:

      При успешном выполнении этой команды на экран ничего не выводится. После успешного выполнения этого скрипта узел регистрируется как часть кластера, и вы можете увидеть это с помощью следующей команды:

      • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

      После ввода пароля вы увидите следующий экран, показывающий, что в кластере содержится один узел:

      Output

      +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+

      На остальных узлах можно запускать mysql обычным образом. Они будут искать активных участников кластера из списка и подключатся к кластеру, когда найдут их.

      Включение второго узла

      Теперь мы можем запустить второй узел. Запустите mysql:

      • sudo systemctl start mysql

      При успешном выполнении на экран ничего не выводится. По мере запуска узлов вы увидите, как размер кластера увеличивается:

      • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

      Вы увидите следующий экран, показывающий, что к кластеру подключился второй узел и что теперь в кластере содержится два узла.

      Output

      +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+

      Включение третьего узла

      Настало время запустить третий узел. Запустите mysql:

      • sudo systemctl start mysql

      Запустите следующую команду для определения размера кластера:

      • mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

      Вы увидите следующий экран, показывающий, что к кластеру подключился третий узел и что всего кластер содержит три узла.

      Output

      +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+

      Теперь все узлы кластера активны и успешно взаимодействуют друг с другом. Далее мы можем проверить работу системы, проведя репликацию.

      Шаг 7 — Тестирование репликации

      Теперь наш кластер может выполнять репликацию любых узлов в режиме «активный-активный». На этом шаге мы проверим, работает ли репликация ожидаемым образом.

      Запись в первый узел

      Вначале мы внесем изменения в базу данных на первом узле. Следующие команды создадут базу данных playground и таблицу equipment внутри этой базы данных.

      • mysql -u root -p -e 'CREATE DATABASE playground;
      • CREATE TABLE playground.equipment ( id INT NOT NULL AUTO_INCREMENT, type VARCHAR(50), quant INT, color VARCHAR(25), PRIMARY KEY(id));
      • INSERT INTO playground.equipment (type, quant, color) VALUES ("slide", 2, "blue");'

      В показанной выше команде выражение CREATE DATABASE создает базу данных с именем playground. Выражение CREATE создает таблицу с именем equipment в базе данных playground. Эта таблица содержит столбец идентификации id с инкрементным увеличением идентификатора, а также другие столбцы. Столбец type, столбец quant и столбец color определяют тип, количество и цвет оборудования. Выражение INSERT вставляет запись с типом slide, количеством 2 и цветом blue.

      Теперь наша таблица содержит одно значение.

      Чтение и запись на втором узле

      Посмотрим на второй узел, чтобы проверить работу репликации:

      • mysql -u root -p -e 'SELECT * FROM playground.equipment;'

      Если репликация работает, введенные на первом узле данные будут видны здесь, на втором узле:

      Output

      +----+-------+-------+-------+ | id | type | quant | color | +----+-------+-------+-------+ | 1 | slide | 2 | blue | +----+-------+-------+-------+

      Выполните запись данных в кластер с этого узла:

      • mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("swing", 10, "yellow");'

      Чтение и запись на третьем узле

      На третьем узле вы можете снова отправить запрос в таблицу для чтения всех этих данных:

      • mysql -u root -p -e 'SELECT * FROM playground.equipment;'

      Вы увидите следующий экран, содержащий две строки:

      Output

      +----+-------+-------+--------+ | id | type | quant | color | +----+-------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | +----+-------+-------+--------+

      На этом узле вы можете добавить в таблицу еще одно значение:

      • mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("seesaw", 3, "green");'

      Чтение на первом узле

      Вернувшись на первый узел, вы сможете убедиться, что данные доступны на всех узлах:

      • mysql -u root -p -e 'SELECT * FROM playground.equipment;'

      Теперь мы увидим следующий экран, подтверждающий доступность всех строк на первом узле.

      Output

      +----+--------+-------+--------+ | id | type | quant | color | +----+--------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | | 3 | seesaw | 3 | green | +----+--------+-------+--------+

      Мы подтвердили возможность записи на всех узлах и успешное выполнение репликации.

      Заключение

      Теперь у нас имеется работающий и настроенный тестовый кластер Galera с тремя узлами. Если вы планируете использовать кластер Galera в рабочей среде, рекомендуем начать как минимум с пяти узлов.

      Перед использованием в работе стоит познакомиться с другими агентами передачи снимков состояния (sst), такими как xtrabackup, которые позволяют быстро настраивать новые узлы без значительных перебоев в работе активных узлов. Это не влияет на репликацию, но может создать сложности при инициализации узлов.

      Возможно вас также заинтересуют другие решения кластеризации для MySQL, и в этом случае мы рекомендуем ознакомиться с обучающим руководством Создание кластера MySQL с несколькими узлами в Ubuntu 18.04. Если вам требуется решение управляемой базы данных, ознакомьтесь с документацией по управляемым базам данных DigitalOcean.



      Source link