Suposições
- Você não usa o RHEL 7 SCL (coleções de software) ou rh-mariadb101 {, - galera}
- Você tem servidores RHEL 7 / CentOS 7 com EPEL instalado
- O SELinux é necessário, executando e impondo
- O Firewalld está em execução e bloqueia por padrão
- Seus 3 IPs de host são 1.2.3.4, 1.2.3.5 e 1.2.3.6
Configuração do Firewall
As portas necessárias para o Galera & MariaDB para funcionar corretamente são as portas TCP 4444, 4567 e 4568 e a porta UDP 4567. MariaDB requer a porta TCP 3306. Nesta configuração, assumimos que os hosts 1.2.3.4, 1.2.3.5 e 1.2.3.6 têm permissão para fazer parte do cluster , bem como um futuro host IP 1.2.3.7. Esta configuração também assume que qualquer host pode se conectar na porta 3306. Login e su -
para root. Execute os seguintes comandos.
# firewall-cmd --zone=public --add-port=3306/tcp
# firewall-cmd --zone=public --add-port=3306/tcp --permanent
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4444 protocol=tcp accept'
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4444 protocol=tcp accept' --permanent
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4567 protocol=tcp accept'
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4567 protocol=tcp accept' --permanent
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4568 protocol=tcp accept'
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4568 protocol=tcp accept' --permanent
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4567 protocol=udp accept'
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4567 protocol=udp accept' --permanent
Preparação de Políticas do SELinux
Login e su -
para raiz. Execute ou execute as etapas a seguir. A última linha é necessária apenas para um local de dados não padrão. Observe que, se você definir um local de dados em /home
ou /usr
systemd, proibirá a gravação do MariaDB e o MariaDB falhará. Para contornar isso, defina ProtectSystem=false
no arquivo de unidade /lib/systemd/system/mariadb.service
. Em seguida, execute systemctl daemon-reload
.
# mkdir selinux && cd selinux
# cat > galera.te << XYZZY
module galera 1.0;
require {
type unconfined_t;
type initrc_tmp_t;
type rsync_exec_t;
type init_t;
type mysqld_t;
class process setpgid;
class file { execute execute_no_trans getattr open read };
class service enable;
}
#============= mysqld_t ==============
allow mysqld_t initrc_tmp_t:file open;
allow mysqld_t rsync_exec_t:file { execute execute_no_trans getattr open read };
allow mysqld_t self:process setpgid;
#============= unconfined_t ==============
allow unconfined_t init_t:service enable;
XYZZY
# checkmodule -M -m galera.te -o galera.mod
# semodule_package -m galera.mod -o galera.pp
# semodule -i galera.pp
# semanage port -m -t mysqld_port_t -p tcp 4567
# semanage port -m -t mysqld_port_t -p udp 4567
# semanage port -m -t mysqld_port_t -p tcp 4444
# semanage port -m -t mysqld_port_t -p tcp 4568
# semanage fcontext -a -t mysqld_db_t "/alternate/path/to/data/mysql(/.*)?"
Implantação do repositório MariaDB, instalação do pacote, configuração
Faça o download do link . Certifique-se de que o servidor da Web que fornece essa chave seja confiável; a segurança do seu novo repositório depende disso.
# cp RPM-GPG-KEY-MariaDB /etc/pki/rpm-gpg/ ; chmod ugo+r /etc/pki/rpm-gpg/RPM-GPG-KEY-MariaDB
# cat > /etc/yum.repos.d/mariadb.repo << XYZZY
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/rhel7-amd64
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled = 1
XYZZY
# chmod ugo+r /etc/yum.repos.d/mariadb.repo
# yum install MariaDB-server galera
Depois de instalar os pacotes, você deve configurar o MariaDB por procedimento normal antes de criar o cluster. A primeira linha abaixo é necessária apenas se você quiser usar um local de dados diferente do padrão.
# mysql_install_db --user=mysql --group=mysql --ldata=/alternate/path/to/data/mysql
# systemctl start mariadb
# mysql_secure_installation
# systemctl stop mariadb
# galera_new_cluster
Verifique se o MariaDB + Galera está sendo executado. Em caso afirmativo, você pode configurar os próximos dois hosts. Instale as regras do SELinux e os pacotes de software como antes, mas adicione imediatamente as seguintes linhas à seção [galera] em /etc/my.cnf.d/server.cnf. Assume que o IP do servidor galera original é 1.2.3.4 e seus pares serão 1.2.3.5 e 1.2.3.6. Defina o tamanho do cache para algo apropriado para seus sistemas.
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="gcache.size=1024M; gcache.page_size=1024M"
wsrep_cluster_address=gcomm://1.2.3.4,1.2.3.5,1.2.3.6
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# systemctl start mariadb
Neste ponto, os logs devem indicar que os dados foram replicados do primeiro servidor para o servidor atual. Repita essas etapas no (s) servidor (es) restante (s).
Agora pare o MariaDB no servidor original e adicione a configuração galera a /etc/my.cnf.d/server.cnf
. Reinicie o MariaDB no servidor original. Verifique se os dados estão sendo sincronizados entre os pontos.
Ativar TLS
Esta seção opcional pressupõe que você já tenha gerado um certificado X.509v3 e uma chave privada correspondente. Tanto o certificado quanto a chave devem ser armazenados em formato PEM não criptografado. Para este exemplo, os nomes dos arquivos são assumidos como server.crt
e server.key
, respectivamente.
# cp server.crt /etc/pki/tls/certs/ ; chmod ugo+r /etc/pki/tls/certs/server.crt ; cp server.key /etc/pki/tls/private/server.key ; chmod 640 /etc/pki/tls/private/server.key ; chgrp mysql /etc/pki/tls/private/server.key
Adicione as seguintes linhas em /etc/my.cnf.d/server.cnf
na seção [mysqld]
:
ssl_cert = / etc / pki / tls / certs / server.crt
ssl_key = / etc / pki / tls / private / server.key
Crie /etc/systemd/system/mariadb.service.d/TLS.conf
com o seguinte conteúdo:
[service]
Environment=”MYSQLD_OPTS=--ssl”
O Systemd é como o systemd, portanto, execute systemctl daemon-reload
novamente para ler a nova configuração.
A reinicialização do servidor é necessária para que o MariaDB aceite conexões TLS. Observe que o TLS está disponível, mas não é necessário neste estágio de configuração.
Verifique os registros para verificar se o MariaDB carregado com o TLS está ativado: journalctl _SYSTEMD_UNIT=mariadb.service
. A falha em iniciar o TLS é registrada apenas como um [Warning]: ^ (
Este é meu primeiro passo nisso. Eu ficarei feliz em incorporar melhorias: ^)