From 5e03c61acad1f5f219ac3cc386dd67707d0cc503 Mon Sep 17 00:00:00 2001 From: Marcelo Linhares Castro Date: Thu, 7 Nov 2019 11:27:47 -0300 Subject: [PATCH] Docs --- README.md | 8 ++++---- docs/sei-banco.md | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ docs/sei-politica-backup.md | 20 ++++++++++++++++++++ politica-backup.md | 20 -------------------- sei-banco.md | 182 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 5 files changed, 206 insertions(+), 206 deletions(-) create mode 100644 docs/sei-banco.md create mode 100644 docs/sei-politica-backup.md delete mode 100644 politica-backup.md delete mode 100644 sei-banco.md diff --git a/README.md b/README.md index 7304e24..b2a90f8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # SEI [Conteiner](#conteiner-de-aplicacao-para-o-sei) + [Base de Dados e Backup](#base-de-dados-do-seimp) @@ -27,12 +28,11 @@ Os módulos são (e devem estar respectivamente com o seguinte nome): Por favor sugerir correções e melhorias. - - ## Base de Dados do SEIMP -[Banco de Dados](sei-banco) +[Banco de Dados](docs/sei-banco.md) ## Backup do SEIMP -[Política de Backup](sei-politica-backup) +[Política de Backup](docs/sei-politica-backup.md) + diff --git a/docs/sei-banco.md b/docs/sei-banco.md new file mode 100644 index 0000000..3dad534 --- /dev/null +++ b/docs/sei-banco.md @@ -0,0 +1,182 @@ +# Banco de Dados + +A base de dados do SEI deve ser vista a partir da união do banco de dados e dos arquivos anexos que ficam em filesystem. + +Neste documento vamos denominar: +- bd: banco de dados do SEI em mysql +- arquivos anexos: arquivos de conteúdo diverso, binário ou não, que o SEI permite que seja feito o upload por seus usuários +- base de dados: união entre bd e arquivos anexos + +O BD possui diversas informações estruturais e funcionais do sistema SEI, enquanto os arquivos anexos são documentos diversos que são subidos até a aplicação via upload. + + +## Requisitos + +Tanto o banco de dados quanto o filesystem com os arquivos anexos possuem os seguintes requisitos: + +- não é permitido, em caso de crash ou problemas, a perda de informações +- a principal ação deve estar na guarda e backup dos dados e logs binários do banco e arquivos anexos para garantir perda zero de informação +- a segunda principal ação deve estar relacionada a disponibilidade do serviço +- velocidade aceitável de leitura e escrita para a carga requerida do Ministério do Planejamento + * 300 transações / segundo + * 1.4 GB de crescimento / dia do BD + * 11 GB / dia de crescimento da base de dados +- deve-se permitir, em caso de necessidade, recuperar os dados na forma point in time recovery, podendo voltar até 1 ano atrás da posição atual +- portanto os logs binários devem ser mantidos pelo período de pelo menos 1 ano + +## Profissional Necessário + +O profissional necessário para manter a solução deverá ter os conhecimentos em mysql server 5.7. + +Dentre as suas competências deverão constar, no mínimo: +- instalação / sustentação de mysql server 5.7 em ambiente produtivo +- implementação de réplica em log binário (master/slave) +- tuning da base de dados de acordo com o ambiente e expectativas do cliente +- recuperação de desastres do mysql server +- point in time recovery de base de dados +- geração e otimização de dumps +- análise de logs com relatórios objetivos apontando gargalos e melhorias na infraestrutura +- médio conhecimento em linux + +## Necessidades Específicas para a Base do SEI + +O profissional responsável pela base deverá constantemente: +- garantir que a réplica esteja há menos de 5 segundos do master +- garantir que a rotina de rsync dos arquivos anexos esteja a menos de 3 minutos dos arquivos de produção +- garantir a disponibilidade de 99% da base de dados master (considerando dias úteis) +- informar a DTI sobre qualquer erro ou situação que possa comprometer o ambiente +- informar imediatamente a DTI sobre qualquer indisponibilidade ou lentidão + + +## Tecnologias + +Atualmente o banco de dados é mysql 5.7 com uma réplica também em mysql 5.7. +Para os arquivos anexos, estamos usando Storage - EMC, com NFS ativado para leitura e escrita dos dados + +## Arquitetura + +- Arquivos Anexos: + * 192.x.x.x + * diretório NFS: /SEI_PROD_xx + +- Mysql Master + * 192.x.x.x + * servidor físico com 24 cores e 64GB + * servidor compartilhado com o PDCMP + * data do mysql: /dados_banco/mysql/data + * logs binários do mysql: /dados_banco/mysql/binlog + +- Mysql Slave - Virtual + * 192.x.x.x + * servidor virtual 8 cores e 11GB + * data do mysql: /dados_banco/mysql/data + * logs binários do mysql: /dados_banco/mysql/binlog + + +- Mysql Slave - Física + * 192.x.x.x + * servidor físico 8 cores e 32GB + * data do mysql: /replica_bd/mysql/data + * logs binários do mysql: /replica_bd/mysql/binlog + * diretório para backup - dumps: /replica_bd/backup/dumps (aponta para Storage VNX) + * diretório para backup - logs binários: /replica_bd/backup/logbinarios (aponta para Storage VNX) + + +## Rotinas + +Para garantir a guarda das informações, inclusive a reconstrução da base de dados em caso de crash, foram implementadas as seguintes ações: + +- réplica nativa do mysql usando um master e um slave +- logs binários independentes do master e slave +- para os arquivos anexos há quatro rsync rodando, replicando todo o filesystem do diretório de origem para o diretório de backup +- toda terça e sábado roda um crontab que tira o dump da réplica e salva no diretório de backup + +### Rotina dos arquivos anexos + +- crontab agendado no root + * crontab que roda de 5 em 5 segundos copiando todos os arquivos anexos do diretório de prododução para os diretórios de backup (note o flock para impedir a execução ao mesmo tempo de várias instâncias da rotina) + +``` +0 0,7,21 * * * flock -n lock_file_prod -c "/root/scripts/copia_prod_replica.sh" +0 1,8,22 * * * flock -n lock_file_prod_to_ibm -c "/root/scripts/copia_prod_to_ibm.sh" +* * * * * flock -n lock_file_prod_dodia -c "/root/scripts/copia_prod_replica_dodia.sh" +* * * * * flock -n lock_file_prod_to_ibm_dodia -c "/root/scripts/copia_prod_to_ibm_dodia.sh" +* * * * * flock -n lock_file_replica_dodia -c "/root/scripts/copia_replica_sei_anexos_dodia.sh" +0 1,8,22 * * * flock -n lock_file_replica -c "/root/scripts/copia_replica_sei_anexos.sh" +19 9,12,16,21,22,23 * * * flock -n lock_file_bin -c "/copia_sei/scripts/sei_bkp_binlogs.sh" + +``` + +* conteúdo do copia_prod_replica_dodia.sh + +``` + +#!/bin/bash + +#pegar ano mês e dia + +PATTERN=$(date +%Y/%m/%d) + +for i in $(seq 1 10) +do + + if [ -d "/SEI_PROD/sei_anexos/$PATTERN" ]; then + + if [ ! -d "/SEI_REPLICA/sei_anexos/$PATTERN" ]; then + mkdir -p /SEI_REPLICA/sei_anexos/$PATTERN + #echo "criei /tmp/dst/$PATTERN" + fi + + #echo $PATTERN + rsync -a /SEI_PROD/sei_anexos/$PATTERN/* /SEI_REPLICA/sei_anexos/$PATTERN/ + + fi + +sleep 5 + +done +``` + +### Rotina do Dump da Base + +- crontab + +``` +0 0 * * 3,6 /copia_sei/scripts/sei_bkp_bd.sh +``` + +- arquivo sei_bkp_bd.sh + +``` +#!/bin/bash + +#vUSER="USERNAME" +vPASS="<>" +DATA=$(date +%Y-%m-%d-%H.%M.%S) + +echo "" >> /copia_sei/scripts/result.log +echo "Parando Réplica: $DATA" >> /copia_sei/scripts/result.log + +mysqladmin stop-slave -u$vUSER -p$vPASS + +echo "Réplica parada. Iniciando Dump" >> /copia_sei/scripts/result.log + +mysqldump -u$vUSER -p$vPASS --master-data=2 --max_allowed_packet=500M --databases sei sip > /copia_sei/dumps_base/dmp_$DATA.dump + +echo "Dump feito. Restartando Slave" >> /copia_sei/scripts/result.log + +mysqladmin start-slave -u$vUSER -p$vPASS + +echo "Slave Restartado. $(date +%Y-%m-%d-%H.%M.%S)" >> /copia_sei/scripts/result.log +``` + +## Rotacionamento dos dumps e Logs + +O rotacionamento dos logs binários ainda não foi implementado. + +É feito manualmente. + +Deve-se tomar o cuidado de rotacionar apenas o que já foi armazenado pelo netbackup e teve a guarda armazenada em fita. + +Poderá, no futuro, implementar rotina automática para rotacionamento. + diff --git a/docs/sei-politica-backup.md b/docs/sei-politica-backup.md new file mode 100644 index 0000000..036c88d --- /dev/null +++ b/docs/sei-politica-backup.md @@ -0,0 +1,20 @@ +# Política de Backup SEI + +## Target + +- VM 10.209.8.160 (réplica do SEI) + Diretório: /copia_sei + + Nesse diretório contém os arquivos anexos, bem como o dump e os logs binários + +## Periodicidade + +- Full Mensal - último dia do mês - cópia do diretório dados (dump da base + arquivos anexos) +- Diferencial Incremental Diário + +## Retenção +- 5 anos + +## Janela + +- 0h às 04h da manhã \ No newline at end of file diff --git a/politica-backup.md b/politica-backup.md deleted file mode 100644 index 036c88d..0000000 --- a/politica-backup.md +++ /dev/null @@ -1,20 +0,0 @@ -# Política de Backup SEI - -## Target - -- VM 10.209.8.160 (réplica do SEI) - Diretório: /copia_sei - - Nesse diretório contém os arquivos anexos, bem como o dump e os logs binários - -## Periodicidade - -- Full Mensal - último dia do mês - cópia do diretório dados (dump da base + arquivos anexos) -- Diferencial Incremental Diário - -## Retenção -- 5 anos - -## Janela - -- 0h às 04h da manhã \ No newline at end of file diff --git a/sei-banco.md b/sei-banco.md deleted file mode 100644 index 3dad534..0000000 --- a/sei-banco.md +++ /dev/null @@ -1,182 +0,0 @@ -# Banco de Dados - -A base de dados do SEI deve ser vista a partir da união do banco de dados e dos arquivos anexos que ficam em filesystem. - -Neste documento vamos denominar: -- bd: banco de dados do SEI em mysql -- arquivos anexos: arquivos de conteúdo diverso, binário ou não, que o SEI permite que seja feito o upload por seus usuários -- base de dados: união entre bd e arquivos anexos - -O BD possui diversas informações estruturais e funcionais do sistema SEI, enquanto os arquivos anexos são documentos diversos que são subidos até a aplicação via upload. - - -## Requisitos - -Tanto o banco de dados quanto o filesystem com os arquivos anexos possuem os seguintes requisitos: - -- não é permitido, em caso de crash ou problemas, a perda de informações -- a principal ação deve estar na guarda e backup dos dados e logs binários do banco e arquivos anexos para garantir perda zero de informação -- a segunda principal ação deve estar relacionada a disponibilidade do serviço -- velocidade aceitável de leitura e escrita para a carga requerida do Ministério do Planejamento - * 300 transações / segundo - * 1.4 GB de crescimento / dia do BD - * 11 GB / dia de crescimento da base de dados -- deve-se permitir, em caso de necessidade, recuperar os dados na forma point in time recovery, podendo voltar até 1 ano atrás da posição atual -- portanto os logs binários devem ser mantidos pelo período de pelo menos 1 ano - -## Profissional Necessário - -O profissional necessário para manter a solução deverá ter os conhecimentos em mysql server 5.7. - -Dentre as suas competências deverão constar, no mínimo: -- instalação / sustentação de mysql server 5.7 em ambiente produtivo -- implementação de réplica em log binário (master/slave) -- tuning da base de dados de acordo com o ambiente e expectativas do cliente -- recuperação de desastres do mysql server -- point in time recovery de base de dados -- geração e otimização de dumps -- análise de logs com relatórios objetivos apontando gargalos e melhorias na infraestrutura -- médio conhecimento em linux - -## Necessidades Específicas para a Base do SEI - -O profissional responsável pela base deverá constantemente: -- garantir que a réplica esteja há menos de 5 segundos do master -- garantir que a rotina de rsync dos arquivos anexos esteja a menos de 3 minutos dos arquivos de produção -- garantir a disponibilidade de 99% da base de dados master (considerando dias úteis) -- informar a DTI sobre qualquer erro ou situação que possa comprometer o ambiente -- informar imediatamente a DTI sobre qualquer indisponibilidade ou lentidão - - -## Tecnologias - -Atualmente o banco de dados é mysql 5.7 com uma réplica também em mysql 5.7. -Para os arquivos anexos, estamos usando Storage - EMC, com NFS ativado para leitura e escrita dos dados - -## Arquitetura - -- Arquivos Anexos: - * 192.x.x.x - * diretório NFS: /SEI_PROD_xx - -- Mysql Master - * 192.x.x.x - * servidor físico com 24 cores e 64GB - * servidor compartilhado com o PDCMP - * data do mysql: /dados_banco/mysql/data - * logs binários do mysql: /dados_banco/mysql/binlog - -- Mysql Slave - Virtual - * 192.x.x.x - * servidor virtual 8 cores e 11GB - * data do mysql: /dados_banco/mysql/data - * logs binários do mysql: /dados_banco/mysql/binlog - - -- Mysql Slave - Física - * 192.x.x.x - * servidor físico 8 cores e 32GB - * data do mysql: /replica_bd/mysql/data - * logs binários do mysql: /replica_bd/mysql/binlog - * diretório para backup - dumps: /replica_bd/backup/dumps (aponta para Storage VNX) - * diretório para backup - logs binários: /replica_bd/backup/logbinarios (aponta para Storage VNX) - - -## Rotinas - -Para garantir a guarda das informações, inclusive a reconstrução da base de dados em caso de crash, foram implementadas as seguintes ações: - -- réplica nativa do mysql usando um master e um slave -- logs binários independentes do master e slave -- para os arquivos anexos há quatro rsync rodando, replicando todo o filesystem do diretório de origem para o diretório de backup -- toda terça e sábado roda um crontab que tira o dump da réplica e salva no diretório de backup - -### Rotina dos arquivos anexos - -- crontab agendado no root - * crontab que roda de 5 em 5 segundos copiando todos os arquivos anexos do diretório de prododução para os diretórios de backup (note o flock para impedir a execução ao mesmo tempo de várias instâncias da rotina) - -``` -0 0,7,21 * * * flock -n lock_file_prod -c "/root/scripts/copia_prod_replica.sh" -0 1,8,22 * * * flock -n lock_file_prod_to_ibm -c "/root/scripts/copia_prod_to_ibm.sh" -* * * * * flock -n lock_file_prod_dodia -c "/root/scripts/copia_prod_replica_dodia.sh" -* * * * * flock -n lock_file_prod_to_ibm_dodia -c "/root/scripts/copia_prod_to_ibm_dodia.sh" -* * * * * flock -n lock_file_replica_dodia -c "/root/scripts/copia_replica_sei_anexos_dodia.sh" -0 1,8,22 * * * flock -n lock_file_replica -c "/root/scripts/copia_replica_sei_anexos.sh" -19 9,12,16,21,22,23 * * * flock -n lock_file_bin -c "/copia_sei/scripts/sei_bkp_binlogs.sh" - -``` - -* conteúdo do copia_prod_replica_dodia.sh - -``` - -#!/bin/bash - -#pegar ano mês e dia - -PATTERN=$(date +%Y/%m/%d) - -for i in $(seq 1 10) -do - - if [ -d "/SEI_PROD/sei_anexos/$PATTERN" ]; then - - if [ ! -d "/SEI_REPLICA/sei_anexos/$PATTERN" ]; then - mkdir -p /SEI_REPLICA/sei_anexos/$PATTERN - #echo "criei /tmp/dst/$PATTERN" - fi - - #echo $PATTERN - rsync -a /SEI_PROD/sei_anexos/$PATTERN/* /SEI_REPLICA/sei_anexos/$PATTERN/ - - fi - -sleep 5 - -done -``` - -### Rotina do Dump da Base - -- crontab - -``` -0 0 * * 3,6 /copia_sei/scripts/sei_bkp_bd.sh -``` - -- arquivo sei_bkp_bd.sh - -``` -#!/bin/bash - -#vUSER="USERNAME" -vPASS="<>" -DATA=$(date +%Y-%m-%d-%H.%M.%S) - -echo "" >> /copia_sei/scripts/result.log -echo "Parando Réplica: $DATA" >> /copia_sei/scripts/result.log - -mysqladmin stop-slave -u$vUSER -p$vPASS - -echo "Réplica parada. Iniciando Dump" >> /copia_sei/scripts/result.log - -mysqldump -u$vUSER -p$vPASS --master-data=2 --max_allowed_packet=500M --databases sei sip > /copia_sei/dumps_base/dmp_$DATA.dump - -echo "Dump feito. Restartando Slave" >> /copia_sei/scripts/result.log - -mysqladmin start-slave -u$vUSER -p$vPASS - -echo "Slave Restartado. $(date +%Y-%m-%d-%H.%M.%S)" >> /copia_sei/scripts/result.log -``` - -## Rotacionamento dos dumps e Logs - -O rotacionamento dos logs binários ainda não foi implementado. - -É feito manualmente. - -Deve-se tomar o cuidado de rotacionar apenas o que já foi armazenado pelo netbackup e teve a guarda armazenada em fita. - -Poderá, no futuro, implementar rotina automática para rotacionamento. - -- libgit2 0.21.2