Nesse post vamos demonstrar como provisionar um ambiente master / slave para o banco de dados GLPI, e sincronização de arquivos em tempo real com o lsyncd, nosso ambiente será provisionando usando o LXC para executarem os containeres ( nossos servidores virtuais do glpi.) e um script pra acelerar a instalação do GLPI.
1ª Etapa - Subindo os contêineres
Criando contêineres servidores GLPI com LXC
Nesse ambiente optamos por criar os servidores para o GLPI com o LXC, por ser extremamente leve, e simular o mais próximo possível um ambiente de máquina virtual.
lxc launch images:ubuntu/20.04 ch-helpdesk01
lxc launch images:ubuntu/20.04 ch-helpdesk02
2ª Etapa - Instalando o GLPI
Instalando o ambiente GLPi atraves do script glpi-install
Instalar o GLPI nos dois contêineres seguindo o procedimento abaixo;
ch-helpdesk01
lxc exec ch-helpdesk01 bash
timedatectl set-timezone America/Sao_Paulo
apt install git
git clone https://gitlab.com/ferreirarocha/glpi-install.git
bash glpi-install/install_glpi_ubuntu_20.04.sh suporte.labferreirarocha.tk 123456
Obs: Eu atualizei a estrutura do script e mudei o seu nome para setup.sh, dessa forma sua execução ocorre da seguinte forma
bash glpi-install/setup.sh suporte.labferreirarocha.tk 123456
ch-helpdesk02
lxc exec ch-helpdesk02 bash
timedatectl set-timezone America/Sao_Paulo
apt install git
git clone https://gitlab.com/ferreirarocha/glpi-install.git
bash glpi-install/install_glpi_ubuntu_20.04.sh suporte.labferreirarocha.tk 123456
Obs: Eu atualizei a estrutura do script e mudei o seu nome para setup.sh, dessa forma sua execução ocorre da seguinte forma
bash glpi-install/setup.sh suporte.labferreirarocha.tk 123456
3ª Etapa - Configurando a replicação
Configurando o /etc/hosts
ch-helpdesk01
No servidor ch-helpdesk01, abra o arquivos /etc/hosts e faça a alteração conforme abaixo;
nano /etc/hosts
10.20.30.91 ch-helpdesk01
10.20.30.92 ch-helpdesk02
ch-helpdesk02
No servidor ch-helpdesk02, abra o arquivos /etc/hosts e faça a alteração conforme abaixo;
nano /etc/hosts
10.20.30.91 ch-helpdesk01
10.20.30.92 ch-helpdesk02
Master - ch-helpdesk01
Agora é chegada a hora de configuramos o ambiente master / slave, no servidor ch-helpdesk01, execute as seguintes alterações.
nano /etc/mysql/mariadb.conf.d/50-server.cnf
Procure a linha contendo bind-address = 127.0.0.1 e altere para
bind-address = 0.0.0.0
No final do arquivo adicione os seguintes parâmetros
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index =/var/log/mysql/mysql-bin.log.index
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
systemctl restart mariadb
mysql -u root -p
CREATE USER 'replication'@'ch-helpdesk02' identified by '123456';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'ch-helpdesk02';
FLUSH PRIVILEGES;
show master status;
Esta informação será utilizada durante a configuração do(s) slaves.
Slave - ch-helpdesk02
nano /etc/mysql/mariadb.conf.d/50-server.cnf
Procure a linha contendo bind-address = 127.0.0.1 e altere para
bind-address = 0.0.0.0
No final do arquivo adicione os seguintes parâmetros
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index =/var/log/mysql/mysql-bin.log.index
relay_log = /var/log/mysql/mysql-relay-bin
relay_log_index = /var/log/mysql/mysql-relay-bin.index
systemctl restart mariadb
mysql -u root -p
stop slave;
Altere o MASTER_LOG_FILE e MASTER_LOG_POS, pelos valores impressos em show master status, no ch-helpdesk01
CHANGE MASTER TO MASTER_HOST='ch-helpdesk01', MASTER_USER='replication', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=802;
start slave;
SHOW SLAVE STATUS \G;
Criando usuário de consulta para o GLPI Slave
Criaremos um usuário de consulta para que o GLPi Slave não grave em sua base dados testes e gere entradas duplicadas na base de dados, causando erros como na imagem abaixo;
CREATE USER 'glpi_consulta'@'%' IDENTIFIED BY '123456';
GRANT SELECT ON glpi.* TO 'glpi_consulta'@'%';
FLUSH PRIVILEGES;
nano /etc/glpi/config_db.php
<?php
class DB extends DBmysql {
public $dbhost = 'localhost';
public $dbuser = 'glpi_consulta';
public $dbpassword = '123456';
public $dbdefault = 'glpi';
}
4ª Etapa - Sincronizando arquivos do GLPI
CH-HELPDESK02
Instale o lsyncd e o openssh-server para iniciarmos a configuração do ambiente de sincronização de arquivos em real-time
apt install lsyncd openssh-server -y
nano /etc/ssh/sshd_config
PermitRootLogin yes
systemctl restart sshd
passwd root
CH-HELPDESK01
apt install lsyncd openssh-server -y
nano /etc/ssh/sshd_config
PermitRootLogin yes
systemctl restart sshd
Configurando a autenticação via chaves ssh
Gerando a chave
ssh-keygen
Enviando a chave
ssh-copy-id root@ch-helpdesk02
Configurando o arquivo lsyncd
mkdir /var/log/lsyncd/
mkdir /etc/lsyncd
nano /etc/lsyncd/lsyncd.conf.lua
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd-status.log",
statusInterval = 10,
insist = true,
nodaemon = true
}
sync {
default.rsyncssh,
source = "/var/lib/glpi/",
host = "ch-helpdesk02",
targetdir = "/var/lib/glpi/",
delay = 10
}
systemctl restart lsyncd &
systemctl status lsyncd
Nosso ambiente está pronto para uso, agora abra o servidores primários e secundário e faça os testes, nosso servidor secundário não conseguirá gravar no banco através do GLPI, pois o usuário é apenas consulta, toda alteração deverá ser realizada no ambiente master.
Fontes:
Lsyncd https://axkibe.github.io/lsyncd/
Master/Slave https://mariadb.com/de/resources/blog/database-master-slave-replication-in-the-cloud/
Instalação GLPi https://glpi-install.readthedocs.io/en/latest/install/index.html
LXC/LXD https://linuxcontainers.org/lxd/
Script de instalação https://gitlab.com/ferreirarocha/glpi-install/-/blob/master/install_glpi_ubuntu_20.04.sh