A maioria das etapas de instalação disponíveis na Internet cobrem a instalação online padrão, presumindo que os hosts do banco de dados tenham uma conexão ativa com a Internet para os repositórios de pacotes e satisfaçam todas as dependências. No entanto, as etapas e comandos de instalação são um pouco diferentes para a instalação offline. A instalação offline é uma prática comum em um ambiente rígido e seguro como os setores financeiro e militar para conformidade de segurança, reduzindo os riscos de exposição e mantendo a confidencialidade.
Nesta postagem de blog, vamos instalar um cluster MariaDB de três nós em um ambiente offline em hosts CentOS. Considere os três nós a seguir para esta instalação:
- mariadb1 - 192.168.0.241
- mariadb2 - 192.168.0.242
- mariadb3 - 192.168.0.243
Baixar Pacotes
A parte mais demorada é obter todos os pacotes necessários para nossa instalação. Primeiramente, acesse o respectivo repositório MariaDB que desejamos instalar (neste exemplo, nosso SO é CentOS 7 64bit):
- MariaDB 10.4:http://yum.mariadb.org/10.4/centos7-amd64/rpms/
- MariaDB 10.3:http://yum.mariadb.org/10.3/centos7-amd64/rpms/
- MariaDB 10.2:http://yum.mariadb.org/10.2/centos7-amd64/rpms/
- MariaDB 10.1:http://yum.mariadb.org/10.1/centos7-amd64/rpms/
- MariaDB 10.0:http://yum.mariadb.org/10.0/centos7-amd64/rpms/
Certifique-se de baixar exatamente a mesma versão secundária para todos os pacotes relacionados ao MariaDB. Neste exemplo, baixamos o MariaDB versão 10.4.13. Existem vários pacotes neste repositório, mas não precisamos de todos eles apenas para executar um MariaDB Cluster. Alguns dos pacotes estão desatualizados e para fins de depuração. Para MariaDB Galera 10.4 e CentOS 7, precisamos baixar os seguintes pacotes do repositório MariaDB 10.4:
- jemalloc
- galera-3/galera-4
- libzstd
- Backup do MariaDB
- servidor MariaDB
- Cliente MariaDB
- MariaDB compartilhado
- Comum MariaDB
- Compatível com MariaDB
Os seguintes comandos wget simplificariam o processo de download:
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/galera-4-26.4.4-1.rhel7.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/jemalloc-3.6.0-1.el7.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/libzstd-1.3.4-1.el7.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-backup-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-client-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-common-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-compat-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-server-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-shared-10.4.13-1.el7.centos.x86_64.rpm
Alguns desses pacotes têm dependências de outros pacotes. Para satisfazer todos eles, provavelmente é melhor montar a imagem ISO do sistema operacional e apontar o gerenciador de pacotes yum para usar a imagem ISO como um repositório base offline. Caso contrário, perderíamos muito tempo tentando baixar/transferir os pacotes de um host/mídia para outro.
Se você estiver procurando por pacotes MariaDB mais antigos, procure-os em seu repositório de arquivos aqui. Uma vez baixado, transfira os pacotes para todos os servidores de banco de dados via drive USB, gravador de DVD ou qualquer armazenamento de rede conectado aos hosts do banco de dados.
Monte a imagem ISO localmente
Algumas das dependências precisam ser satisfeitas durante a instalação e uma maneira de fazer isso facilmente é configurando o repositório yum offline nos servidores de banco de dados. Em primeiro lugar, temos que baixar a imagem ISO do DVD do CentOS 7 do site espelho do CentOS mais próximo, no diretório "isos":
$ wget http://centos.shinjiru.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2003.iso
Você pode transferir a imagem e montá-la diretamente ou gravá-la em um DVD e usar a unidade de DVD e conectá-la ao servidor. Neste exemplo, vamos montar a imagem ISO como um DVD no servidor:
$ mkdir -p /media/CentOS
$ mount -o loop /root/CentOS-7-x86_64-DVD-2003.iso /media/CentOS
Em seguida, habilite o repositório CentOS-Media (c7-media) e desabilite os repositórios online padrão (base,updates,extras):
$ yum-config-manager --disable base,updates,extras
$ yum-config-manager --enable c7-media
Agora estamos prontos para a instalação.
Instalando e configurando o servidor MariaDB
As etapas de instalação são bastante simples se tivermos todos os pacotes necessários prontos. Em primeiro lugar, é recomendável desabilitar o SElinux (ou configurá-lo para o modo permissivo):
$ setenforce 0
$ sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
Navegue até o diretório onde todos os pacotes estão localizados, neste caso, /root/installer/. Verifique se todos os pacotes estão lá:
$ cd /root/installer
$ ls -1
galera-4-26.4.4-1.rhel7.el7.centos.x86_64.rpm
jemalloc-3.6.0-1.el7.x86_64.rpm
libzstd-1.3.4-1.el7.x86_64.rpm
MariaDB-backup-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-client-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-common-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-compat-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-server-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-shared-10.4.13-1.el7.centos.x86_64.rpm
Vamos instalar primeiro a dependência mariabackup chamada socat e depois executar o comando yum localinstall para instalar os pacotes RPM e satisfazer todas as dependências:
$ yum install socat
$ yum localinstall *.rpm
Inicie o serviço MariaDB e verifique o status:
$ systemctl start mariadb
$ systemctl status mariadb
Certifique-se de não ver nenhum erro no processo. Em seguida, execute o script mysql_secure_installation para configurar a senha de root do MySQL e o hardening:
$ mysql_secure_installation
Certifique-se de que a senha de root do MariaDB seja idêntica em todos os hosts MariaDB. Crie um usuário MariaDB para realizar backup e SST. Isso é importante se quisermos usar o mariabackup recomendado como o método SST para o MariaDB Cluster e também para fins de backup:
$ mysql -uroot -p
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'P455w0rd';
MariaDB> GRANT SELECT, INSERT, CREATE, RELOAD, PROCESS, SUPER, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW, EVENT, CREATE TABLESPACE ON *.* TO [email protected];
Precisamos modificar o arquivo de configuração padrão para carregar as funcionalidades do MariaDB Cluster. Abra /etc/my.cnf.d/server.cnf e verifique se as seguintes linhas existem para configuração mínima:
[mysqld]
log_error = /var/log/mysqld.log
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.0.241,192.168.0.242,192.168.0.243
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
innodb_flush_log_at_trx_commit=2
wsrep_sst_method=mariabackup
wsrep_sst_auth=backup_user:P455w0rd
wsrep_node_address=192.168.0.241 # change this
Não se esqueça de alterar o valor wsrep_node_address com o endereço IP do nó do banco de dados para comunicação do MariaDB Cluster. Além disso, o valor wsrep_provider pode ser diferente dependendo do servidor MariaDB e da versão do MariaDB Cluster que você instalou. Localize o caminho libgalera_smm.so e especifique-o adequadamente aqui.
Repita as mesmas etapas em todos os nós do banco de dados e agora estamos prontos para iniciar nosso cluster.
Inicializando o cluster
Como este é um novo cluster, podemos escolher qualquer um dos nós MariaDB para se tornar o nó de referência para o processo de inicialização do cluster. Vamos escolher mariadb1. Certifique-se de que o MariaDB esteja parado primeiro, então execute o comando galera_new_cluster para bootstrap:
$ systemctl stop mariadb
$ galera_new_cluster
$ systemctl status mariadb
Nos outros dois nós (mariadb2 e mariadb3), vamos iniciá-lo usando o comando start padrão do MariaDB:
$ systemctl stop mariadb
$ systemctl start mariadb
Verifique se todos os nós fazem parte do cluster observando o status relacionado ao wsrep em cada nó:
MariaDB> SHOW STATUS LIKE 'wsrep%';
Certifique-se de que o status relatado seja o seguinte:
wsrep_local_state_comment | Synced
wsrep_cluster_size | 3
wsrep_cluster_status | Primary
Para MariaDB 10.4 e Galera Cluster 4, podemos obter as informações do membro do cluster diretamente da tabela mysql.wsrep_cluster_members em qualquer nó MariaDB:
$ mysql -uroot -p -e 'select * from mysql.wsrep_cluster_members'
Enter password:
+--------------------------------------+--------------------------------------+---------------+-----------------------+
| node_uuid | cluster_uuid | node_name | node_incoming_address |
+--------------------------------------+--------------------------------------+---------------+-----------------------+
| 35177dae-a7f0-11ea-baa4-1e4604dc8f68 | de82efcb-a7a7-11ea-8273-b7a81016a75f | maria1.local | AUTO |
| 3e6f9d0b-a7f0-11ea-a2e9-32f4a0481dd9 | de82efcb-a7a7-11ea-8273-b7a81016a75f | maria2.local | AUTO |
| fd63108a-a7f1-11ea-b100-937c34421a67 | de82efcb-a7a7-11ea-8273-b7a81016a75f | maria3.local | AUTO |
+--------------------------------------+--------------------------------------+---------------+-----------------------+
Se algo der errado durante a inicialização do cluster, verifique o log de erros do MySQL em /var/log/mysqld.log em todos os nós MariaDB. Depois que um cluster estiver inicializado e em execução, não execute o script galera_new_cluster novamente para iniciar um serviço MariaDB. Deve ser suficiente usando o comando padrão "systemctl start/restart mariadb", a menos que não haja mais nenhum nó de banco de dados no estado PRIMARY. Confira esta postagem no blog, How to Bootstrap MySQL or MariaDB Cluster, para entender por que essa etapa é crítica.
Etapa Bônus
Agora você já tem um cluster de banco de dados em execução sem nenhum recurso de monitoramento e gerenciamento. Por que você não importa o cluster de banco de dados para o ClusterControl? Instale o ClusterControl em outro servidor separado e configure o SSH sem senha do servidor ClusterControl para todos os nós do banco de dados. Supondo que o IP do servidor ClusterControl seja 192.168.0.240, execute os seguintes comandos no servidor ClusterControl:
$ whoami
root
$ ssh-keygen -t rsa # generate key, press Enter for all prompts
$ ssh-copy-id [email protected] # root password on 192.168.0.241
$ ssh-copy-id [email protected] # root password on 192.168.0.242
$ ssh-copy-id [email protected] # root password on 192.168.0.243
Em seguida, vá para ClusterControl -> Import -> MySQL Galera e insira os detalhes SSH necessários:
Na segunda etapa em Definir servidores MySQL, desative "Descoberta automática de nós " e especifique todos os endereços IP dos nós do banco de dados e certifique-se de que haja uma marca verde ao lado do endereço IP, indicando que o ClusterControl é capaz de alcançar o nó via SSH sem senha:
Clique em Importar e aguarde até que o trabalho de importação seja concluído. Você deve vê-lo na lista de clusters:
Você está em boas mãos agora. Observe que o ClusterControl assumirá como padrão os recursos corporativos completos de 30 dias e, após expirar, retornará ao Community Edition, que é gratuito para sempre.